C言語でGPGPUを用いた並列コンピューティング

提供: C言語入門
移動: 案内検索
スポンサーリンク

並列コンピューティングを簡単に実現するために、OpenMP, OpenACC, CUDA, OpenCL などがあります。GPGPU を利用する場合には、CUDA や OpenCL など、一体、どれを選択するべきでしょうか?

読み方

CUDA
くーだ
OpenMP
おーぷん えむぴー
OpenACC
おーぷん えーしーしー

概要

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

関連項目



スポンサーリンク