2013-07-30 3 views
4

J'ai deux cartes NVidia dans ma machine, et les deux sont compatibles avec CUDA. Quand je lance le script exemple pour commencer avec PyCUDA vu ici: http://documen.tician.de/pycuda/ j'obtiens l'erreurComment puis-je dire à PyCUDA quel GPU utiliser?

nvcc fatal : Value 'sm_30' is not defined for option 'gpu-architecture' 

Mon GPU de calcul est la capacité de calcul 3.0, sm_30 devrait être la bonne option pour le compilateur nvcc. Mon GPU graphique est seulement CC 1.2, donc j'ai pensé que c'est peut-être le problème. J'ai installé la version 5.0 de CUDA pour Linux sans erreurs, et tous les composants du compilateur et les composants python.

Existe-t-il un moyen de dire explicitement à PyCUDA quel GPU utiliser?

Répondre

1

nvcc ne va pas se plaindre à base sur les GPU spécifiques que vous avez installés. Il compilera pour n'importe quel type de GPU que vous lui dites de compiler. Le problème est que vous spécifiez sm_30 qui n'est pas une option valide pour --gpu-architecture lorsqu'une option --gpu-code est également spécifiée.

Vous devriez être compute_30 pour --gpu-architecture passait et sm_30 pour --gpu-code

Vérifiez également que vous avez la bonne nvcc en cours d'utilisation et n'utilisez pas, par inadvertance, une ancienne version de la boîte à outils CUDA.

Une fois le problème de compilation résolu, il existe une variable d'environnement CUDA_DEVICE que pycuda observera pour sélectionner un GPU installé particulier.

De here:

CUDA_DEVICE=2 python my-script.py 

Par ailleurs someone else eu votre problème. Etes-vous sûr de ne pas avoir une ancienne version de la boîte à outils CUDA utilisée par PyCUDA?

+0

Cela semble être sur la bonne voie. PyCUDA définit toutes les options de compilation, donc c'est bizarre qu'ils envoient la valeur "sm-30" à la mauvaise option. Je vais voir si je peux trouver des documents pour ces options dans PyCUDA. Les docs sont plutôt minces. – JasonRDalton

+0

J'ai édité ma réponse. Je vérifierais certainement si vous avez une ancienne version de la boîte à outils CUDA que PyCUDA utilise. –

+0

BOOYAAAHH! La variable d'environnement CUDA_DEVICE a fonctionné. Merci @Robert – JasonRDalton

0

Je ne connais pas le wrapper Python (ou à propos de Python en général), mais en C++ vous avez l'extension NVidia WGL_NV_gpu_affinity qui vous permet de cibler un GPU spécifique. Vous pouvez probablement écrire un wrapper pour cela en Python.

EDIT:

Maintenant que je vois que vous êtes réellement en cours d'exécution Linux, la solution est plus simple (C++) Vous avez juste besoin d'énumérer XDisplay avant init contexte..

Donc, fondamentalement, le GPU par défaut est généralement ciblé avec la chaîne d'affichage « 0.0 »

Pour ouvrir l'affichage avec un second GPU vous pouvez faire quelque chose comme ceci:

const char* gpuNum = "0:1"; 

    if (!(_display = XOpenDisplay(gpuNum))) { 

     printf("error: %s\n", "failed to open display"); 

    } else { 
     printf("message: %s\n", "display created"); 

    } 

     ////here comes the rest of context setup.... 
Questions connexes