J'ai construit du code C++ qui utilise OpenACC et l'a compilé avec le compilateur PGI pour l'utiliser sur le GPU Tesla.Débogage d'une erreur "adresse d'espace invalide"
La compilation réussit sans aucun avertissement.
je lance le programme et obtenir deux erreurs:
call to cuStreamSynchronize returned error 717: Invalid address space
call to cuMemFreeHost returned error 717: Invalid address space
L'Internet ne semble pas savoir beaucoup à ce sujet, autre que de suggérer enabling unified memory afin que le problème est balayé automatiquement sous le tapis. Je ne suis pas dans ce genre de solution.
Comment procéder pour le débogage? Avec le code C++ fonctionnant uniquement sur le CPU, je lance gdb, fais un backtrace, et dis, "Ah, ha!"
Mais maintenant j'ai le code vivant sur le CPU et le GPU et les données circulant entre les deux. Je ne sais même pas quels outils utiliser. Une solution de rechange consiste à commencer à commenter les lignes jusqu'à ce que le problème disparaisse, mais cela semble également sous-optimal.
Merci, Mat! Ce sera probablement quelques jours avant que j'arrive à tester ceci, mais j'ai envoyé un email avec le code fautif (qui est assez court pour être un exemple reproductible) à l'adresse que vous avez suggérée. – Richard
Le problème est que vous avez une variable locale utilisée dans un atomique. Atomics autorise uniquement l'utilisation avec la mémoire partagée ou globale. Je vous ai envoyé un fichier source mis à jour avec les modifications suggérées pour résoudre ce problème et améliorer les performances de votre code. –