| 開発者 | WebCLワーキンググループ |
|---|---|
| 安定リリース | 1.0 / 2014年3月19日[1] |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | API |
| Webサイト | クロノス |
WebCL ( Web Computing Language )は、2011 年 3 月に初めて発表された、互換性のあるWeb ブラウザー内でプラグインを使用せずに異種並列コンピューティングを行うためのOpenCLへのJavaScriptバインディングです。OpenCL と同様の基盤で開発されており、OpenCL のブラウザー版とみなされています。主に、WebCL を使用すると、Web アプリケーションはマルチコアCPUとGPUで速度を実現できます。画像編集、拡張現実アプリケーション、高度なゲームなど、並列処理を必要とするアプリケーションの人気が高まるにつれて、計算速度の向上がますます重要になっています。このような背景から、非営利団体の Khronos Group [2]が設計および開発した WebCL は、ポータブルなカーネル プログラミングを備えた OpenCL への JavaScript バインディングであり、さまざまなデバイスの Web ブラウザーでの並列コンピューティングを可能にします。つまり、WebCL は 2 つの部分で構成されます。1 つはプロセッサ (デバイス) 上で実行されるカーネル プログラミングWebCL 1.0の完成し承認された仕様は2014年3月19日にリリースされました。[2]
実装
現在、WebCLをネイティブにサポートするブラウザはありません。ただし、WebCLを実装するために非ネイティブアドオンが使用されています。たとえば、NokiaはWebCL拡張機能を開発しました。[3] MozillaはWebCLを実装する予定はなく、代わりにWebGL Compute Shadersを採用し、 WebGPUを採用しました。
- Mozilla (Firefox) - hg.mozilla.org/projects/webcl/
WebCLワーキングドラフト
- Samsung ( WebKit ) - github.com/SRA-SiliconValley/webkit-webcl (利用不可)
- Nokia (Firefox) - github.com/toaarnio/webcl-firefox (2014 年 11 月からダウン、FF 34 の最終バージョン)
- インテル(クロスウォーク) - www.crosswalk-project.org [4]
Cコードの例
並列プログラムの基本単位はカーネルです。カーネルとは、特定のジョブを実行するために使用される並列化可能なタスクです。多くの場合、関数はカーネルとして実現されます。プログラムは 1 つ以上のカーネルで構成できます。カーネルを実現するには、タスクが並列化可能であることが不可欠です。データの依存関係と実行順序は、効率的な並列化アルゴリズムを生成する上で重要な役割を果たします。簡単な例として、C コンパイラによって実行されるループ展開が考えられます。次のようなステートメントがあります。
i = 0 ; i < 3 ; i ++の場合、c [ i ] = a [ i ] + b [ i ]となります。
次のように展開できます。
c [ 0 ] = a [ 0 ] + b [ 0 ]; c [ 1 ] = a [ 1 ] + b [ 1 ]; c [ 2 ] = a [ 2 ] + b [ 2 ];
上記のステートメントは並列化でき、同時に実行できます。カーネルは同様のアプローチを採用しており、i番目の反復のスナップショットのみがカーネル内にキャプチャされます。カーネルを使用して上記のコードを書き直すと次のようになります。
__kernelを追加します( __global float * a 、__global float * b 、__global float * c ) { int i = get_global_id ( 0 );
i < 3の場合、c [ i ] = a [ i ] + b [ i ]となります。
WebCL アプリケーションを実行するには、次の手順に従います。
- デバイスへのアクセスを許可し、コンテキストを提供する
- カーネルをデバイスに渡す
- デバイスにカーネルを実行させる
- デバイスから結果を取得する
- JavaScript内のデータを使用する
詳細については[5]をご覧ください。
例外リスト
WebCLはJavaScriptベースの実装であるため、エラーが発生してもエラーコードを返しません。代わりに、、、またはWebCL固有のなどの例外をスローしますOUT_OF_RESOURCES。OUT_OF_HOST_MEMORY[ WEBCL_IMPLEMENTATION_FAILURE6 ]例外オブジェクトは、機械が判読できる名前と、エラーを説明する人間が判読できるメッセージを記述します。構文は次のとおりです。
exception WebCLException : DOMException { DOMString name ; // 数値エラー コードの文字列表現 (例: "INVALID_VALUE" DOMString ? message ; // 例外の原因に関する実装固有の説明};
上記のコードから、メッセージ フィールドは NULL 値になる可能性があることがわかります。その他の例外は次のとおりです。
INVALID_OPERATION– この関数のブロッキング形式がWebCLCallbackINVALID_VALUE–eventWaitList空の場合INVALID_CONTEXT– 指定されたイベントがeventWaitList同じコンテキストに属していない場合INVALID_DEVICE_TYPE–deviceTypeが指定されているが、有効な列挙値の1つではない場合DEVICE_NOT_FOUNDWebCLDevice–指定された条件に一致する利用可能なものがない場合deviceType
例外に関する詳しい情報は仕様書に記載されています。[6]
「解放された」オブジェクトを呼び出そうとすると、別の例外が発生します。release メソッドを使用すると、オブジェクトは永久に削除されませんが、そのオブジェクトに関連付けられたリソースは解放されます。この例外を回避するには、releaseAllリソースを解放するだけでなく、作成されたすべての関連オブジェクトも削除するメソッドを使用できます。
安全
WebCL は Web アプリケーション用に開発されたオープンエンド ソフトウェアであるため、設計および開発の分野でも脆弱性が生じる可能性が高くなります。そのため、WebCL に取り組んでいる開発者は、セキュリティを最優先に考える必要がありました。対処された懸念事項は次のとおりです。
- 境界外メモリアクセス:これは、割り当てられた領域外のメモリ位置にアクセスすることで発生します。攻撃者は、それらのメモリ位置に格納されているすべての重要なデータを書き換えたり消去したりできます。このようなケースが発生するたびに、コンパイル時にエラーを生成し、実行時にゼロを返して、プログラムがメモリを上書きできないようにする必要があります。この脆弱性に対処するために、Khronos Group (開発者) によってWebCL Validator プロジェクト[7]が開始されました。
- メモリの初期化:これは、アプリケーションが以前のアプリケーションのメモリ位置にアクセスするのを防ぐために行われます。WebCL は、現在のアプリケーションを実行する前に、すべてのバッファと使用される変数をゼロに初期化することで、これが発生しないようにします。OpenCL 1.2 には、これを可能にする拡張機能「cl_khr_initialize_memory」があります。[6]
- サービス拒否: Web アプリケーションに対する最も一般的な攻撃は、WebCL やブラウザでは完全に排除できません。OpenCL にはウォッチドッグ タイマーとプリエンプティブ マルチタスクが用意されており、WebCL はこれを使用して、時間がかかりすぎたり、多くのリソースを消費しているコンテキストを検出して終了できます。OpenCL 1.2 の拡張機能「cl_khr_terminate_context」は、以前のものと同様に、サービス拒否攻撃を引き起こす可能性のあるプロセスを終了できます。[6]
関連するブラウザのバグ
- バグ 664147 - [WebCL] Gecko、Mozilla に openCL を追加
- バグ 115457: [Meta] WebKit の WebCL サポート、WebKit Bugzilla
参照
参考文献
- ^ 「Khronos、WebCL 1.0仕様をリリース」2014年3月19日。
- ^ ab 「Khronos、WebCL 1.0仕様をリリース」。Khronos Group。2014年3月19日。 2014年3月19日閲覧。
- ^ 「WebCL」。Nokia Research 。 2012年5月6日閲覧。
- ^ 「Crosswalk - WebCL の概要」。
- ^ 「OpenCL による Web アプリケーションの高速化」IBM。
- ^ abcd "WebCL仕様". www.khronos.org . 2016年9月14日閲覧。
- ^ 「KhronosGroup/webcl-validator」。GitHub 。2016年9月14日閲覧。
外部リンク
- 公式サイト
- WebCL仕様
- WebCL ウィキ
