我可以在_设备_中创建线程吗,例如:
__device__ float func()
{
int idx = threadIdx.x + blockIdx.x * blockDim.x;
// do stuff
return some_float;
}
或者你只能在_全局_内核中创建线程吗?
最佳答案
int idx = threadIdx.x + blockIdx.x * blockDim.x;
简短回答:上面的代码行在 __device__
中完全有效功能。
但是它不会“创建”线程。它只是计算 idx
中的索引。对于当前线程,使用该线程的值 threadIdx.x
, blockIdx.x
和blockDim.x
.
在 CUDA 中创建线程的唯一方法是使用 <<<>>>
启动内核。使用 block 和网格维度指定线程数量和分组的语法:
int blockSize = 128;
int gridSize = (N + blockSize - 1) / blockSize;
myKernel<<<gridSize, blockSize>>>();
关于可以在 __ global __ 之外创建线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529150/