2011-06-30 3 views
2

は私がデバイス_のような_内のスレッドを作成することができます。__グローバル__の外側にスレッドを作成できますか?

__device__ float func() 
{ 
    int idx = threadIdx.x + blockIdx.x * blockDim.x; 

    // do stuff 

    return some_float; 
} 

するか、あなただけの_ グローバル_カーネルでスレッドを作ることができますか?

+1

'戻りフロート;'法的Cはありません、C++、またはCUDA C/C++をサポートします。 – harrism

答えて

4
int idx = threadIdx.x + blockIdx.x * blockDim.x; 

短い答え:上記のコード行は、__device__機能で完全に有効です。

しかし、スレッドを「作成」しません。現在のスレッドでthreadIdx.x,blockIdx.xおよびblockDim.xのインデックスを使用して、単にidxというインデックスを計算します。

CUDAのスレッドを作成するための唯一の方法は、ブロックとグリッド寸法を使用して、スレッドの数とグループ化を指定する<<<>>>構文を使用してカーネルを起動することである。

int blockSize = 128; 
int gridSize = (N + blockSize - 1)/blockSize; 

myKernel<<<gridSize, blockSize>>>(); 
関連する問題