J’écris actuellement une multiplication de masortingce sur un GPU et j’aimerais déboguer mon code, mais comme je ne peux pas utiliser printf dans une fonction de périphérique, puis-je faire quelque chose d’autre pour voir ce qui se passe dans cette fonction? C’est ma fonction actuelle:
__global__ void MasortingxMulKernel(Masortingx Ad, Masortingx Bd, Masortingx 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 est ce que je pense, et voir si cette fonction est appelée.
MODIFIER
Pour éviter de tromper les gens, comme le souligne M. Tibbits, printf est disponible dans tous les GPU dotés des capacités de calcul 2.0 et supérieures.
FIN DE L’EDIT
Vous avez des choix:
En ce qui concerne votre extrait de code:
Masortingx
via le pointeur ( cudaMemcpy
, puis transmettez-le au pointeur du périphérique). À ce cudaMemcpy
, vous n’aurez aucun problème, mais si la signature de la fonction devient très grande, vous pouvez atteindre la limite de 256 octets. CUDA supporte maintenant les printf
directement dans le kernel. Pour une description officielle, 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