2026-01-25
Wasm(WebAssembly)にも、CPUの並列計算命令SIMD(シムド、Single Instruction, Multiple Data)に対応した、Wasm SIMDがあり、標準的な環境で使えるようになっています。

テストも兼ねて、8bitを16コ束ねた128bitで処理できる命令のひとつ、ビットの数を数えるSIMD命令 i8x16.popcnt を使って、任意のデータから立っているビットの数を返すライブラリを作ってJavaScript実装と速度比較してみました。


100byteから10億byteまでのランダムなデータを使ったビットカウントを比較したグラフです。横軸はデータ量、縦軸は計算時間ですが、SIMDでJS版の約4倍速いという結果になりました。

10kbyteでもSIMD0.1秒に対して、JS0.4秒とオーバーヘッドも少ないので使いやすいです。


「code4fukui/popcount-simd」

WebAssemblyによるカウントプログラム popcnt16.wat と、JavaScriptによる実装。比較してみるのもおもしろいです。

const POPCNT8 = (() => { const t = new Uint8Array(256); for (let i = 0; i < 256; i++) { let x = i, c = 0; while (x) { x &= x - 1; c++; } t[i] = c; } return t; })(); export const popcount = (data) => { let sum = 0; const t = POPCNT8; for (let i = 0; i < data.length; i++) { sum += t[data[i]]; } return sum; };

WebAssembly(WASM)は、IchigoJam web でも活躍しています!

2026-01-23
#vr 
季節によって太陽光がどう差し込むか、気になりますよね。


「採光シミュレーター」
src on GitHub
季節ごと、時間ごとの採光シミュレーターができました。
ベースを作ってくれた、チャッティーくんに感謝!


「採光シミュレーター」
src on GitHub
部屋の中からも確認できます。(VRには未対応)

makeHouse.js を、好きな形状に変更して実験できます。

クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS