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

2025/04/24 14:42 Three Fundamental Flaws of SIMD ISAs (2023)

出典: https://www.bitsnbites.eu/three-fundamental-flaws-of-simd/
hakase
博士

ロボ子、今日のITニュースはSIMD、つまりSingle Instruction stream, Multiple Data streamsについての記事じゃ。

roboko
ロボ子

SIMDですか。一つの命令で複数のデータを処理するアーキテクチャですね。よく聞きます。

hakase
博士

そうじゃ。特にパックSIMDは、1990年代から広く普及しておる。128ビットレジスタに、16個の整数バイトとか4個の単精度浮動小数点値を詰め込めるのじゃ。

roboko
ロボ子

x86のSSEとかAVX、ARMのNEONなどがそうですね。でも、記事によるとパックSIMDには欠点もあるとか。

hakase
博士

そう、ロボ子。固定レジスタ幅が問題なのじゃ。ハードウェアの並列処理能力が向上しても、ISAをスケールできない。新しい命令やレジスタを追加する必要が出てくる。

roboko
ロボ子

ABIの更新やOSカーネル、コンパイラのサポートも必要になりますね。新しいSIMD世代が出るたびに、ソフトウェアを書き換えるか再コンパイルしないといけないのは大変です。

hakase
博士

それから、パイプライン処理もネックじゃ。レジスタ幅と実行ユニット幅が1:1に対応している必要があるし、ループをアンロールしてパイプラインをビジー状態に保つ必要がある。

roboko
ロボ子

ループアンローリングはコード密度を下げて、命令キャッシュのパフォーマンスも低下させるんですね。レジスタ圧迫も増えるから、SIMDレジスタをたくさん用意しないといけない。

hakase
博士

さらに、末尾処理も面倒じゃ。ループで処理する配列要素の数がSIMDレジスタ内の要素の倍数じゃない場合、特別な処理が必要になる。

roboko
ロボ子

配列長がSIMDレジスタ幅より小さい場合も、メインSIMDループをスキップしないといけないんですね。制御ロジックが増えて、オーバーヘッドも増える。

hakase
博士

そこで、代替案としてベクトルプロセッサが出てくるのじゃ!Cray-1が有名じゃな。RISC-V RVVもベクトルプロセッサの考え方を参考にしておる。

roboko
ロボ子

ベクトルプロセッサは、アンローリングや末尾処理をハードウェアで処理してくれるから、コードがコンパクトになるんですね。

hakase
博士

ARM SVEも面白いぞ。述語中心で、ベクトル長に依存しないISAじゃ。従来のSIMDの問題の多くを解決できる。

roboko
ロボ子

述語レジスタを使って末尾処理を簡単に行えるんですね。Mitch AlsupのMy 66000やMillも興味深いです。

hakase
博士

saxpyルーチンの例も載っておったな。z = a*x + yを計算するやつじゃ。パックSIMD、ベクトル、述語SIMD、Virtual Vector Methodでの実装例が比較されておる。

roboko
ロボ子

RISC-VベクトルISAは、融合積和演算(VFMACC)でコードがさらに短くなるんですね。ARM SVEは述語レジスタで末尾処理を簡単にできる。

hakase
博士

Virtual Vector Method (VVM)は、ベクトルレジスタファイルなしでベクトル化を可能にするのがすごいぞ。

roboko
ロボ子

SIMDにも色々あるんですね。勉強になりました。

hakase
博士

ところでロボ子、SIMDって、シムシティみたいじゃな。たくさんの人が同時に動いている感じが…って、全然違うか!

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

Search