当前位置: 首页 > news >正文

淘宝卖东西如何在网站做宣传域名在哪买

淘宝卖东西如何在网站做宣传,域名在哪买,太仓市住房和城乡建设局规网站,景安搭建wordpress本文主要讨论高性能编程#xff0c;而且是那种“极致性能需求”。按照本人的粗浅认识#xff0c;应该已经覆盖了绝大多数技术要点#xff0c;但缺点是不够详细#xff08;篇幅有限#xff09;。本文共分为4个部分#xff1a;总体论述、高性能网络编程、高性能数值计算、常…本文主要讨论高性能编程而且是那种“极致性能需求”。按照本人的粗浅认识应该已经覆盖了绝大多数技术要点但缺点是不够详细篇幅有限。本文共分为4个部分总体论述、高性能网络编程、高性能数值计算、常规高性能需求。 1总体论述 C/C的重要性在于所有操作系统内核都是C语言编写嵌入式设备编程也基本都是C语言。虽然最新版本的Linux内核在讨论是否引入Rust。但未来10~20年直接操作硬件的编程语言仍然是以C语言为主的。C是对C兼容性最好的高级语言它可以保留对硬件底层操作能力的同时提供“零开销”的抽象能力从而可以使用更抽象的软件工程成果。在所有高性能需求场合C/C是最重要某种程度上也是唯一的方案。 下面简略谈一下别的编程语言。 Fortran 在数值计算领域的历史要早于 C它一直是科学和工程应用的主要语言。但是Fortran 脱离计算机工业主流发展一个大趋势是Fortran 的科学计算库逐渐被改为C语言。比如说我刚工作的时候还是写过Fortran 代码的。但是工作5~6年以后所有的Fortran 代码基本都改成C了。 Julia 是专为高性能数值计算而设计的编程语言比较适合科研。Julia 比较适合对性能有较高要求同时不熟悉计算机体系结构的科学家或工程师使用比如物理学、电气工程、气象预报、经济学等非计算机专业。本文讨论的是极致性能需求和较高性能要求还是有本质区别的。 Rust是除了C唯一既具有底层操作能力又具有抽象能力的编程语言。Rust放弃了对C的兼容在内存安全性、编译器等方面做了巨大改进。C与Rust的对比经常是技术论坛争吵的话题。我个人认为相当长时间内Rust仍然不能撼动C的地位。 Java是主流编程语言。一般情况下Java的性能比C慢10倍内存占用可能超过10倍。所以Java是不能满足高性能需求的。比Java更慢的语言例如Python就更不适合高性能需求了。有人可能觉得用Python做AI应用性能也很不错。那是因为你调用的别人写好的库库的内部多半是用C实现的相当于在别人的地基上搭建自己的房子。 高性能编程需要有一个总体、历史的视角。大约2006年起CPU的摩尔定律差不多“失效”了。在那之前主频常常从一个版本跃升到下一个版本从几百兆赫兹飙升到几G赫兹。但到了2000年代中期这种飞速的增长放缓了主要是由于功耗和热量问题。从那时起CPU的升级主要是通过增加核心数、提高每个核心的效率、增加缓存大小等方法来提高总体芯片性能。但是不经过任何优化的程序是在单个CPU核心上运行的这是最吃亏的。这意味着常规程序不能享受信息工业的进步。 相对于CPU其它硬件设备进步反而更大。比如说网卡从 1Gbps 的速度2000年左右到 10Gbps、25Gbps 甚至 100Gbps(2014年左右)网卡的传输速度得到了显著的提升。甚至网络协议中的部分校验功能也可由网络硬件来实现了。比如说GPU的最新发展其浮点计算能力几乎超过CPU的10倍以上还有FPGA、ASIC芯片的发展很多特定的功能可以交给硬件实现。当然非CPU设备专门用于特定任务通用编程仍然是CPU完成的。因此C/C的编程越来越像是“指挥官”的角色把各种各样的硬件协调好、发挥最大功效。因此真正高性能的系统一定是软硬件结合的。 对于传统的纯CPU程序高性能优化的主要方向是多核并行或者是用户空间上下文的快速切换例如协程技术这同样需要深入的计算机组成原理的知识比如存储的层次结构、多核下缓存的一致性问题、函数的汇编实现等。 传统上来说“指挥官”的角色是由操作系统内核来承担的。即使是计算机专业的毕业生也少有人对操作系统内核十分熟悉。我听说很多高校的操作系统课程是以讲授理论为主很少有学生能深入真实的操作系统内核进行编程和调试的。这个现状已经越来越难以适应高性能技术的发展了。 下面再谈一下若干纯技术问题。 时钟测试这一点非常重要很多人优化程序凭借自己的“感受”其实主观感受经常非常不准。根据Amdahl定律只有测试出最占时间的串行代码并行优化才能取得最大功效。Linux经常采用gettimeofday函数被认为是比较精确的时间测量函数。这个函数早期是系统调用会产生较大的代价。但现在新的内核版本gettimeofday函数已经是用户空间函数了或者至少避免了上下文切换。除了gettimeofday函数更精确的函数是rdtsc这本质是汇编语句封装直接读寄存器获取CPU时间戳每一个处理器时钟周期它就增加 1。然后这个差值除以CPU频率就得到时间。使用 rdtsc 也需要注意一些技术要点固定CPU频率在高性能应用程序中通常建议禁用CPU的动态调整功能特别是在BIOS设置和内核裁剪编译两个环节都要禁止电源管理防止降频绑定线程到特定的CPU核同时进行CPU亲和性设置防止高性能线程的中断测量时间过程中尽量不要进行系统调用包括不限于延迟和定时文件和阻塞式网络I/O同步和锁定进程和线程管理内存申请释放等等。 高性能指标的矛盾实时性是为了在给定的时间约束内完成特定的工作。例如硬实时系统必须在固定的时间内响应否则可能会导致系统崩溃或其他不良后果。吞吐量是系统在单位时间内可以处理的工作量。为了确保任务在固定的时间内完成可能需要预留更多的计算资源例如把特定的CPU核独占这可能会降低系统的总体吞吐量。反之为了最大化吞吐量可能需要允许某些任务的完成时间超出其理想的时间范围。具体优先优化何种指标需要根据实际的需求来定。还有一些其它的矛盾指标例如功耗与性能、价格与性能等等。 推荐学习视频 面试高频技术专为性能而生linux c/c开发必学的几个高性能组件线程池、内存池、自旋锁、互斥锁、原子操作、定时器、内存泄漏、分布式锁https://www.bilibili.com/video/BV1Ug4y1Z7rt/ 2高性能网络编程 大多数实时的需求都建立在与外界通信基础上比如说工业控制、量化交易、硬件在环仿真等。毕竟数字世界与真实世界交互网络是最常用的交互方式。其它的接口例如RS-485工业总线在通信速度方面可能弱于以太网但抗干扰能力远强于以太网。在电力系统我接触的范围硬实时都是通过以太网或者无源光纤接口实现的。因此本文的高性能网络编程默认为以太网网卡或者光口。 前面说过传统网络编程任务全部交给内核。但内核是通用的对于高性能网络通信任务是不擅长的。内核socket的各种系统调用、上下文切换、内存拷贝等没有专门的高性能优化这些都会增加延迟并减少吞吐量。假设我们把内核比作大山山上确实有非常多的风景但我们的目的并不是欣赏风景而是快速通过。那么无非是两种方法一是打隧道也就是进行内核编程二是修路从山旁边绕过去也就是By-pass 技术绕过操作系统的传统网络堆栈直接在用户空间中处理网络数据包。 内核编程方面Linux内核的新版本已经有很多改进例如零拷贝(Zero-Copy)传统的数据传输需要多次的内存拷贝这会消耗大量的CPU资源。零拷贝技术通过减少或消除这些拷贝操作来提高性能。还有非阻塞I/O、I/O多路复用例如select、poll和epoll它们可以让单一的线程监视多个文件描述符有效地管理大量的并发连接。对于上层的应用程序我们一般不直接调用socket而是使用封装的网络库例如boost::asio库是非常好的工具。但充分发挥库能力的前提是对内核处理网络通信的过程不能一无所知。 在嵌入式开发需求方面即使是升级后的Linux内核都不能胜任了我们可以进行内核裁剪、编程自己增加特定的系统调用或者驱动。我所知的有人把IEC 61850的实现放在内核中完成。其实IEC 61850实现本身并没有复杂到哪里去主要是内核的开发调试需要掌握的知识点非常多。 另外一个技术路径是By-pass 技术在用户空间中处理报文减少上下文切换避免不必要的内存拷贝。许多 by-pass 解决方案使用轮询模式来检测新的数据包而不是依赖中断。这可以减少中断的开销尤其是在高流量环境中。还有一点是很关键的但是从未看到别人提到用户态程序开发调试的麻烦程度是比内核小太多了可能小10倍都不止。 DPDK是By-pass 技术的典型代表最近一段时间我一直在调试DPDK充分感受到DPDK的博大精深它的性能强到让人吃惊的地步。DPDK使用大页内存和高效的缓冲区管理以及零拷贝、轮询等技术能够快速地处理和转发数据包。DPDK完全接管网卡所以网络协议栈必须自己写会遇到很多socket编程根本设想不了的问题。 推荐学习视频 linux c/c开发之高性能网络编程面试与开发都非常重要的技术不容错过tcp/ip、udp、epoll、网络io、reactor、网络协议栈https://www.bilibili.com/video/BV1Ru4y1J7E3/C/C程序员的未来方向DPDK高性能网络开发教程dpdk/网络协议栈/vpp/OvS/DDos/SDN/NFV/虚拟化/spdkhttps://www.bilibili.com/video/BV1x64y1A7C2/ 3高性能数值计算 前面提到数值计算方面在GPU的推动下“异构”已经是主流编程方式了。首先高度并行的、计算密集型的部分适合 GPU而 I/O 密集型、分支密集型或需要复杂数据结构的部分适合 CPU。很显然不是所有的任务都适合GPU来做。除此以外CPU 和 GPU 之间的数据传输可能会成为瓶颈。尽量减少数据传输的次数尤其是在频繁的计算迭代中。使用异步数据传输允许 CPU 和 GPU 同时工作而不是等待数据传输完成。大多数情况而言到达微秒的实时性要求级别GPU不太适合了这种情况下更多的是使用FPGA。另外多利用成熟的库如 CUDA、cuBLAS、cuDNN 等它们经过优化可以提供很好的性能。 对于纯粹基于CPU的高性能计算任务优先采用高性能的库。例如MATLAB的底层矩阵库就是MKL稠密矩阵/SuiteSparse(稀疏矩阵)。这些高性能库千锤百炼有大量的优化甚至汇编优化、大概率比你自己写的计算程序要好。只有在极其狭窄的功能或者场合自己写的库要更好些。比如我自己写的稀疏矩阵加法的性能比Eigen略好一些。 我自己用过这些数值计算库MKL但是其稀疏矩阵的计算性能比较让人失望SuiteSparse(Tim Davis教授的经典库稀疏矩阵最近增加了图计算库Eigen比较好的C矩阵库OpenBLAS(张先轶的作品朋友圈有他)GLPK(优化算法库)fftw快速傅里叶分析。 如果是非常大型的高性能计算需要动用数据中心的力量甚至是不同城市的数据中心。这就是分布式系统架构的概念了例如OpenAI公司已经使用Kubernetes训练自然语言大模型。 4常规高性能需求 对于常规高性能需求主要是日常编程的时候有些技术准则要遵循。《深入理解计算机系统》第三版这本书已经总结得很不错了主要包括循环的时候要注意流水线问题第4章减少分支预测失败排好序的循环性能会提高很多充分利用编译器第5章包括让编译器实现SIMD并行与循环展开、减少不必要的内存操作、减少过程调用理解存储的层次结构第6章充分利用局部性原理和提高缓存命中率这点可能是对常规软件影响最大的方面JAVA无法像C/C那样控制内存分布这就导致进行不了这么深入的优化。这本书后面还讨论了系统调用、IO、网络编程等内容都对高性能编程有很好的参考价值。《深入理解计算机系统》写得非常好也很基础。这本书完全掌握后才谈得上对高性能编程有些概念可能还算不上入门。 对于C编程还有一些准则需要遵循。这方面可以寻找专门C的专著来看。C的特殊之处是编译器可能在程序员背后做很多事情有时候会让程序员大吃一惊。特别是C中的字符串、vector等标准库设施在内存申请之前一定要reserve还有避免不必要的复制这在初始化、函数传参等方面都要注意可以适当使用移动语义。C的并发编程也一直是很难的问题稍微不仔细就会遇到性能损失或者漏洞可以谨慎的使用原子操作和无锁数据结构。 当然数据结构和算法还是很重要的但这已经不属于“极致优化”而属于程序员的常识。我经常看到同事写多重循环每个循环都要从头到尾遍历一遍每当看到这样的代码都感觉有些心痛大量的CPU周期和数据中心电力都这样被浪费了而且确实遇到过算法复杂性没做好导致的现场问题。C的标准库在数据结构和算法是非常经典的这点无可置疑。另外还有一些库是对C标准库的进一步优化例如folly库。 本文最后写出几个常数希望对大家有启发作用 3GHz的CPU时钟周期是0.3纳秒而光在真空中跑这么久只能前进10cm只有一个手掌的长度。缓存一致性的协议可能比你想的复杂特别是涉及ccNUMA缓存一致性非均匀内存访问机器 寄存器、L1、L2缓存都可以在10ns以内完成操作L3可能需要20ns内存至少需要100ns甚至更多。缓存的优化非常重要。 数据中心到你家的时间延迟大概是10ms以上这看起来比较长但这是物理规律决定的。任何优化都不能超越物理。 硬盘的IO读写延迟为15ms所以尽量不要动用硬盘实在没办法我们可以用内存当做缓存这就是Redis的用法。
http://www.pierceye.com/news/278021/

相关文章:

  • 手机开网店的免费平台河南seo推广多少钱
  • 网站app推广怎么做wordpress 手机号注册
  • 网站开发到上线需要多久骆驼有没有做网站的公司
  • 中小企业网站建设示范平台wordpress停用react
  • 网站怎样防止攻击seo顾问培训
  • 网站建设后需要维护吗微信安全中心官网
  • dw可以做h5网站设计素材网站0
  • 建设银行郑州中心支行网站青海商会网站建设公司
  • 国外小型网站中国视觉设计网
  • 沈阳专业网站制作团队泰安网络软件公司
  • 网站建设招聘兼职0基础建站教程
  • 如何从零开始做网站文学网站建设平台
  • 企业网站的网址通常包含dchaser wordpress
  • 什么是做网站flash是怎么做网站的
  • 什么是速成网站石家庄网站建设就找
  • 张家界网站建设要求滨州网站建设费用
  • wordpress订阅插件南昌优化排名推广
  • 国外做网站公司能赚钱吗wordpress登录锚点弹
  • 微网站平台微网站建设方案邢台市有几个区几个县
  • 茶叶外贸网站建设中国建设银行是国企还是央企
  • 成都网站建设公司有哪些内容必应搜索
  • 青岛建设集团招聘信息网站公司官网怎么制作
  • 本溪网站开发公司电话县蒙文网站建设汇报
  • 广州建网站有哪些怎么做网站建设赚钱
  • led视频网站建设邯郸建设信息网站
  • 开发网站培训班网站详情页用cdr做可以吗
  • 相亲网站开发与设计报告广州网站维护
  • 门户网站 技术方案北京感染人数最新消息
  • 网站制作过程流程酷家乐在线设计官网
  • 六年级做网站的软件小程序开发文档微信小程序