CUDAの動作の仕組み
セッションの最後には、簡単にではあったが、CUDAそのもののについての紹介も行われた。
「CUDAは、丁度GPUをコプロセッサ的に活用するための仕組みともいえます」(Kirk氏)
というように、並列処理を行うプログラムカーネルはGPU側で動作し、このGPUカーネルを活用するためのお膳立てや、GPUカーネルからの結果出力を取りまとめる処理はCPU側で行うことになる。
大量のデータを1つのカーネルプログラムに実行させて処理させるこの仕組みは特に「SPMD:Single Program Multiple data」と呼ばれる。
実際のCUDAプログラム実行の折には、CUDAプログラムがCUDAコンパイラでコンパイルされ、CPUコードとGPUカーネルコードが生成されて実行される。GPUカーネルコードはコンパイル後は「PTX」と呼ばれるGPUアセンブリ言語になり、これはこのままでは実行されない。
このPTXコードは、CUDAドライバを通じて、動作させるターゲットGPUの構成や世代に適したネイティヴコードに変換されて実行される。
つまり、将来的に新しいGPUが登場したときにはCUDA Driverが更新され、その新しいGPUに対応したネイティヴコード・トランスレータを用意することで将来的な互換性を維持することになる。このCUDAドライバとネイティヴコード・トランスレータはGPUコアが何基稼働していて、何基でGPUカーネルコードを実行できるのかを吟味して動作する。これがGPUの世代や、GPUの同時稼働数が異なってもCUDAプログラムの実行互換性が維持される仕組みの根幹技術となる。