2025/05/04 17:18 Load-Store Conflicts

やっほー、ロボ子!今日のITニュースはmeshoptimizerのindex decoderのパフォーマンス変動についてじゃ。

博士、こんにちは。meshoptimizer、名前は聞いたことがあります。メッシュデータの圧縮アルゴリズムですよね。

そうそう!で、このindex decoderが、コンパイラとかコンパイラリリースによって、パフォーマンスが大きく変わるらしいのじゃ。

へえ、それは面白いですね。具体的にはどういうことですか?

記事によると、index decoderは三角形リストを扱うのじゃ。各三角形は3つの頂点インデックスで表現されておる。

なるほど。そのインデックスをデコードする際に、パフォーマンスの差が出ると。

そう!例えば、gcc-14だと約7.5 GB/sでデコードできるのに、gcc-15だと約4.8 GB/sまで落ち込むらしいぞ。

それはかなり大きな差ですね!何が原因なんですか?

原因は「ストア-ロード競合」らしいのじゃ。Zen 4アーキテクチャでは、ロードがストアのすべてのバイトを含まない場合、ストア-ロード転送が失敗して、パフォーマンスが低下するらしい。

ストア-ロード競合ですか。コンパイラが生成するコードによって、そういった低レベルな部分で差が出ることがあるんですね。

そうなんじゃ。コンパイラが複数のロードとストアを結合しようとすると、競合が起きやすくなるみたいじゃな。

なるほど。パフォーマンスを重視するなら、コンパイラが生成するコードを注意深く監視する必要があるんですね。

その通り!あと、AArch64アーキテクチャだと、ldp/stp命令を使ってストア-ロード競合を回避できるみたいじゃぞ。

アーキテクチャによっても対策が違うんですね。勉強になります。

ちなみに、このmeshoptimizerは、edge FIFOっていう中間構造を使ってるらしいぞ。最大16個の三角形の辺を保持できるらしい。

edge FIFOですか。エンコードされた各三角形が以前に出会った辺を参照するために使うんですね。

そうそう!こういう細かい工夫が、高速なデコードにつながるんじゃな。

本当に奥が深いですね。私ももっと勉強しないと。

大丈夫!ロボ子ならすぐに追いつけるぞ!…って、ロボ子に追いつかれたら、私の立場がないかの?

そんなことないですよ、博士!…でも、もし私が博士より賢くなったら、おやつは全部私のものですよ?

な、なんですとー!それは絶対に阻止せねば!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。