Skip to content

SIMD を腑に落とす ​

unworklet (TS DSL → WASM compile して Audio Worklet 上で動かす DSP framework) や unaudio (Chromium をパッチして DAW 上の VST にする WIP プロダクト) を作る上で、SIMD を「入れる/入れない/どう入れるか」の設計判断ができる程度の直観を作るためのサイト。

BLAS を手書きできる筋肉を作るのが目的じゃなくて、「ここで SIMD 効くな」「ここは効かないな」が後で読み返した時に再現できる頭の地図を残すのがゴール。

このサイトの読み方 ​

Part 0 → Part 5 まで一直線で読む構成。Browse 用ではなくて、章ごとに前章の語彙を前提にしている。

Part中身
0このサイトについて
1SIMD という CPU の仕組み — lane / vector register / 各 ISA
2システム言語での SIMD — C/C++ intrinsics, Rust std::simd, autovectorization
3JavaScript / ブラウザの世界 — SIMD.js の死、V8 autovec、WASM SIMD、4 実装比較
4Audio DSP の事情 — なぜ DSP で SIMD が必須扱いか
5Bridge: unworklet / unaudio — このサイトの存在理由

読み始める前に答える 10 個の素朴な疑問 ​

このサイトは以下の 10 問に正面から答えるように章立てされている。

  1. SIMD ってそもそもなに?
  2. C/C++ や Rust では SIMD ってどう書くの?
  3. なぜ Audio DSP では SIMD が「ほぼ必須」と語られるの?
  4. JS 自体に SIMD ってないの? 昔 SIMD.js みたいの聞いた気がする
  5. V8 等の JS エンジンは内部で勝手にベクトル化してくれる?
  6. 「Math.hypot を for で回す」のと「Float32Array に WASM SIMD」って結局なにが違うの?
  7. ブラウザの JIT は SIMD を自動で当ててくる?
  8. WASM SIMD と CPU の SSE/AVX/NEON はどう対応してる?
  9. unworklet (TS DSL → WASM compile) で SIMD をどう扱える?
  10. unaudio (Chromium-as-VST native) で追加で気をつけることある?

Style Guide ​

書き手 (人間 or AI) はまず STYLE_GUIDE を読む。