我目前正在GPU上编写矩阵乘法并希望调试我的代码,但由于我无法在设备函数中使用printf,我还能做些什么来查看该函数内部的内容。这是我目前的职能:
__global__ void MatrixMulKernel(Matrix Ad, Matrix Bd, Matrix Xd){
int tx = threadIdx.x;
int ty = threadIdx.y;
int bx = blockIdx.x;
int by = blockIdx.y;
float sum = 0;
for( int k = 0; k < Ad.width ; ++k){
float Melement = Ad.elements[ty * Ad.width + k];
float Nelement = Bd.elements[k * Bd.width + tx];
sum += Melement * Nelement;
}
Xd.elements[ty * Xd.width + tx] = sum;
}
我很想知道Ad和Bd是否符合我的想法,并查看该功能是否实际被调用。
答案 0 :(得分:71)
CUDA现在直接在内核中支持printf
。有关形式描述,请参阅CUDA C Programming Guide的附录B.16。
答案 1 :(得分:16)
修改强>
为避免误导人们,正如M. Tibbits所指出的,printf可用于任何计算能力2.0及以上的GPU。
END OF EDIT
您有选择:
关于您的代码段:
Matrix
结构传递给via指针(即cudaMemcpy
它们到设备,然后传入设备指针),现在你没有问题但是如果函数签名变得非常大然后你可以达到256字节的限制答案 2 :(得分:4)
答案 3 :(得分:2)
请参阅“CUDA C编程指南”的“格式化输出”(当前为B.17)部分。
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html