上个月,GNU C 库(glibc)的 Git 代码合并了一个新的可调整项,用于 memset 的非时态存储。这项针对 glibc 的 memset 性能的优化仅限于英特尔处理器,因为当时只在英特尔处理器上进行了测试/基准测试,但现在证明它对 AMD 处理器也很有用。
英特尔工具链工程师诺亚-戈尔茨坦(Noah Goldstein)上个月推出了 “glibc.cpu.x86_memset_non_temporal_threshold “可调整项,用于设置 memset 中非时态存储的阈值。x86_memset_non_temporal_threshold 文档解释说:
“glibc.cpu.x86_memset_non_temporal_threshold调谐器允许用户以字节为单位设置 memset 中非时态存储的阈值。非时态存储提示硬件将数据直接移动到内存中,而不会取代缓存中的其他数据。某些平台使用此可调参数来决定何时使用非时间存储 memset”。
这种 memset 非时态可调功能被人为地限制在英特尔处理器上,因为在英特尔处理器上进行的测试发现,这种可调功能具有性能优势。毕竟,是英特尔工程师主导了这一变革。
本周一,Glibc Git合并了这一功能,并将其扩展到了AMD处理器上。Fastly的乔-达马托(Joe Damato)进行了测试,发现这对AMD处理器有利。在对 Zen 2、Zen 3 和 Zen 4 硬件进行的测试中,基准测试表明非时态 memset 对 AMD 处理器有利。有兴趣的用户可以通过这个 Google 文档电子表格找到各种 AMD Zen CPU 的数据以及英特尔的数据。
现在,Glibc 中的这一提交允许在 AMD 平台上使用这一可调功能。
转自 Intel’s Glibc Non-Temporal Stores Memset Optimization Extended To AMD CPUs – Phoronix