OpenCL規格の趣旨というのは、一般にヘテロジニアス・マルチコア環境でのプログラミングを可能とすることです。
HPC、Deep Learning・機械学習等の並列演算処理が必要な分野で活躍されている方は馴染みの深いものでしょうが、実際に用語として使うことはあまりないので、定義の確認をさせて頂きます。
マイクロプロセッサーをヘテロジニアスにすることは、異種のアーキテクチャーをもつCPUやGPUなどを混在した環境と定義できます。
身近な具体例としてはNehalemマイクロアーキテクチャー(第1世代Intel Core i7/i5/i3、2010)以降のIntel CPUはヘテロジニアス・マルチコアを採用しています。
これはAMDとNVIDIA等の異なるアーキテクチャーを持つGPUを持つシステムでも同様であり、今日のマイクロプロセッサーは内在的にヘテロジニアスだと考えてもらって結構です。
後に解説しますが、このヘテロジニアスなハードウェアの抽象化を行うモデルをOpenCLではプラットフォームモデルと呼称し、実行モデルと明確に区別しています。
OpenCLはあくまでもローカル環境での処理をするためのフレームワークのため、ヘテロジニアスと分散処理を合成する場合には、リモートホスト間でメッセージパッシングができるAPIが別途必要となります。
例えばOpenMP/MPI等とOpenCLを併用する利用法もあります。
Copyright 2018-2019, by Masaki Komatsu