最新的GNUC库(Glibc)开发代码已开始删除各种SSSE3优化代码路径。这些包括删除mem{move|cpy}-ssse3-back、str{p}{n}cpy-ssse3、str{n}cat-ssse3、str{n}{case}cmp-ssse3和{w}memcmp-ssse3代码路径。据介绍,SupplementalStreamingSIMDExtensions3(SSSE3)最早可以追溯到十多年前的IntelXeon5100/Core2或AMDBobcat/Bulldozer,当时它被设想为SSE的迭代。但由于Glibc还为与SSSE3同龄的旧SSE2或SSE4.1优化了代码路径,并为较新的Intel/AMDCPU提供了AVX2和EVEX代码路径,因此SSSE3代码路径正在逐步淘汰。考虑到SSE2/SSE4.1/AVX2/EVEX代码路径的存在,Glibc开发者认为不再值得提供SSSE3优化代码路径;因为留给SSSE3路径的Intel/AMDCPU已经不多了,而且代码中提供了SSSE3支持,需要的成本不菲。自上周以来,开发人员一直致力于将其移除。围绕memmove/mempcpy/memcpy的SSSE3代码也已减少。提交内容说明:目标是删除大部分SSSE3功能,因为SSE4、AVX2和EVEX通常更可取。memcpy/memmove是个例外,对于某些目标,避免使用`palignr`进行无符号加载很重要。此提交将memmove-ssse3替换为优化更好且代码占用空间更低的版本,并将memcpy别名为memmove。除此之外,所有其他SSSE3函数都应该可以安全删除。性能没有太大变化,尽管在没有任何重大回归或收益的情况下显示出整体改进。bench-memcpygeometric_mean(N=50)新/原:0.957bench-memcpy-randomgeometric_mean(N=50)新/原:0.912bench-memcpy-largegeometric_mean(N=50)新/原:0.892Benchmarkswhererunon兆芯KX-6840@2000MHz完整的兆芯KX-6840@2000MHz基准测试结果见附件。更重要的是,这一举措在memmove中节省了7246字节的代码大小,通过为memcpy重用memmove代码又节省了10741字节(总共节省了17987字节)。还有一个额外的896字节的rodata用于跳转表条目。Glibc2.36版正在逐步淘汰相关的SSSE3代码路径。本文转自OSCHINA文章标题:Glibc删除各种SSSE3优化代码路径本文地址:https://www.oschina.net/news/191709/glibc-dropping-ssse3-paths
