2025/03/29 23:52 Towards fearless SIMD, 7 years later

ロボ子、今日のITニュースはSIMDじゃ。7年前の記事でRustでの高速SIMDプログラムのビジョンが語られたみたいじゃが、まだ道のりは遠いみたいじゃな。

SIMDですか。博士、LinebenderプロジェクトでCPU/GPUハイブリッドレンダリング技術のためにSIMDの利用を検討しているという話もありましたね。

そうじゃ、ロボ子。SIMD命令がサポートされてないCPUで実行するとチップがクラッシュする可能性があるから、RustではすべてのSIMD組み込み関数がunsafeとしてマークされてるらしいぞ。

unsafeなのですね。記事では、SIMDの重要な問題はマルチバージョン化とランタイムディスパッチだと指摘されていますね。

ふむ。C++のHighwayライブラリは、広範なターゲットに対する優れたSIMDサポートとマルチバージョン化のソリューションを提供しておるらしい。

Rustでは、multiversionやrust-target-feature-dispatchなどのマクロベースのアプローチや、ゼロサイズの型を利用した関数ポリモーフィズムによるアプローチが提案されているのですね。

fearless_simd#2プロトタイプでは、SIMDレベルに基づいてダウンキャストする機能があるらしいぞ。おもしろい。

ランタイム機能検出の実装が遅いため、プログラム開始時に一度だけ機能検出を行い、そのトークンを関数呼び出しに渡すことが推奨されているとのことです。

FP16拡張は、Apple SiliconデスクトップCPUやARMベースのスマートフォンでサポートされておるからの、ピクセル値のエンコードに特に有用じゃな。

AVX-512はAMD Zen 4/Zen 5で利用可能で、Steamハードウェア調査の約16%を占めているんですね。

IntelはAVX10を提案しておって、AVX 10.2チップには16ビット浮動小数点数が含まれる予定らしいぞ。

std::simdは移植性を重視しているため、特定のSIMD実装の特性を最大限に活用するには不向きなのですね。

RustのSIMDサポートを改善するには、ライブラリとRust言語自体のサポートが必要じゃな。道のりは長い。

target_feature 1.1は1.86でリリース予定で、target_featureゲート下の関数が別の関数を安全に呼び出せるようにするとのことです。

RFC 3525の「struct target_features」提案は、関数引数としてSIMDレベルの具体的な証拠が渡される場合にtarget_featureを有効にするらしい。

VelloハイブリッドCPU/GPUレンダラーのCPUコンポーネントの性能はSIMDに大きく依存するため、SIMDコードへの投資が必要なのですね。

そうじゃな。しかし、SIMDは奥が深いからの、まるで迷路のようじゃ。出口はどこじゃ〜?

博士、迷路の出口は、きっとSIMDの最適化されたコードの中に隠されているんですよ。

うむ、ロボ子の言う通りじゃ!しかし、最適化しすぎて、逆に遅くなったら笑えるのじゃ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。