CUDAは、より正確には「Compute Unified Device Architecture」の略称であり、NVIDIA社が開発したソフトウェア・ハードウェア統合アーキテクチャです。単なるプログラミングモデルではなく、GPU内部の計算ユニット設計からソフトウェアスタックまでを包含する包括的なアーキテクチャ仕様です。 ## アーキテクチャ仕様としてのCUDA CUDAアーキテクチャは、GPU内部の計算リソースを統一的に抽象化する設計思想に基づいています。従来のGPUが固定機能パイプライン(頂点シェーダー、フラグメントシェーダーなど)に特化していたのに対し、CUDAは汎用計算可能な統一シェーダーアーキテクチャを採用しています。 各計算ユニット(CUDA Core)は、32ビット浮動小数点演算と整数演算を実行可能なALU(Arithmetic Logic Unit)として設計されています。これらのコアは、Streaming Multiprocessor(SM)内にクラスター化され、共通の命令キャッシュ、スケジューラー、共有メモリを持ちます。 ## 命令セットアーキテクチャ(ISA) CUDAは独自の命令セットアーキテクチャ「[[PTX]](Parallel Thread Execution)」を定義しています。PTXは仮想命令セットとして機能し、実際のハードウェア世代に依存しない中間表現を提供します。コンパイル時に、PTXコードは各GPU世代固有のSASS(Shader ASSembly)に変換されます。 PTX命令セットには、標準的な算術・論理演算に加え、原子的メモリ操作、テクスチャサンプリング、表面メモリアクセス、同期プリミティブなどが含まれています。また、predicated executionによる効率的な条件分岐処理もサポートしています。 ## コンピュート・ケイパビリティ仕様 CUDAアーキテクチャは「Compute Capability」という世代分類システムを採用しています。各世代は、サポートする命令セット、メモリアクセスパターン、同期プリミティブ、精度仕様などが厳密に定義されています。 例えば、Compute Capability 3.5では動的並列性(Dynamic Parallelism)が導入され、GPU上で実行中のカーネルから新たなカーネルを起動可能になりました。6.0世代ではUnified Memory機能が強化され、CPU-GPU間でのメモリ空間統合が実現されています。 ## メモリアーキテクチャの詳細仕様 CUDAアーキテクチャは、複数の異なる特性を持つメモリ空間を定義しています。各メモリ空間は、アクセス範囲、キャッシュ階層、バンク構造、アクセス時間などが詳細に規定されています。 共有メモリは、32個のバンクに分割されたマルチバンク構造を採用し、異なるバンクへの同時アクセスを可能にしています。バンク競合が発生した場合の動作も、アーキテクチャ仕様として明確に定義されています。 ## ワープスケジューリング機構 CUDAアーキテクチャの核心的特徴の一つが、ワープベースの実行スケジューリングです。32スレッドで構成されるワープは、単一の実行単位として管理され、同一クロックサイクルで同じ命令を実行します。 各SMは複数のワープを同時に管理し、メモリアクセス待機中のワープから実行可能なワープに即座に切り替えることで、レイテンシ隠蔽を実現します。この機構により、大量のスレッドを効率的に管理し、高いスループットを達成しています。 ## 同期・通信プリミティブ CUDAアーキテクチャは、スレッド間、ブロック間、グリッド間での同期・通信のための複数のプリミティブを定義しています。`__syncthreads()`によるブロック内同期、アトミック操作による競合状態回避、cooperative groupsによる柔軟な同期範囲制御などが含まれています。 これらのプリミティブは、アーキテクチャレベルでハードウェア支援されており、効率的な並列アルゴリズムの実装を可能にしています。 CUDAアーキテクチャは、単なるソフトウェアインターフェースではなく、ハードウェア設計思想から上位ソフトウェアスタックまでを統合した、包括的な並列計算アーキテクチャ仕様として理解する必要があります。