CUDAの動作の仕組み

セッションの最後には、簡単にではあったが、CUDAそのもののについての紹介も行われた。

「CUDAは、丁度GPUをコプロセッサ的に活用するための仕組みともいえます」(Kirk氏)

というように、並列処理を行うプログラムカーネルはGPU側で動作し、このGPUカーネルを活用するためのお膳立てや、GPUカーネルからの結果出力を取りまとめる処理はCPU側で行うことになる。

CUDAはGPUをコブセッサ的に活用する仕組み

CUDAにおけるGPUカーネルはSPMDアーキテクチャであるといえる

CUDAはGPU向けベクトル演算向けに拡張したC言語

C言語プログラムとCUDAプログラムの比較

大量のデータを1つのカーネルプログラムに実行させて処理させるこの仕組みは特に「SPMD:Single Program Multiple data」と呼ばれる。

実際のCUDAプログラム実行の折には、CUDAプログラムがCUDAコンパイラでコンパイルされ、CPUコードとGPUカーネルコードが生成されて実行される。GPUカーネルコードはコンパイル後は「PTX」と呼ばれるGPUアセンブリ言語になり、これはこのままでは実行されない。

CUDAのシステムスタック図

このPTXコードは、CUDAドライバを通じて、動作させるターゲットGPUの構成や世代に適したネイティヴコードに変換されて実行される。

つまり、将来的に新しいGPUが登場したときにはCUDA Driverが更新され、その新しいGPUに対応したネイティヴコード・トランスレータを用意することで将来的な互換性を維持することになる。このCUDAドライバとネイティヴコード・トランスレータはGPUコアが何基稼働していて、何基でGPUカーネルコードを実行できるのかを吟味して動作する。これがGPUの世代や、GPUの同時稼働数が異なってもCUDAプログラムの実行互換性が維持される仕組みの根幹技術となる。

CUDAの動作の仕組み