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 代码路径。 


相關推薦

2022-10-22

素而异。 与此同时,今天在 Glibc git 中,Noah Goldstein 对各种 libc 函数的现有 EVEX 实现进行了许多优化。  

2023-02-02

现在支持--no-addrconfig选项。 动态链接器不再从库搜索路径上的“tls”子目录或与 AT_PLATFORM 系统名称对应的子目录加载共享对象。 CVE-2022-39046 的安全修复,当向 syslog 函数传递一个长度超过 1024 字节的特制输入字符串时,

2022-07-20

了 FreeBSD 上的构建失败,修复了使用更新的 Glibc 构建,删除了不推荐使用的项目,并且还放弃了 Qt 4 工具包支持, Qt4 自 2015 年以来一直不受支持,早就应该将其删除。 其他内容还包括 glibc 2.33 的编译修复、使用 Python 3 进行测

2022-07-10

取,导致命令替换中损坏的多字节字符 composer 修复代码注入问题 [CVE-2022-24828];更新 GitHub 令牌模式 freetype 修复缓冲区溢出问题 [CVE-2022-27404];修复崩溃 [CVE-2022-27405 CVE-2022-27406] gnutls28 修复 SSSE3 SHA384 计算错误

2023-09-18

复:修复了文件名中含有二级路径时,部分图床无法远程删除图片的问题 修复:修复了从二维码导入时,路径设置为根目录时导入错误的问题 维护:重构了大部分代码以提高性能和可维护性 特色功能 支持直接管理云存

2024-02-02

stdbit.h header 已从 ISO C2X 添加。 Libcrypt 已从 GNU C 库中删除。用户应改用 libxcrypt。 IA-64 Linux 配置不再受支持,因为 Itanium 支持已从 Linux 内核中删除。 各种安全修复,包括本地权限升级问题;以及许多错误修复。

2022-10-19

c Exceptions/Errors 更新内置 Web 服务器的 MIME 类型表 减少各种函数返回的字符串的内存占用 新的 Random 扩展 为 Linux 启用 arc4random_buf 与 Glibc 2.36+ 随机字节 初步支持 ARM64 的 Windows 上的交叉构建 将 JIT 缓冲区 Opcache 分

2022-08-04

Glibc 是提供系统调用和基本函数的标准 C 语言库,目前 2.36 版本已经发布,主要内容如下: 添加了对 DT_RELR 相对重定位格式的支持,一个新的 ELF 动态标签。 在 Linux 上添加 pidfd_open、pidfd_getfd 和 pidfd_send_signal 函数。pidfd 功

2023-08-24

add_vectorexts 接口 add_vectorexts 接口主要用于添加扩展指令优化选项,目前支持以下几种扩展指令集: add_vectorexts("mmx") add_vectorexts("neon") add_vectorexts("avx", "avx2", "avx512") add_vectorexts("sse", "sse2", "sse3", "ssse3", "sse4.2") 其中,avx512,

2023-08-24

功能,还增添了许多新的feature。例如相册支持同步云端删除文件,内置图床额外添加了WebDav、本地图床和SFTP等。PicList同时增加了完整的云存储管理功能,包括云端目录查看、文件搜索、批量上传下载和删除文件,复制多种格式

2022-12-21

well CPU 的 glibc 回归修复 Linux 5.10 内核构建的更新 由于各种安全漏洞而发布的新 NVIDIA 驱动程序版本 PostgreSQL 13 和 Postfix 的新上游稳定版本 各种其他修复 可以在 Debian.org 找到 Debian 11.6 软件包更新的完整列表。至于 Debian 1

2023-02-19

动重建数据库并重新迁移数据,不再需要手动去数据目录删除数据库 优化 微调了桌面歌词逐行字体阴影,使其看起来更匀称 调整了桌面歌词在启用滚动到顶部时的距离,现在滚动到顶部的歌词更靠边,不再受字体大小、

2023-09-04

,它的依赖性要求更低。 弃用通知:未来版本的 BLFS 将删除未维护的 LXDE 桌面环境和对 Reiser 文件系统(reiserfsprogs)的支持。 相关链接: http://www.linuxfromscratch.org/lfs/view/12.0/ http://www.linuxfromscratch.org/blfs/view/12.0/ http://www.l

2022-09-28

CRUX 是一个轻量级的、针对 x86-64 优化的 Linux 发行版,主要面向有经验的 Linux 用户,它不基于任何其他 Linux 发行版。 距离上一个版本时隔近两年后,CRUX 3.7 正是发布,更新内容如下: 工具链更新 包括 glibc 2.36、gcc 12.2.0 和