我使用CUDA编写了一个简单的矩阵乘法代码,当我运行输入大小为A(10000*10000)*B(10000*10000)
的代码时,收到此消息:
cudaDeviceSynchronize returned error code 4 after launching
在添加这些说明以测量运行时间后,我收到“未指定的启动失败”错误。
cudaEventRecord(start);
// here is my kernel call
cudaEventRecord(stop);
cudaEventSynchronize(stop);
这是我的内核电话:
mulKernel<<<1, dataSet.threadSize>>>(dev_c, dev_a, dev_b, dataSet.n, dataSet.m, dataSet.p, dataSet.threadSize);
这是我的内核代码:
int i = threadIdx.x;
int j, k, sum;
//if(n<=threadSize)
for(; i < n; i+=threadSize){
for(j = 0; j < p; j++){
sum = 0;
for(k = 0; k < m; k++){
sum += A[i * m + k] * B[k * p + j];
}
C[i *p + j] = sum;
}
}
如何解决此错误?
答案 0 :(得分:1)
您正在启动1个大小为dataSet.threadSize
的区块。这将超过块中的最大线程数(我认为Kepler GPU为1024)。阅读更多关于如何选择网格和块尺寸的here。