0

我使用x&y来计算设备中矩阵的单元格。当我为 lenA 和 lenB 使用超过 32 个时,断点(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;
...
4

1 回答 1

2

您的threadsPerBlockdim3 变量必须满足您所针对的计算能力的要求

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

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

您在 (32,32) 处的 dim3 变量指定每个块 1024 (=32x32) 个线程。当您超过该值时,您将获得内核启动失败。

如果您在内核启动时进行了cuda 错误检查,您会看到该错误。

由于内核实际上并没有以这种类型的错误启动,因此内核代码中设置的任何断点也不会被命中。

于 2013-05-13T19:35:15.043 回答