最終更新:2014-02-10 (月) 11:20:45 (3870d)
CUDA
Top / CUDA
Compute Unified Device Architecture
http://developer.nvidia.com/cuda
http://www.nvidia.co.jp/object/cuda_home_new_jp.html
The CUDA Toolkit is a C language development environment for CUDA-enabled GPUs.
概要
- CUDA はハードウェアとソフトウェアをカバーするアーキテクチャで、C、C++、Fortran、OpenCL、DirectCompute などさまざまな言語で書かれたプログラムをNVIDIA GPU で実行することができます。
- 3.20GHzのPentium DとGeForce 8800 GTXを比較した場合、18~77倍もの性能差があり、扱うデータサイズが大きくなるほど、その差は広がる傾向にあるという。
特徴
- C言語を独自に拡張 (とC++の一部の構文)
- デバイス情報の取得
- CPU(ホスト)、GPU(デバイス)間でのメモリ転送をサポート
- DirectX、OpenGLとの相互運用
- スレッド管理
- CUDAを使用するとGPUは並列演算コプロセッサ?として利用可能
- 複数のGPUに対応
- シェーダ言語に比べると簡単
Technology Features
- Standard C programming language enabled on a GPU
- Unified hardware and software solution for parallel computing on CUDA-enabled NVIDIA GPUs
- CUDA compatible GPUs range from lower power notebook GPUs to high performance, multi-GPU systems
- CUDA-enabled GPUs support the Parallel Data Cache and Thread Execution Manager
- Standard numerical libraries for FFT (Fast Fourier Transform) and BLAS (Basic Linear Algebra Subroutines)
- Dedicated CUDA driver for computing
- Optimized direct upload and download path from the CPU to CUDA-enabled GPU
- CUDA driver interoperates with OpenGL and DirectX graphics drivers Support for Linux 32/64-bit and Windows XP 32/64-bit operating systems
- Direct driver and assembly level access through CUDA for research and language development
開発ツール
- ランタイム用ドライバ - グラフィックドライバ?にCUDAのランタイムドライバは含まれている
- Developer Drivers - CUDAのデバッグ実行するのに必要なドライバ
- CUDA Toolkit - CUDAを使用可能なGPUのためのC言語開発環境
- NVIDIA GPU Computing SDK(旧CUDA SDK) - サンプルコードとか。
CUDA/バージョン
- GeForce 8シリーズ(G80コア)以降を汎用並列プロセッサーとして利用可能
- GeForce/コア名
CUDA/世代
Compute Capability
CUDA/ドキュメント
- CUDA Getting Started Guide (Windows/Linux/Mac OS X)
- Getting Started With CUDA SDK Samples
- CUDA C Programming Guide
- CUDA C Best Practices Guide
- CUDA Occupancy Calculator?
- OpenCL Programming Guide?
- CUDA API Reference Manual?
例
#include <stdio.h> #include <cutil.h> int main( int argc, char** argv) { CUT_DEVICE_INIT(); CUT_EXIT(argc, argv); return 0; }
CUDA/用語
ホスト
デバイス
CUDA/カーネル
- デバイス上で実行される関数
スレッド/スレッドブロック?/グリッド
- SP数より圧倒的に多いスレッドで計算することでGPUの高い性能を発揮できる
- GPUはスレッドを超並列実行する構造となっているので、多数をスレッドをどのように管理するかが問題になる。
- CUDAでは、スレッドのまとまりをブロック?(スレッドブロック?)と呼ぶ。
- CUDAでは最大3次元のスレッドの配列をブロックとすることができる。
- 同じサイズのブロックをまとめたものをGridと呼び、グリッドは2次元のブロックの配列を含むことが出来る。
- このグリッドがホストから実行を指令する単位で、グリッド内の全スレッドは同じプログラム(カーネルと呼ぶ)を実行する。
CUDA/メモリ
- コンピュータ上のメインメモリには直接アクセスはできない。そのため、cudaMemcpyを使って、メインメモリからグラフィックカード上のメモリへ転送してやる必要がある。
- グローバルメモリは同一グリッド内であれば、どのブロック、どのスレッドからもアクセスできる。
- シェアードメモリは同一ブロック内のスレッドからしかアクセスできないものの、グローバルメモリに比べて、きわめて高速にアクセスできる。
プログラミングの流れ
- GPUの初期化
- GPU上のデバイス・メモリ領域の確保
- ホストがGPUに計算させるデータを用意
- CUDAのAPI(Application Programming Interface)を使用して,ホストからデバイス・メモリへデータを転送
- スレッド数,ブロック数を指定してCUDA/カーネルを実行
- ホストがCUDAのAPIを使用してデバイス・メモリ上の計算結果を回収
マルチプロセッサで実行できる最大のブロック数とスレッド数
- ブロック?当たりの最大スレッド数:512スレッド
- グリッドの各次元に指定できる最大ブロック数:65535ブロック
- ワープ:32スレッド
- マルチプロセッサで実行できる最大ブロック数:8個
- マルチプロセッサで実行できる最大ワープ数:24個
- マルチプロセッサで実行できる最大スレッド数:768スレッド(24ワープ×32スレッド/ワープ)
ハードウェア構成
- CUDA対応GPUのハードウェア構成は「マルチプロセッサ」と呼ばれる回路ブロックが複数並んだ構成になっており、マルチプロセッサの中には,「ストリーム・プロセッサ?(Streaming Processor)」が8個搭載されている.
関連
参考
- http://tech.ckme.co.jp/cuda.shtml
- http://journal.mycom.co.jp/special/2008/cuda/index.html
- http://www.kumikomi.net/archives/2008/06/12gpu1.php?page=1
- http://journal.mycom.co.jp/articles/2009/07/27/cuda/index.html
- http://gpu.fixstars.com/
- http://cudasample.net/
- http://epa.scitec.kobe-u.ac.jp/~gpgpu/hiki/hiki.cgi?CUDA Samples
- http://www.shuwasystem.co.jp/support/7980html/2578.html