可以在 __ global __ 之外创建线程吗?

标签 c cuda

我可以在_设备_中创建线程吗,例如:

__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.xblockDim.x .

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

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

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

关于可以在 __ global __ 之外创建线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529150/

相关文章:

cuda - 如何从事件 CUDA 设备获取属性?

cuda - CudaMalloc 如何工作?

cuda - 2D/3D CUDA block 如何划分为经线?

c++ - 注册每个 C/C++ 源文件以创建已用源的运行时列表

c - 变量可用于两个函数而无需在 C 中全局化

cuda - 如何解决在CUDA中不允许调用__host__函数(“std::max <double>”)的错误?

cuda线程索引

c - 调用相同函数时的线程问题

c - 如何使用 DejaGnu 设置单元测试

c - 写一个函数到 malloc 双指针