現在、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が私が考えているものであるかどうかを知り、その関数が実際に呼び出されているかどうかを確認したいと思います。
[〜#〜] edit [〜#〜]
M. Tibbitsが指摘するように、誤解を招く人々を避けるために、printfはコンピューティング機能2.0以上のGPUで使用できます。
編集終了
次の選択肢があります。
コードスニペットについて:
Matrix
構造体をポインター経由で渡すことを検討してください(つまり、cudaMemcpy
それらをデバイスに渡してから、デバイスポインターに渡します)、今は問題ありませんが、関数シグネチャが非常に大きくなる場合256バイトの制限に達する可能性がありますCUDAは、カーネルでprintf
sを直接サポートするようになりました。正式な説明については、 CUDA Cプログラミングガイド の付録B.16を参照してください。
ところで..
CUDA Cプログラミングガイドの「フォーマットされた出力」(現在はB.17)セクションを参照してください。
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html