2013-07-30 4 views
4

У меня есть две карты NVidia на моей машине, и оба являются CUDA. Когда я запускаю пример сценария, чтобы начать с PyCuda увидеть здесь: http://documen.tician.de/pycuda/ я получаю ошибкуКак я могу сказать PyCUDA, какой графический процессор использовать?

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

Мой вычислительное GPU является вычислительная способность 3,0, так sm_30 должен быть правильным выбором для NVCC компилятора. Мой графический графический процессор - только CC 1.2, поэтому я подумал, что это проблема. Я установил версию CUDA 5.0 для Linux без ошибок, а также все компоненты компилятора и компоненты python.

Есть ли способ сказать PyCUDA явно, какой графический процессор использовать?

ответ

1

nvcc не собирается жаловаться на основе на определенных графических процессорах, которые вы установили. Он будет скомпилирован для любого типа GPU, который вы скажете ему для компиляции. Проблема в том, что вы указываете sm_30, что является недопустимым для --gpu-architecture, когда указывается опция --gpu-code.

Вы должны проездом compute_30 для --gpu-architecture и sm_30 для --gpu-code

Также убедитесь, что у вас есть в использовании правильного nvcc и случайно не используя какую-то старую версию инструментария CUDA.

Как только у вас возникла проблема с компиляцией, существует переменная окружения CUDA_DEVICE, которую pycuda будет наблюдать, чтобы выбрать конкретный установленный графический процессор.

От here:

CUDA_DEVICE=2 python my-script.py 

Кстати someone else были проблемы. Уверены ли вы, что у вас нет старой версии инструментария CUDA, лежащего вокруг того, что использует PyCUDA?

+0

Звучит так, как будто на правильном пути. PyCUDA устанавливает все параметры компиляции, поэтому странно, что они отправляют значение «sm-30» в неправильный вариант. Я посмотрю, могу ли я найти какие-либо документы для этих опций в PyCUDA. Документы довольно тонкие. – JasonRDalton

+0

Я отредактировал свой ответ. Я определенно проверил бы, есть ли у вас старая версия инструментария CUDA, лежащего вокруг того, что использует PyCUDA. –

+0

BOOYAAAHH! Работает CUDA_DEVICE env var. Спасибо @Robert – JasonRDalton

0

Я не знаю о оболочке Python (или вообще о Python вообще), но на C++ у вас есть WGL_NV_gpu_affinity Расширение NVidia, которое позволяет настраивать таргетинг на определенный графический процессор. Вероятно, вы можете написать обертку для нее в Python.

EDIT:

Теперь, когда я вижу, что вы на самом деле работает Linux, решение проще (C++) Вам просто нужно перечислить XDisplay до того контекста инициализации..

Так в основном GPU по умолчанию, как правило, ориентированы медийная строку «0,0»

Чтобы открыть экран со вторым GPU вы можете сделать что-то вроде этого:

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.... 
Смежные вопросы