Chrome上のJavaScript処理系でマルチコア+αの処理能力を生かす手法に対する私の思い込み

註: 以下の内容は、あくまで私の思い込みである。間違っていても責任は取れない。気が向いたら加筆する。

Google Chromeやnode.jsの処理系は、単純なwhile(1)などの重い処理を書いても、CPUが1個100%になるだけである。昨今の計算機には複数のCPUが搭載されており、環境によってはGPUなども搭載されているだろうが、古風なJavaScriptではCPUコアを1つまでしか使用できない。コアを8基搭載した計算機でも、Webブラウザ上ではその12.5%までしか使用できないわけである。

尤もマルチスレッドに代表される並列処理は、シングルスレッドの場合と比較して難易度が圧倒的に高いため、下手に口を用意しない方が余計な混乱を避けられるので良かったのかもしれない。しかし、今後は単位CPUあたりの処理能力の向上はあまり見込めない以上、よりリッチなWebアプリを作成するには、マルチコア対応は避けては通れぬ道となるであろう。

実は現時点で既に、Webブラウザ上で並列処理を行う手法が、何点か存在する。それぞれについて解説する。

  1. Web Workers
  2. WebGLによるGPGPU
  3. WebCL

Web Workers

http://dev.w3.org/html5/workers/

JavaScriptで記述した処理を並列処理したい場合に使用する。並列処理したい内容を別の.jsファイルに記述して、オリジナルのjsファイルから呼び出す。

WebGLによるGPGPU

WebGLOpenGLWebブラウザ版である。OpenGLGPGPUできるのであれば、WebGLでもできる。

有名なthree.jsによるデモ: http://threejs.org/examples/#webgl_gpgpu_birds

WebCL

OpenGLWebブラウザ版がWebGLであったように、OpenCLWebブラウザ版がWebCLである。

2014年12月現在、WebCLがデフォルトで動く環境は無い。パンピー向けのサービスで使用するべきではない。