2013-07-30 131 views
4

我的機器中有兩個NVidia卡,並且都支持CUDA。當我運行示例腳本上手PyCUDA在這裏看到:http://documen.tician.de/pycuda/我得到的錯誤我如何告訴PyCUDA使用哪個GPU?

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

我的計算GPU的計算能力3.0,所以sm_30應爲NVCC編譯器正確的選擇。我的圖形GPU只有CC 1.2,所以我想也許是這個問題。我已經安裝了適用於Linux的CUDA 5.0版本,沒有錯誤,並且安裝了所有的編譯器組件和python組件。

有沒有辦法明確告訴PyCUDA使用哪個GPU?

回答

1

nvcc不會抱怨基於在您安裝的特定GPU上。它會針對你所說的編譯的GPU類型進行編譯。問題在於你指定sm_30,當選項也被指定時,這不是--gpu-architecture的有效選項。

你應該通過compute_30--gpu-architecturesm_30--gpu-code

還要確保您在使用正確的nvcc和不小心使用了一些舊版本的CUDA工具包的。

一旦你解決了編譯問題,pycuda將會觀察到一個環境變量CUDA_DEVICE來選擇特定的已安裝GPU。

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工作。謝謝@羅伯特 – JasonRDalton

0

我不知道Python封裝(或關於Python的一般情況),但在C++中,您有WGL_NV_gpu_affinity NVidia擴展,它允許您定位特定的GPU。可能你可以在Python中爲它編寫一個包裝器。

編輯:

現在,我看到你實際上是在運行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.... 
相關問題