*GPUアーキテクチャ [#n47580cd]
NVIDIAのGT200アーキテクチャでは,個々が次のユニットを内蔵した30個のマルチプロセッサ「SM(Streaming Multiprocessor)」
-8個のスカラプロセッサ「SP(Streaming Processor)」
-1個の倍精度ユニット
-シェアードメモリ
を持っています.
よって,1GPUが用いることができる並列スレッドプロセッサの数は240個です.

SM数,SP数はGPUの種類によって異なり,並列化のスケーラビリティのために,
並列スレッドはCUDAにより以下の図のように階層的にグループ化され,スケジューリングされます.

&ref(gpu_architecture.gif);

階層は上から「グリッド」「ブロック」「スレッド」.
スレッドはC for CUDAのプログラムにおいて関数として表される「カーネル」を並列に実行します.
カーネルは呼び出されたとき,ユーザの指定したN個の異なるスレッドで並列にN回実行されます.
C for CUDAでは,<<< ... >>> 構文でグリッドあたりのブロック数,
ブロックあたりのスレッド数を指定することができます.

ハードウェアは各マルチプロセッサごとにブロックを割り当てることで,
プロセッサ数に対するスケーラビリティを確保しています.

*メモリ [#q6d034c5]
各マルチプロセッサは以下の4つのタイプのオンチップメモリを持っています.
-32bitレジスター群(各プロセッサ毎)
-シェアードメモリ(SM内のSPが共有)
-コンスタントキャッシュ(読み込み専用)
-テクスチャキャッシュ(読み込み専用)

また,大容量のデバイスメモリを別に持っています.
デバイスメモリはGPUボード上のメモリで,
CPU側のホストメモリとPCIバスを通してデータをやりとりすることができます.

&ref(cuda_memory.jpg);

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS