現在地 >> メニュー >> CUDA >> CUDA編02 >> CUDA編02::カーネルの呼び出し

__global__関数の呼び出し方


__global__関数はCPUからGPUで実行関数をコールするもの。
つまり、CUDA側の処理の開始点みたいなもの。

その書き方は次の通り
  • 宣言や定義時には修飾子として「__global__」を付ける
  • 呼び出す時には「<<<… …>>>」を使って、「Grid数」や「Block数」を指定する

構文としては次のようになる
Func<<<Dg,Db,Ns,S>>>(parameter)

【例】
//------------- CUDAでの処理 ---------------//
__global__ void cuAddValue(float *gpuAryData)
{
	… …
}

… …

float *gpuAry;//GPUメモリ用

//GPU用にブロックとスレッドを用意
dim3 grid(100,1,1);//100個のグリッド
dim3 block(200,1,1);//200個のブロック
	
//グリッド100個、ブロック200個
cuAddValue<<<grid,block>>>(gpuAry);

【解説】

Dg グリッドのサイズ

dim3型。グリッドのサイズを指定する。(1グリッドあたりのブロックの数)
Dg.x * Dg.yが1グリッドあたりの総ブロック数となる。Dg.zは「1」。

Db ブロックのサイズ

dim3型。ブロックのサイズを指定する。(1ブロック当たりのスレッドの数)
Db.x*Db.y*Db.zが1ブロックあたりの総スレッド数となる。

Ns ブロック単位で動的に確保される共有メモリ

size_t型。ブロック単位で動的に確保される共有メモリを指定する。
デフォルトは0。

S 何らかのストリーム用

cudaStream_t型。何らかのストリーム用。

関数についている修飾子


__global__カーネルを意味する。GPUで実行し、CPUからコールする
__device__GPUでコールして、GPUで実行する
__host__CPUでコールしてCPUで実行する

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます