Cuda:如果我仅使用块和线程的 .x,它是否仍会使用 GPU 中的所有可用线程,或者必须使用线程和块的 .y 和 .z?

Ros*_*han 5 memory cuda

我的程序需要最大限度地使用 GPU。

那么,blockDim.x * blockIdx.x + threadIdx.x; 是吗?是否能够访问所有线程?或者也必须使用 .y 和 .z ?这是强制性的吗?

Mar*_* A. 3

CUDA 线程层次结构只是一种方便的抽象,不需要使用一维、二维或三维,如果只使用一维而不是全部三个维度,也不会损失性能。只要指定了正确的网格尺寸,您就可以使用通过一组索引启动的所有线程。

2.2. 线程层次结构

为了方便起见,threadIdx是一个3分量向量,这样可以使用一维、二维或三维线程索引来标识线程,形成一维、二维或三维线程块。这提供了一种自然的方式来调用域中元素(例如向量、矩阵或体积)的计算。

阅读更多信息:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#thread-hierarchy