printf dans la fonction CUDA __global__

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:

    • Utilisez un débogueur de GPU, cuda-gdb sous Linux ou Nexus sous Windows
    • Utilisez cuprintf, disponible pour les développeurs enregistrés (inscrivez-vous ici )
    • Copiez manuellement les données que vous voulez voir, puis videz ce tampon sur l’hôte une fois le kernel terminé (rappelez-vous de synchroniser)

    En ce qui concerne votre extrait de code:

    • Envisagez de transmettre les structures 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.
    • Vous avez des lectures inefficaces de Ad, vous aurez une transaction de 32 octets dans la mémoire pour chaque lecture dans Melement – envisagez d’utiliser la mémoire partagée comme zone de transfert (voir l’exemple transposeNew dans le SDK)

    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