4744


> GAME PROGRAMMING Gems 8 日本語版,P.565,7.1 OpenCLで異種並列アーキテクチャを使う

と書いてあったのですが、[OpenCL](https://www.khronos.org/opencl/)に利用されている異種並列アーキテクチャとはどういうものですか？


CC BY-SA 3.0
2015-01-01T07:14:01.903
2890
2017-04-30T09:10:20.493
2017-04-30T09:10:20.493
19110
question
アーキテクチャ
異種並列アーキテクチャとはなんですか


用語 "異種並列アーキテクチャ"
はあまり一般的ではないようですが、OpenCLとは[公式サイトでも謳っているとおり](https://www.khronos.org/opencl/)「異種システム(heterogeneous
system)上の並列プログラミングのための標準仕様」です。

「異種; ヘテロジニアス; heterogeneous」とは、例えば [CPU](http://ja.wikipedia.org/wiki/CPU) ＋
[(GP)GPU](http://ja.wikipedia.org/wiki/GPGPU)
システムのように、異なるアーキテクチャの複数プロセッサで構成されることを意味します。対義語として「同種; ホモジニアス;
homogeneous」、つまり複数のCPUからなるマルチプロセッサ・システムのように、同一アーキテクチャのプロセッサ群で構成されるシステムも存在します。

OpenCLの特徴として、特定のアーキテクチャを仮定しないことが挙げられます。類似技術のCUDAではnVIDIA社製GPUでしか動作しませんが、OpenCLで記述されたプログラムは各メーカGPUにとどまらず、CPUの外にある計算アクセラレーション・デバイスにも対応できます。

**注意:**
これはあくまでOpenCL仕様上の理想論であって、本当にサポートするかはGPUやデバイスのメーカ次第ですし、可搬性重視のトレードオフとして動作性能がイマイチという話もあります。


CC BY-SA 3.0
2015-01-17T14:13:27.830
4744
2015-01-17T14:13:27.830
49
2890
answer


yohjpさんの回答内容に加えて、[OpenCLでは一つのコンテキストに対して複数のデバイスを使用できます](https://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/classDiagram.html)。なので同一のOpenCLコードで別のプラットフォーム/デバイスに対応するだけではなく、実行時にデバイスを混在することもAMD/Intelプラットフォームでは可能になっています。

実際にはキューがデバイス単位に分かれているのでホスト側で負荷分散してやらないといけませんが。


CC BY-SA 3.0
2015-01-23T23:03:28.127
5181
2015-01-23T23:03:28.127
5750
2890
answer