cuda每块一个线程

时间:2014-06-25 11:06:28

标签: c++ vector cuda

如果我有2D矢量的序列(或流),并且我想为每个2D矢量使用一个线程,我可以为每个矢量分配一个块,每个块分配一个线程吗?我必须先将其转换为一维数组吗?或者唯一的线程可以通过blockIdx.x和blockIdx.y访问向量元素?

什么是内核启动参数?

假设vsize = 2D向量的数量(我想将其用作块数)

这是正确的:

mykernel<<vsize,1>>()

每个向量的计算是独立的。 我的设备计算能力是2.1

1 个答案:

答案 0 :(得分:2)

是的,您可以使用CUDA为每个块启动一个线程。通常不是你如何从机器中获得性能,因为当一个线程正在运行时,它会使大约97%的执行资源空闲。

如果要为每个块启动一个线程,这是正确的语法:

mykernel<<<gridsize, 1>>>(...);

其中gridsize是您要启动的每个网格的块数。每个块使用一个线程通常用于向新程序员引入CUDA,但通常不应该用于面向性能的代码。

在上述情况下,每个块都将使用单个线程启动,并且该线程将具有全部为零的线程索引(threadIdx.xthreadIdx.ythreadIdx.z)。块索引(blockIdx.x等)将由您的gridsize变量确定。