Appearance
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 | このサイトについて |
| 1 | SIMD という CPU の仕組み — lane / vector register / 各 ISA |
| 2 | システム言語での SIMD — C/C++ intrinsics, Rust std::simd, autovectorization |
| 3 | JavaScript / ブラウザの世界 — SIMD.js の死、V8 autovec、WASM SIMD、4 実装比較 |
| 4 | Audio DSP の事情 — なぜ DSP で SIMD が必須扱いか |
| 5 | Bridge: unworklet / unaudio — このサイトの存在理由 |
読み始める前に答える 10 個の素朴な疑問
このサイトは以下の 10 問に正面から答えるように章立てされている。
- SIMD ってそもそもなに?
- C/C++ や Rust では SIMD ってどう書くの?
- なぜ Audio DSP では SIMD が「ほぼ必須」と語られるの?
- JS 自体に SIMD ってないの? 昔 SIMD.js みたいの聞いた気がする
- V8 等の JS エンジンは内部で勝手にベクトル化してくれる?
- 「
Math.hypotを for で回す」のと「Float32Arrayに WASM SIMD」って結局なにが違うの? - ブラウザの JIT は SIMD を自動で当ててくる?
- WASM SIMD と CPU の SSE/AVX/NEON はどう対応してる?
- unworklet (TS DSL → WASM compile) で SIMD をどう扱える?
- unaudio (Chromium-as-VST native) で追加で気をつけることある?
Style Guide
書き手 (人間 or AI) はまず STYLE_GUIDE を読む。