CUDAによるプログラミング
CUDAによるプログラミング
図9は、CUDAによるプログラミングの例です。CUDAがサポートする言語の1つである"CUDA C"では、いくつかのCUDA特有のユニークな記述が必要にはなるものの、元のC言語に近い、シンプルで分かりやすいものになっています。
|
|
| 図9: CUDA Cによるプログラミング例(サブルーチン) |
ただ、これは、あくまでもGPUが計算を行うサブルーチンの部分だけであり、CPUからこのルーチンを起動するためには、以下のような、いくつかの前設定や手続きが必要になります。
- GPUメモリー領域の確保
- DMA転送によるCPUからGPUへの元データのコピー
- GPUのサブルーチンを呼び出し、GPU上で計算を実行
- DMA転送により、計算結果をGPUからCPUに戻す
|
|
| 図10: CUDA Cによるプログラミング例(メインルーチン) |
GPUコンピューティングでは、CPUのマルチコアを有効に並列的に使用する場合と同じようなレベルでアルゴリズムを考える必要があります。GPUの構造やCUDAの機能を理解したうえでアルゴリズムを考えることが、GPUプログラミングの前提条件になります。
GPUプログラムのコンパイル方法の一例として、Linux上でCUDA C言語を使用する場合について簡単に説明します。以下のようなプロセスを経て、自動的にコンパイルされます。
- "nvcc"(NVIDIA C compiler)によるGPUコードとCPUコードの分離
- GPUコード、CPUコードそれぞれのコンパイル
- GPUコードは、"nvcc"によっていったん中間言語PTX(Parallel Thread Execution)コードになり、最終的にターゲットのバイナリ・コードを生成
- CPUコードは、標準GCC(GNU Compiler Collection)によりコンパイル
- GPUとCPUそれぞれのバイナリ・コードがリンクされ最終実行ファイルを生成
|
|
| 図11: CUDA CコンパイラによるGPU/CPU混在コードのコンパイル |
CUDAによる複合並列計算プログラミング
CUDAによるGPUコンピューティングは、CPUとGPUの共存の上に成り立つものであり、GPUがCPUを置き換えるといった類のものではありません。
かつて、コンピュータの画面出力はCPUが主役でしたが、GPUの登場によってCPUの大幅な負荷軽減と高品質リアルタイム3Dグラフィックスが実現しました。このように、CUDA GPUコンピューティングも、CPUとGPUがそれぞれの得意分野を受け持ちます。こうした連携によって、ハイ・パフォーマンスな複合並列計算環境の実現を目指しています。
- この記事のキーワード


