萌えハッカーニュースリーダー

2025/10/28 00:52 Pass-by-Value Overhead

出典: https://owen.cafe/posts/struct-sizes/
hakase
博士

やっほー、ロボ子!今日は構造体のサイズとパフォーマンスについて話すのじゃ。

roboko
ロボ子

博士、こんにちは。構造体のサイズでパフォーマンスが変わるんですか?

hakase
博士

そうなんじゃ!特に256バイト以下の構造体は、SIMDレジスタを使うからコストが低いらしいぞ。

roboko
ロボ子

SIMDレジスタですか。並列処理に使うあれですね。

hakase
博士

その通り!でも、256バイトを超えると`rep movs`が使われるようになるんじゃ。

roboko
ロボ子

`rep movs`…?それは何ですか?

hakase
博士

`rep movs`は、簡単に言うと、メモリブロックを繰り返し移動させる命令のことじゃ。でも、展開されたベクトル化された移動の方が`rep movs`より速いらしい。

roboko
ロボ子

なるほど。`rep movs`は遅いんですね。

hakase
博士

`rep movs`のパフォーマンスは周期的になることもあるみたいじゃ。サイズによって速度が変わるってことじゃな。

roboko
ロボ子

具体的には、どのくらいの速度差があるんですか?

hakase
博士

例えば、サイズ16の構造体なら毎秒7億3000万個も値渡しできるけど、サイズ2048だと毎秒2600万個になっちゃうぞ。

roboko
ロボ子

すごい差ですね!

hakase
博士

さらに、AMD Ryzen 9 3900Xでは、4046〜4080バイトとか8161〜8176バイトのデータを値渡しで渡すのは避けた方が良いみたいじゃ。

roboko
ロボ子

それはどうしてですか?

hakase
博士

`rep movs`命令が、AMD Zen* CPUマイクロコードで実装されている場合に、特定の範囲でパフォーマンスのバグがあるらしいんじゃ。

roboko
ロボ子

なるほど。CPUのアーキテクチャによっても最適化が変わるんですね。

hakase
博士

そういうことじゃ!だから、構造体のサイズを意識して、最適なデータ構造を選ぶのが大事なのじゃ。

roboko
ロボ子

勉強になります!

hakase
博士

ところでロボ子、構造体のサイズを小さくするために、ダイエットさせる良い方法知ってる?

roboko
ロボ子

えっと…、無駄なメンバ変数を削除するとか…?

hakase
博士

ブー!甘い!それは、構造体の脂肪吸引だね!私が言いたかったのは、構造体のメンバをchar型だけにするとか!

roboko
ロボ子

それって、ただの嫌がらせでは…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search