在編寫 CUDA 程序時遇到這麼一個問題
由於服務器端的 linux 運行環境,而本機是 win8 ,對在本機上通過 SSH 客戶端或者通過 VS 編寫 CUDA 程序再上傳倒到服務器上調試運行的方式始終不適應,又不想裝雙系統,因此想通過虛擬機來安裝 linux 操作系統然後在虛擬機上來調試 CUDA 程序。
這中間就存在可行性的問題:
虛擬機是模擬一個圖形設備,這樣的話你沒有機會接觸到真正的 GPU 。這是由於當有多個虛擬機訪問同一個設備時虛擬機處理的方式決定的,虛擬機在其中提供了一箇中間層來共享真正的硬件設備。
本機顯卡 GTX 850M ,在 virtualbox 4.3.26 上運行虛擬機 CentOS6.5 輸入查詢:
$ lspci | grep -i nvidia
沒有返回任何結果,可以看到沒有 nvidia 顯卡,反而如果將 nvidia 替換爲 virtual 卻可以看到 virtualbox 提供的虛擬的圖形設備:
查看硬件信息可以參考博文:Linux 查看系統硬件信息
也可以使用命令glxinfo行:
該命令可參見博文:glxinfo
也可以看到:
OpenGL renderer string: Software Rasterizer
This means that software rendering is used, but all software rendering is done in the client application, so that the X server is free to service requests from other applications.
As you can see, all four combinations of direct/indirect software/hardware rendering are possible. In terms of performance, direct hardware rendering is fastest, followed by (with a noticeable, but not completely horrible performance penalty) indirect hardware
rendering. Software rendering is always pretty slow.
還有相關鏈接:Cuda on a virtual machine
至此,結論是,虛擬機中不能調用物理顯卡進行 CUDA 編程。
然而事實沒有這麼簡單,後來發現有人聲稱在虛擬機中調用到了獨顯:
貼中,貼主聲稱自己在 VM 上已經實現了 CUDA 編程,只是擔心效率問題。
得票最高的答案中提到:僅當你使用正確的硬件和軟件配合的話,纔有可能從虛擬機上接觸到硬件。
其他相關帖子中也提到同樣的問題:
思路廣,EXSi 5.x服務器插了一塊專業卡,能不能讓其中一個虛擬機用上?
Can you Program/Test CUDA in a Virtual Machine?
虛擬機中跑 CUDA 取決於你的硬件,軟件環境:
CPU,主板,板卡本身。
1. 其中提到了硬件 CPU 支持 VT-d,注意這裏與一般的虛擬化技術 VT 不一樣:
2. CPU 支持外,還需要主板支持 VT-d:
The following Intel® Desktop Boards support Intel VT with Directed I/O:
Chipset Desktop Board
X79 DX79SI, DX79SR, DX79TO
H77, Q77, Z77 DH77DF, DH77EB, DH77KC, DQ77CP, DQ77KB, DQ77MK, DZ77BH-55K, DZ77GA-70K, DZ77RE-75K, DZ77SL-50K
B75, Z75 DB75EN, DZ75ML-45K
Q67 DQ67EP, DQ67OW, DQ67SW
H61 DH61AGL
Q57 DQ57TM, DQ57TML
Q45 DQ45CB, DQ45EK
Q35 DQ35JO, DQ35MP
3. 軟件環境:VMware DirectPath I/O
普通的VMWare不行,必須VMware ESXi
其中提到對 nvidia 顯卡的要求:
4. (2) Requires a “direct passthrough” capable GPGPU
- Most NVIDIA Quadro cards are passthrough capable
- Recent AMD cards are also passthrough capable
看來一般的 GTX 顯卡是不行的,AMD 就忽略吧。。
在這個帖子中也提到了上面的這些方面。
有些人提到可能的解決方法:
1. 通過跑 linux liveCD 來實現,應該是可行的。
2. something called gVirtuS
3. An NVIDIA Multi-OS workstation
An NVIDIA Multi-OS workstation, with dual Quadro GPUs and virtualization software, lets a user assign a dedicated Quadro GPU to both the host operating system and a range of optionally loaded guest operating systems, thus creating a fully virtualized workstation*.
總結:虛擬機中運行 CUDA 需要硬件和軟件的配合才能使用,對於一般使用者可能暫時不太可能的。
其他相關鏈接:
Virtual Machine and CUDA Questions???