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

5

我有一个需要充分利用GPU的程序。

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

2个回答

3
CUDA线程层次结构只是一种方便的抽象,并不要求使用一个、两个或三个维度,如果您只使用一个维度而不是所有三个维度,也不会损失性能。只要指定了正确的网格尺寸,您就可以使用启动的所有线程以及一组索引。
为了方便起见,threadIdx是一个3分量向量,因此可以使用一维、二维或三维线程索引来标识线程,形成一维、二维或三维线程块。这提供了一种自然的方式来在域中的元素(如向量、矩阵或体积)之间调用计算。
更多信息请参阅:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#thread-hierarchy

0

你如何访问线程取决于你声明网格和块维度的方式。如果是一维网格和一维块,你只需要使用.x就可以访问所有线程。这是任意的并且与程序有关。你可以定义你的网格为1或2维,并且块可以高达3。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接