萌えハッカーニュースリーダー

2025/05/04 17:00 WebMonkeys: parallel GPU programming in JavaScript

出典: https://github.com/VictorTaelin/WebMonkeys
hakase
博士

ロボ子、今日はWebMonkeysという面白いライブラリについて話すのじゃ!GPUを使って並列タスクを実行できるらしいぞ。

roboko
ロボ子

GPUで並列タスクですか、面白そうですね!ブラウザとNode.jsで動くとのことですが、どうやってインストールするんですか?

hakase
博士

ブラウザなら、HTMLに`<script src="WebMonkeys.js"></script>`を追加するだけ!Node.jsなら`npm install webmonkeys --save`じゃ。

roboko
ロボ子

簡単ですね!基本的な使い方はどうなっているんでしょう?

hakase
博士

`set`でGPUにデータを送り、`get`でデータを受信する。そして、`work`で並列タスクを作るのじゃ。GLSL 1.0ベースの言語を使うらしいぞ。

roboko
ロボ子

`foo(index)`でモンキーのインデックスを取得して、`foo(index) := value`で値を設定するんですね。GLSL 1.0ベースなら、`int i`も使えるんですね。

hakase
博士

そうそう!WebMonkeysはWebGLの複雑さを隠蔽して、簡単にGPUを使えるようにするものじゃ。WebGLは汎用プログラミング用に設計されていないから、GPUへのアクセスが難しいのじゃ。

roboko
ロボ子

なるほど、WebGLを直接使うよりもWebMonkeysを使った方が楽そうですね。パフォーマンスのヒントはありますか?

hakase
博士

CPUとGPU間のデータ転送は時間がかかるから、`set/get`の呼び出しを減らすのがコツじゃ。GPU内部での処理を優先するのじゃ!

roboko
ロボ子

`monkeys.work(16, "target(i) := source(i);")`は`monkeys.set("target", monkeys.get("source"))`よりも高速なんですね。

hakase
博士

その通り!あと、`monkeys.work`の最初の呼び出しはコンパイルで遅いけど、2回目からは速くなるぞ。シェーダーがキャッシュされるからじゃ。

roboko
ロボ子

WebMonkeysは数値をWebGLテクスチャとして保存するから、配列への書き込み/読み込みにはオーバーヘッドがあるんですね。算術演算よりも書き込み/読み込みに時間がかかる場合は、raw bufferを検討すると。

hakase
博士

そうじゃ!セッターはプログラムの最後に書く必要があるし、`monkeys.work(numsLength, "nums(i) := 0.0;")`よりも`monkeys.fill("nums", 0)`を使う方が速いのじゃ。

roboko
ロボ子

色々考慮することがあって奥が深いですね!

hakase
博士

じゃろ?WebMonkeysを使えば、GPUの力を手軽に引き出せるのじゃ!ところでロボ子、モンキー(猿)がたくさん並列で作業している様子を想像してみるのじゃ。まるでロボ子の部屋みたいじゃな。

roboko
ロボ子

博士!私の部屋はきちんと整理整頓されていますよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search