Question

J'ai un problème bizarre .. Je l'ai écrit un code CUDA qui exécute correctement l'émulation et tous les résultats apparaissent .. Cependant, lorsqu'il est exécuté sur le matériel « G210 » .. les résultats dans la mémoire de résultat sont toujours 0

Je passe deux vecteurs au noyau, l'une avec des variables aléatoires que l'autre est initialisé à zéro, les copies de code le premier vecteur à mémoire partagée, fait un peu swapping et d'autres opérations et écrit puis de nouveau les résultats sur le second vecteur ( l'une des premières des 0)

J'utilise double précision, le drapeau -arch de SM13 est utilisé, toute allocation de mémoire utilisent également sizeof (double) ..

J'ai vérifié si le noyau est appelé, il ne .. donc pas de problèmes ici .. le cudaMemCpy n'a pas de problème ..

ce qui pourrait être le problème .. :( pourquoi serait-il travailler dans l'émulation, mais pas sur HW

Je suis tout à fait confus .. toutes les idées?

Était-ce utile?

La solution

Si je me souviens bien, GeForce 210 ne supporte pas Compute capacité 1.3, à savoir qu'il ne supporte pas double.

Essayez de réécrire votre code simple d'utilisation, compiler avec -arch = sm_12.

Autres conseils

Le mode d'émulation n'est pas une simulation précise du GPU - il ne tente pas de simuler le comportement des threads simultanés et tous les problèmes qui peuvent en résulter. Pour déboguer votre noyau, vous allez probablement devoir décomposer en des versions plus petites jusqu'à ce que vous pouvez identifier le problème.

Emulation utilise un compilateur différent, toute la mémoire est sur l'hôte, un seul fil en cours d'exécution, etc. Si vous trouvez un bogue dans l'émulation, vous avez trouvé un bug dans votre code. Si cela fonctionne dans l'émulation, cela ne signifie pas que vous n'avez pas des bugs. Votre question est fondamentalement, j'ai du code bogué, quel est mon bug?

Conseil: contrôle des valeurs de retour pour tout. Apprenez à faire la vérification des erreurs. Se rendre compte que les erreurs sur l'appareil peuvent apparaître de manière asynchrone par rapport au code cpu. Utilisez le débogueur (peut-être acheter un bas de gamme pas cher nvidia gpu pour vous faciliter la tâche). Donnez cuprintf un essai si vous préférez printf au débogage (disponible sur les forums cuda). Demandez de l'aide sur les forums cuda nvidia.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top