在编写 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 需要硬件和软件的配合才能使用,对于一般使用者可能暂时不太可能的。