你能在__ global __之外创建线程吗?

时间:2011-06-30 01:44:28

标签: c cuda

我可以在_ device _ 中创建线程,如:

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

  // do stuff

  return some_float;
}

或者你只能在_ 全局_ 内核中创建线程吗?

1 个答案:

答案 0 :(得分:4)

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

简答:上面的代码行在__device__函数中完全有效。

但它不会“创建”线程。它只使用该线程的idxthreadIdx.xblockIdx.x值计算当前线程的blockDim.x索引。

在CUDA中创建线程的唯一方法是使用<<<>>>语法启动内核,以使用块和网格维度指定线程的数量和分组:

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

myKernel<<<gridSize, blockSize>>>();