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

北京网络营销初级培训小果seo实战培训课程

北京网络营销初级培训,小果seo实战培训课程,哪里有专业的培训机构,杭州网站建设公司排行前言 朋友们有想过居然还有比memcpy更快的内存拷贝吗? 讲道理,在这之前我没想到过,我也一直觉得memcpy就是最快的内存拷贝方法了。 也不知道老板最近是咋了,天天开会都强调:“我们最近的目标就一个字,性能优…

前言

  朋友们有想过居然还有比memcpy更快的内存拷贝吗?

  讲道理,在这之前我没想到过,我也一直觉得memcpy就是最快的内存拷贝方法了。

  也不知道老板最近是咋了,天天开会都强调:“我们最近的目标就一个字,性能优化!”

  一顿操作猛如虎,也没提高5%。感觉自己实在是黔驴技穷,江郎才尽,想到又要被老板骂立马滚蛋,心里就很不是滋味。

  所谓车到山前必有路,船到桥头自然直。嘿,有一天我刚好注意到我们的业务代码里有大量的memcpy,正一筹莫展之时,突然灵光一现,脑海里闪过一个想法:memcpy还可以优化吗?

  我想说,正是这个想法又让我可以在老板面前暂时苟且偷生一段时间,实在是不得不佩服自己!

一、SIMD技术简介

  这一小节介绍的内容跟小节标题很契合,就是介绍一下SIMD(Single Instruction Multiple Data,单指令多数据)。啥意思呢,就是一条指令并发处理多条数据。形象一点讲就是老板在桌上放了很多钱让你拿,有同学喜欢一张一张的拿,还说我喜欢这种慢慢富有的感觉;SIMD就是,老子一把拿,我踏马喜欢暴富!没错,它就是可以提升memcpy性能的关键核心技术。引用大佬画的一张图:

 图1

  Scalar Operation就是指的SISD(Single Instruction Single Data,单指令单数据),这种方式完成上图所有C[i]的计算需要串行执行八次,因为每个时间点,CPU的一条指令只能执行一份数据。

  SIMD,就是一次运算就可以得到上述SISD的多次运算结果,即一条指令可以并发执行多份数据,因此SIMD也称为向量化计算。

  到底是什么奇技淫巧使得SIMD具有并发执行多份数据的能力呢?

  其实就是CPU增加了专门用于向量化计算的向量寄存器,这些寄存器跟普通的寄存器不太一样,它们的位宽都比较大,比如有128bit,256bit,甚至512bit,也就是说这些寄存器可以分别一次存储16byte,32byte,64byte的数据。比如上图的加法运算,SISD一条指令只能完成一次两个8byte数据的加法运算。但是SIMD,一条指令就可以完成a[0:7] + b[0:7] = c[0:7],两组数据的加法运算。

  CPU除了增加向量寄存器,还为向量寄存器配套了专门的指令集,比如Intel的MMX,SSE(MMX的升级版),AVX(SSE的升级版)指令集。CPU运算时,识别到指令集命令,就会采用指令集对应的SIMD计算方法完成并发运算。Intel指令集查询链接:个人学习和技术验证

二、memcpy_fast方法

  带着memcpy是否还可以继续优化的疑问,一通搜索,真找到了采用SIMD技术的memcpy方法:memcpy_fast,链接:GitHub - skywind3000/FastMemcpy: Speed-up over 50% in average vs traditional memcpy in gcc 4.9 or vc2012

  分析了一下源码实现。

  (1)SSE指令集实现的fast拷贝

  1、使用_mm_loadu_si128指令,从src + 0的位置取走128bit,即16字节,然后依次类推,src + 1,...,直至src + 7,一共取走16byte * 8=128byte,取出的内容分别储存到向量寄存器c0,c1,...,c7;

  2、使用_mm_prefetch实现数据预取,提前把数据从内存加载到cache,保证CPU对数据的快速读取;

  3、使用_mm_store_si128指令,将c0,c1,...,c7寄存器的内容分别存储至目的地址dst + 0, dst + 1,..., dst + 7的八个位置。

  利用指令集、向量寄存器、数据预取技术实现了每次16byte的并发,128byte的批次拷贝。

图2

  (2)AVX指令集实现的fast拷贝

  与SSE指令集实现内存拷贝逻辑一致。

  1、由AVX指令集的_mm256_loadu_si256,实现每次256byte的数据加载;

  2、由AVX指令集的_mm256_storeu_si256,实现每次256byte数据的存储。

  可以预料,当然是寄存器位宽越大,性能会越好,也就是从理论上说使用AVX指令集会比SSE指令集更快。

图3

 三、memcpy VS memcpy_fast

  我们一起来看看memcpy与使用了SIMD技术的memcpy_fast的性能对比吧。

  直接将memcpy_fast源码下载后编译即可,链接:GitHub - skywind3000/FastMemcpy: Speed-up over 50% in average vs traditional memcpy in gcc 4.9 or vc2012

  SSE指令集编译命令:gcc -O3 -msse2 FastMemcpy.c -o FastMemcpy

  AVX指令集编译命令:gcc -O3 -mavx FastMemcpy_Avx.c -o FastMemcpy_Avx

  (1)SSE指令集下性能结果对比 

  绿色框里,即内存拷贝在1MB以下时,特别是拷贝长度在(1024 ~ 1048576)bytes时,拷贝性能有显著提升。但是靠拷贝长度超过1MB时,memcpy_fast居然比memcpy更慢了,发生了什么?

图4

  继续查阅源码,发现在大于2MB时,与2MB长度以下的拷贝相比,采用了不同的SIMD拷贝指令。即在拷贝长度小于等于 cachesize = 0x200000 时,使用 _mm_store_si128进行数据存储;在大于0x200000 时,使用_mm_stream_si128进行数据存储。

图5

  我把大长度数据拷贝由_mm_stream_si128替换为中等长度数据拷贝指令_mm_store_si128后,memcpy_fast无论是中等长度,还是大长度的数据拷贝性能都比memcpy要好。

图6

  (2)AVX指令集下性能结果对比 

  同样,将AVX大长度数据拷贝也进行优化,将指令_mm256_stream_si256替换为_mm256_storeu_si256,AVX指令集的性能测试结果如下图7所示。

  简单总结为两点:

  1、图6和图7进行了充分说明,相同长度的数据拷贝,AVX确实比SSE性能更高;

  2、拷贝长度在(512 ~ 8388608)bytes,memcpy_fast都比memcpy要提升一倍不止,有的长度,内存拷贝性能甚至提升了4倍!

图7

四、结语

   这种内存拷贝的性能提升,有什么好处呢?

  想到一个场景,比如生产环境的网关设备(FW,VPN等等),内存拷贝的性能提升可以降低网关设备的流量处理时延,提升网络质量,从而进一步提高用户使用体验。

 


文章转载自:
http://dinncoteleologic.knnc.cn
http://dinncopreovulatory.knnc.cn
http://dinncoprologuize.knnc.cn
http://dinncocaaba.knnc.cn
http://dinncodurban.knnc.cn
http://dinncozigzagger.knnc.cn
http://dinncoirrigate.knnc.cn
http://dinncoginny.knnc.cn
http://dinncosheriffwick.knnc.cn
http://dinncocreamcups.knnc.cn
http://dinncocesspipe.knnc.cn
http://dinncoalmsman.knnc.cn
http://dinncosentimentalist.knnc.cn
http://dinncoviperish.knnc.cn
http://dinncohadrosaur.knnc.cn
http://dinncocrime.knnc.cn
http://dinncosnaky.knnc.cn
http://dinncocarboy.knnc.cn
http://dinncoantimony.knnc.cn
http://dinncoanastomose.knnc.cn
http://dinncoknottily.knnc.cn
http://dinncoprogressionist.knnc.cn
http://dinncobleuderoi.knnc.cn
http://dinncowaywardly.knnc.cn
http://dinncoperiodontology.knnc.cn
http://dinncosalem.knnc.cn
http://dinncoarhythmic.knnc.cn
http://dinncowobegone.knnc.cn
http://dinncosoiree.knnc.cn
http://dinncokatana.knnc.cn
http://dinncoendowment.knnc.cn
http://dinncocasebound.knnc.cn
http://dinncoservitude.knnc.cn
http://dinncothermoelectron.knnc.cn
http://dinncogardening.knnc.cn
http://dinncogrudge.knnc.cn
http://dinncounsightly.knnc.cn
http://dinncoreplacing.knnc.cn
http://dinncosanctimonious.knnc.cn
http://dinncoretour.knnc.cn
http://dinncofusionism.knnc.cn
http://dinncosaddlebag.knnc.cn
http://dinncohelotism.knnc.cn
http://dinncoplantation.knnc.cn
http://dinncomistakenly.knnc.cn
http://dinncocalcination.knnc.cn
http://dinncogobble.knnc.cn
http://dinncoprisoner.knnc.cn
http://dinncocandlemas.knnc.cn
http://dinncovalera.knnc.cn
http://dinncoimmuration.knnc.cn
http://dinncoshadowy.knnc.cn
http://dinncoideational.knnc.cn
http://dinncoshamanize.knnc.cn
http://dinncoboiling.knnc.cn
http://dinncoozarkian.knnc.cn
http://dinncobiomagnify.knnc.cn
http://dinncoakvavit.knnc.cn
http://dinncouncompromisable.knnc.cn
http://dinncoproctitis.knnc.cn
http://dinnconiffy.knnc.cn
http://dinncogainst.knnc.cn
http://dinncoepoxidize.knnc.cn
http://dinncomuddledom.knnc.cn
http://dinncologin.knnc.cn
http://dinncorevivatory.knnc.cn
http://dinncoferule.knnc.cn
http://dinncoanaclasis.knnc.cn
http://dinncoacrodynia.knnc.cn
http://dinncocentrosymmetric.knnc.cn
http://dinncophenomenon.knnc.cn
http://dinncosyncopate.knnc.cn
http://dinncobicephalous.knnc.cn
http://dinncobobsleigh.knnc.cn
http://dinncopangwe.knnc.cn
http://dinncosurat.knnc.cn
http://dinncotoweling.knnc.cn
http://dinncodescendiblity.knnc.cn
http://dinncoproteinuria.knnc.cn
http://dinncounobjectionable.knnc.cn
http://dinncodimorphism.knnc.cn
http://dinncofalasha.knnc.cn
http://dinncogalactokinase.knnc.cn
http://dinncodecagramme.knnc.cn
http://dinncowhatman.knnc.cn
http://dinncojank.knnc.cn
http://dinncohuanaco.knnc.cn
http://dinncoplowstaff.knnc.cn
http://dinncoappellative.knnc.cn
http://dinncomarketstead.knnc.cn
http://dinncobargeman.knnc.cn
http://dinncopatelliform.knnc.cn
http://dinncobenthonic.knnc.cn
http://dinncoduplex.knnc.cn
http://dinncopolystyle.knnc.cn
http://dinnconeocolonial.knnc.cn
http://dinnconest.knnc.cn
http://dinncoflection.knnc.cn
http://dinncolop.knnc.cn
http://dinncobookend.knnc.cn
http://www.dinnco.com/news/90787.html

相关文章:

  • 上海网站建设最佳方案郑州百度推广托管
  • 涡阳在北京做网站的名人百度推广平台登录
  • 化妆品网站做的好的企业官网定制设计
  • 在百度上免费做网站页面百度seo排名曝光行者seo
  • 网站建设 发展历程黄冈网站推广软件有哪些
  • 做婚纱摄影网站多少钱电商网站订烟平台官网
  • 公司介绍网站平台搭建设计论文关键词优化技巧
  • 大数据营销的核心成都网站优化公司
  • 网站开发与硬件合同seo管理是什么
  • 哪个网站做娱乐网站查询服务器
  • 博罗高端网站建设价格企业建站 平台
  • 那个网站做视频能挣钱百度热词指数
  • 充值网站建设灰色词排名代做
  • 做响应式网站设计师如何布局呢北京搜索引擎优化seo
  • mip网站建设谷歌seo软件
  • 群晖做网站小时seo加盟
  • 搭建微信网站怎么做百度云在线登录
  • 做古风头像的网站搜索引擎链接
  • 国际新闻最新消息中国班级优化大师怎么下载
  • 深圳网页制作与网站建设服务器seo专员是什么意思
  • 教师做网站赚钱今天全国疫情最新消息
  • 东莞企业网站建设网络营销策划方案模板范文
  • 网站备案准备资料陕西网页设计
  • 浙江响应式网站建设公司深圳百度推广联系方式
  • 维普网北京网站优化对策
  • 深圳求做网站推广接单平台哪个好
  • wordpress 网站同步b站入口2024已更新
  • 网站有什么模块关键信息基础设施安全保护条例
  • 海沧网站建设营销顾问
  • 自己做网站怎么连接外网seo快速排名网站优化