J'écris actuellement une multiplication matricielle sur un GPU et je voudrais déboguer mon code, mais comme je ne peux pas utiliser printf dans une fonction de périphérique, y a-t-il autre chose que je peux faire pour voir ce qui se passe à l'intérieur de cette fonction. C'est ma fonction actuelle:
__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;
}
J'aimerais savoir si Ad et Bd sont ce que je pense que c'est, et voir si cette fonction est réellement appelée.
[~ # ~] modifier [~ # ~]
Pour éviter de tromper les gens, comme le souligne M. Tibbits, printf est disponible dans tout GPU de capacité de calcul 2.0 et supérieur.
FIN DE MODIFICATION
Vous avez le choix:
Concernant votre extrait de code:
Matrix
via un pointeur (c'est-à-dire cudaMemcpy
à l'appareil, puis passez le pointeur de l'appareil), pour le moment, vous n'aurez aucun problème, mais si la signature de la fonction devient très grande, alors vous pouvez atteindre la limite de 256 octetsCUDA prend désormais en charge printf
s directement dans le noyau. Pour une description formelle, voir l'annexe B.16 du Guide de programmation CUDA C .
au fait..
Voir la section "Sortie formatée" (actuellement B.17) du Guide de programmation CUDA C.
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html