Glibc 删除关于 SSSE3 优化的代码路径
最新的 GNU C Library (Glibc) 开发代码已经开始丢弃各种 SSSE3 优化代码路径。其中包括删除 mem{move| cpy }-ssse3-back、str{p}{n}cpy-ssse3、str{n}cat-ssse3、str{n}{case}cmp-ssse3 和 {w }memcmp-ssse3 代码路径。 |
根据介绍,Supplemental Streaming SIMD Extensions 3 (SSSE3) 可以追溯到十多年前的 Intel Xeon 5100 / Core 2 days 或 AMD Bobcat/Bulldozer,彼时的设想是作为 SSE 的一个迭代。但是由于 Glibc 也携带了与 SSSE3 差不多时间的旧版 SSE2 或 SSE4.1 的优化代码路径,加上用于较新的 Intel/AMD CPU 的 AVX2 和 EVEX 代码路径,SSSE3 代码路径正在被逐步淘汰。
考虑到 SSE2/SSE4.1/AVX2/EVEX 代码路径的存在,Glibc 开发人员认为不再值得提供 SSSE3 优化的代码路径;因为已经很少有 Intel/AMD CPU 留给 SSSE3 路径,且在代码中提供 SSSE3 支持需要的成本并不低。从上周开始,开发人员已经开始着手移除它。
围绕 memmove/mempcpy/memcpy 的 SSSE3 代码也有所减少。commit 内容解释称:
目标是删除大多数 SSSE3 function,因为 SSE4、AVX2 和 EVEX 通常更可取。memcpy/memmove 是一个例外,对于某些目标来说,用`palignr`避免无符号负载很重要。 此 commit 用一个更好的优化和更低的代码占用率的版本替换了 memmove-ssse3,同时它还将 memcpy 别名为 memmove。 除此之外,所有其他 SSSE3 functions 都应该可以安全删除。性能并没有发生太大变化,尽管显示了整体改进而没有任何重大的 regressions 或 gains。 bench-memcpy geometric_mean(N=50) New / Original: 0.957 bench-memcpy-random geometric_mean(N=50) New / Original: 0.912 bench-memcpy-large geometric_mean(N=50) New / Original: 0.892 Benchmarks where run on Zhaoxin KX-6840@2000MHz 完整的在 Zhaoxin KX-6840@2000MHz 上运行的基准测试结果可见附件。 更重要的是,此举在 memmove 中节省了 7246 个字节的代码大小,通过将 memmove 代码重新用于 memcpy 又节省了10741个字节(总共节省了 17987 个字节)。还有一个额外的 896 字节的 jump table entries 的rodata。
Glibc 2.36 版本正在逐步淘汰相关的 SSSE3 代码路径。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2021-04-23 Ubuntu 20.04中创建本地APT软件包仓库