BlogKLabは、多くのスマートフォン向けゲームを開発・提供しています。スマートフォン向けゲームの開発と運用は、Webソーシャルゲームと比べて格段に複雑で、またコンシューマゲーム開発とも異なったノウハウが求められる領域もあります。このブログでは、KLabのゲーム開発・運用の中で培われた様々な技術や挑戦とそのノウハウについて、広く紹介していきます。2015/07/27JavaScriptからSIMDが使える!?SIMD.jsの紹介やまだです。SIMD.jsについてゆるく話をします。Data)とは何かから簡単にお話しします。SIMDは命令1つで複数のデータの演算を一括して行う計算方式です。同じような演算を大量に実行しなければならない場合に威力を発揮します。SIMDを使うためにはCPUによって異なる命令を実行する必要があります。ARM系CPUならNEONというように使い分けないといけません。ブラウザとSIMD今まではこれらはJavaScriptからは使うことができませんでした。ブラウザのパフォーマンスを求め続けた結果ある実装が生まれました。5に変換もできるという優れた処理系でした。この野心的なプロジェクトは1年以上前にSIMDに対応していました。記事によると3D分野でしばしば用いられる4x4行列の乗算で300%のパフォーマンスを発揮したようです。この実装はJavaScriptにも取り入れられようとしています。2015が承認されたことは記憶に新しいと思います。2015ではアロー演算子やデストラクチャリングなど様々な拡張が行われました。7に向けて仕様の策定が進められています。その中の一つに今回紹介するSIMD.jsがあります。2、つまりDraft段階にあり主要な機能の定義が進められています。仕様として安定はしていないのですが、様々なプラットフォームでSIMD.jsを試すことができます。SIMD.jsを実際に動かしてみる今回はChromiumでSIMD.jsのパワーを体感してみましょう。こちらから手に入ります。実行時に--js-flags=--simd-objectをコマンドライン引数として与える必要があります。このChromiumを使用してSIMDのパフォーマンスを体感できるコードを書いてみましょう。合計値を計算するsum関数を実装してみます。sum1は配列を1つずつ加算して行くのに対し、sum2は4つ同時にまとめて加算しています。620ops/s結果はご覧のとおり、2倍以上のスピードが出ています。ただの加算ですがここまで違いが出てしまいます。いった大量のデータ処理はSIMDの得意分野です。WebGLではベクトル演算の需要が大いにあります。威力を発揮することでしょう。JavaScriptによるSIMDチューニングができる時代がすぐそこまできています。OSやデバイスを意識せずに手軽に使うことができます。