GlibcはさまざまなSSSE3最適化コードパスを削除します

最新の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の削除が含まれます。コードパス。

イントロダクションによると、Supplemental Streaming SIMD Extensions 3(SSSE3)は、SSEのイテレーションとして考案された10年以上前のIntel Xeon 5100 / Core2日またはAMDBobcat/Bulldozerにまでさかのぼることができます 。ただし、GlibcはSSSE3とほぼ同時に古いSSE2またはSSE4.1用に最適化されたコードパスと、新しいIntel / AMD CPU用のAVX2およびEVEXコードパスも備えているため、SSSE3コードパスは段階的に廃止されています。

SSE2 / SSE4.1 / AVX2 / EVEXコードパスが存在することを考えると、Glibc開発者は、SSSE3に最適化されたコードパスを提供する価値がなくなったと考えています。SSSE3パスを離れて提供するIntel /AMDCPUはすでにほとんどないためです。コード内のSSSE3サポートのコストは低くありません。先週から、開発者はそれを削除する作業を開始しました。

memmove / mempcpy/memcpy周辺のSSSE3コードも削減されました。コミット内容の説明:

SSE4、AVX2、およびEVEXが一般的に望ましいため、目標はほとんどのSSSE3機能を削除することです。memcpy / memmoveは例外です。一部のターゲットでは、`palignr`による符号なしのロードを回避することが重要です。

このコミットは、memmove-ssse3をより最適化された安価なバージョンに置き換え、memcpyをmemmoveにエイリアスします。

それ以外のすべてのSSSE3関数は、安全に削除できるはずです。大きな後退や増加がなく、全体的な改善が見られたにもかかわらず、パフォーマンスはそれほど変化していません。

ベンチ-memcpygeometric_mean(N = 50)新規/オリジナル:0.957

ベンチ-memcpy-ランダムgeometric_mean(N = 50)新規/オリジナル:0.912

ベンチ-memcpy-ラージgeometric_mean(N = 50)新規/オリジナル:0.892

実行されるベンチマークZhaoxin  KX-6840 @ 2000MHz

Zhaoxin KX-6840 @ 2000MHzで実行された完全なベンチマーク結果は、添付ファイルにあります。

さらに重要なことに、この移動により、memmoveで7246バイトのコードサイズが節約され、memcpyのmemmoveコードを再利用することでさらに10741バイトが節約されます(合計17987バイト)。ジャンプテーブルエントリ用に追加の896バイトのrodataがあります。

Glibc 2.36リリースでは、関連するSSSE3コードパスが段階的に廃止されています。 

おすすめ

転載: www.oschina.net/news/191709/glibc-dropping-ssse3-paths