CUDA: non valide appareil ordinale

J'ai le problème suivant. Je veux permettre à mes utilisateurs de choisir les GPU pour exécuter sur. Donc j'ai été le tester sur ma machine qui n'a qu'un seul GPU (périphérique 0) ce qui arriverait si ils choisissent un appareil qui n'existe pas.

Si je ne cudaSetDevice(0); cela fonctionnera très bien.

Si je fais: cudaSetDevice(1); il va se planter avec invalid device ordinal (je peux gérer ce que la fonction renvoie une erreur).

Si je fais: cudaSetDevice(0); cudaSetDevice(1); il va se planter avec invalid device ordinal (je peux gérer ce que la fonction renvoie une erreur).

Toutefois! Si je fais: cudaSetDevice(1); cudaSetDevice(0); la deuxième commande renvoie succès mais sur le premier calcul j'ai essayer de calculer sur mon GPU il va se planter avec invalid device ordinal. Je ne peut pas gérer ce que la deuxième commande ne retourne pas une erreur!

Il me semble que la première cudaSetDevice laisse un peu traîner, ce qui affecte le deuxième commandement?

Merci beaucoup!

Solution: (Merci à Robert Crovella!).
J'ai été à traiter les erreurs comme:

error = cudaSetDevice(1); 
if (error) { blabla }

Mais apparemment, vous avez besoin d'appeler cudaGetLastError() après le cudaSetDevice(1) parce que sinon, le message d'erreur n'est pas supprimé de certains pile d'erreur et il se bloque plus tard, où je faisais cudaGetLastError() pour une autre fonction, même si il n'y a pas d'erreur à ce stade.

InformationsquelleAutor Stefan | 2014-03-04