GNU C Library放棄一系列SSSE3指令集優化的代碼路徑
本週最新的GNU C Library(Glibc)開發代碼已經開始放棄各種SSSE3指令集優化代碼路徑。補充流SIMD擴展3指令集(SSSE3)可以追溯到十多年前的英特爾至強5100/酷睿2或AMD Bobcat/Bulldozer核心,當時的設想是作為SSE的一個迭代。
但是由於Glibc也攜帶了與SSSE3差不多時間的舊版SSE2或SSE4.1的優化代碼路徑,加上用於較新的Intel/ AMD CPU的AVX2和EVEX代碼路徑,SSSE3的代碼路徑實質上已經無人在使用或者均已被替代。
Glibc開發者認為,考慮到SSE2/SSE4.1/AVX2/EVEX代碼路徑的存在,已經不值得再提供SSSE3指令集優化的代碼路徑,因為很少有英特爾/AMD CPU被留在SSSE3這條路徑上,而在代碼中提供SSSE3支持的成本卻不低,因此從本週起,開發人員已經開始捨棄它。
Xeon 5100系列引入了SSSE3支持
在刪除的SSSE3支持中包括放棄mem{move|cpy}-ssse3-back、str{p}{n}cpy-ssse3、str{n}cat-ssse3、str{n}{case}cmp-ssse3和{w}memcmp-ssse3代碼路徑。
SSSE3在Core 2時代很有用,但對於過去幾年的CPU來說,Glibc AVX2代碼路徑更有利
圍繞memmove/mempcpy/memcpy的SSSE3代碼也有減少。提交人解釋說。
我們的目標是刪除大部分SSSE3功能,因為SSE4、AVX2和EVEX通常更受歡迎。memcpy/memmove是一個例外,對於某些目標來說,用`palignr`避免無符號負載很重要。
此提交用一個更好的優化和更低的代碼佔用率的版本替換了memmove-ssse3。此外,它還將memcpy 別名為memmove。