我使用了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;
...
答案 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,则会看到错误。
由于内核实际上并未使用此类错误启动,因此内核代码中设置的任何断点也不会被命中。