块中的线程数

时间:2013-05-13 19:17:33

标签: cuda

我使用了x& y用于计算设备中矩阵的单元格。 当我使用超过32的lenA& lenB,断点(设备代码中的int x= threadIdx.x;)无法正常工作,输出不正确。

在主机代码中:

int lenA=52;
int lenB=52;

dim3 threadsPerBlock(lenA, lenB);
dim3 numBlocks(lenA / threadsPerBlock.x, lenB / threadsPerBlock.y);

kernel_matrix<<<numBlocks,threadsPerBlock>>>(dev_A, dev_B);

在设备代码中:

int x=  threadIdx.x;
int y=  threadIdx.y;
...

1 个答案:

答案 0 :(得分:1)

您的threadsPerBlock dim3变量必须satisfy the requirements for the compute capability您要定位。

CC 1.x设备每个块最多可处理512个线程

CC 2.0 - 3.5设备每个块最多可处理1024个线程。

(32,32)处的dim3变量指定每个块1024(= 32x32)个线程。当你超过它时,你的内核启动失败。

如果您在内核启动时执行cuda error checking,则会看到错误。

由于内核实际上并未使用此类错误启动,因此内核代码中设置的任何断点也不会被命中。