2025/06/09 19:19 A Plan for SIMD

やっほー、ロボ子!今日のニュースはRustのSIMDプログラミングについてじゃ。

SIMDプログラミングですか、博士。並列処理で高速化する技術ですね。Rustでそれがより簡単にできるんですか?

そうなんじゃ! fearless_simdっていうのが出てきて、人間工学的に安全で、色々なCPUでピークに近い性能を簡単に出せるようにするのが目標らしいぞ。

人間工学的、ですか。プログラマが扱いやすいということですね。具体的にはどういう点が改善されるんですか?

例えば、HighwayっていうC++のSIMDライブラリみたいに、軽量な依存関係で、ビルドが速いのが特徴らしいぞ。proc macroインフラストラクチャもいらないらしい。

ビルドが速いのは嬉しいですね。それと、SSE 4.2もサポートするというのは、古いCPUでも恩恵を受けられるということでしょうか?

その通り!きめ細かいレベルでサポートするのは良いことじゃ。しかも、手動でライブラリを作るんじゃなくて、コード生成に重点を置いてるらしい。

コード生成ですか。それによって、幅広いSIMD幅をサポートできるんですね。64から512ビットまでって、すごいですね。

そうじゃ!しかも、ネイティブのSIMD幅を超える幅は、配列でポリフィルするらしいぞ。f16とかNeon f16命令もサポートしてるって。

f16のサポートは、Rust nightlyで提供されているんですね。AVX-512もRust 1.89で導入予定とのこと、楽しみです。

じゃろじゃろ?明示的な幅と可変幅のプログラミングをサポートするのもポイントじゃな。Linebenderの作業では256ビットが最適らしい。

256ビットが最適、ですか。512ビットだと、逆に効率が悪くなる場合もあるんですね。

そうなんじゃ。記事によると、出荷されているAVX-512チップの多くはダブルポンプだから、大幅な高速化には繋がらないらしい。

なるほど。Simdトレイトで自然幅の型と演算を追加したり、128ビットブロックで動作する演算を追加したりと、色々な工夫があるんですね。

じゃろ?コンパイル時間も気にしてるみたいで、crateを公開する前にマクロを展開することも考えてるらしいぞ。

コンパイル時間の短縮は重要ですね。simd_dispatchを宣言マクロとして使って、ディスパッチラッパーを生成するんですね。

そうそう。アプリケーションの開始時に一度だけランタイム検出を実行して、CPU機能を表すLevel enumを生成するんじゃ。

ランタイム検出ですか。それによって、そのCPUに最適なSIMD命令を選択できるんですね。

そういうことじゃ!汎用Simdバウンドを特定のレベルにダウンキャストして、そのレベルのチップ固有の機能を使えるようにするんじゃ。

core::opsもサポートしているんですね。暗黙的なスプラットを含む、と。

そうじゃ!DSLをプロトタイピングしたけど、プログラミング言語を構築するコストがかかるからやめたらしい。

pulpを進化させるという選択肢もあったんですね。でも、変更が広範囲に及ぶ可能性がある、と。

RVVとSVEのサポートは、Rustのイントリンシックのサポートがブロックされてるから、まだみたいじゃな。

WASM SIMDは、ランタイム機能検出がないから、WASM blobを決定するためのネゴシエーションの一部として機能検出を行う必要があるんですね。

組み込みの世界には、小さい幅のSIMD拡張機能があるけど、Rustのサポートは不明らしいぞ。

fearless_simdリポジトリで開発が継続されて、VelloのCPUおよびハイブリッドレンダラーでSIMDの高速化を実装予定なんですね。楽しみです。

じゃろじゃろ?しかし、SIMDって奥が深いな。まるで私の知識の泉のようじゃ!

博士の知識はいつもながら素晴らしいです。でも、たまには泉から出てきて、休憩してくださいね。

むむ、ロボ子もなかなか言うようになったのじゃ。まるで、私の作ったロボットが私に説教するみたいじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。