C言語でGPGPUを用いた並列コンピューティング
並列コンピューティングを簡単に実現するために、OpenMP, OpenACC, CUDA, OpenCL などがあります。GPGPU を利用する場合には、CUDA や OpenCL など、一体、どれを選択するべきでしょうか?
読み方
概要
CPUのマルチコア化が進んで、もう10年近くになったかと思います。 CPUのマルチコア化に比べると、GPU のほうがより多くのコアを持っています。 CPU と GPU には、計算の得意不得意があります。
GPU に任せられる計算は、たくさんのコアを持つ GPU に任せたほうが、速く計算ができることもあり、 GPGPU が利用されるようになりました。
GPU を活用するために、簡単に利用する方法もあれば、がんばって、拡張されたC言語といったものを使って、GPUを使い倒すためにプログラミングすることもできます。
カジュアルな並列化コンピューティングを望むのであれば、OpenMP を使えばよいでしょう。 また、NVIDIA などの GPU を使い倒すのであれば、 CUDA C でプログラミングをしたら良いでしょう。
CUDA
CUDA は、 NVIDIA 社 の GPU を GPGPU で使うためのプログラミング環境です。 CUDA C言語を用いて、プログラミングします。 NVIDIA による NVIDIA のための仕組みのため、NVIDIA の GPU でしか使えません。
OpenCL
アップルが提案した仕様です。 OpenCL は、 OpenCL C言語 を用いて、 マルチコアCPU, GPU Cellプロセッサなど、異種混合の計算資源を利用した並列コンピューティングを提供するフレームワークです。
OpenCL 2.1 では、 OpenCL C++言語が導入されました。
OpenMP
OpenMP は、 Open Multi-Processing の略です。 OpenMP 4.0 / 4.5 から GPGPU へのオフロードもサポートされました。 プラグマディレクティブを指定することで、プログラムを簡単に並列化できます。 対応デバイスは、 Intel XeonPhi, NVIDIA, AMD の GPU です。
OpenACC
CPU/GPU の両方を利用できます。 プラグマディレクティブを指定することで、プログラムを簡単に並列化できます。
OpenMP でも GPU がサポートされることにより、役目を終えたと思われます。
結局どれを使えばいいのか?
- 簡単にやりたい
- OpenMP 4.0/4.5 (もしくは OpenACC)
- NVIDIA GPUだけで動けばいい
- CUDA
関連項目
ツイート