我可以在_ device _ 中创建线程,如:
__device__ float func()
{
int idx = threadIdx.x + blockIdx.x * blockDim.x;
// do stuff
return some_float;
}
或者你只能在_ 全局_ 内核中创建线程吗?
答案 0 :(得分:4)
int idx = threadIdx.x + blockIdx.x * blockDim.x;
简答:上面的代码行在__device__
函数中完全有效。
但它不会“创建”线程。它只使用该线程的idx
,threadIdx.x
和blockIdx.x
值计算当前线程的blockDim.x
索引。
在CUDA中创建线程的唯一方法是使用<<<>>>
语法启动内核,以使用块和网格维度指定线程的数量和分组:
int blockSize = 128;
int gridSize = (N + blockSize - 1) / blockSize;
myKernel<<<gridSize, blockSize>>>();