在编写 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 提供的虚拟的图形设备:

esxi 使用vgu不使用集成显卡 esxi需要显卡吗_CUDA

查看硬件信息可以参考博文:Linux 查看系统硬件信息

也可以使用命令glxinfo行:

esxi 使用vgu不使用集成显卡 esxi需要显卡吗_esxi 使用vgu不使用集成显卡_02

该命令可参见博文: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 编程。


然而事实没有这么简单,后来发现有人声称在虚拟机中调用到了独显:

cuda program on VMware

贴中,贴主声称自己在 VM 上已经实现了 CUDA 编程,只是担心效率问题。

得票最高的答案中提到:仅当你使用正确的硬件和软件配合的话,才有可能从虚拟机上接触到硬件。

其他相关帖子中也提到同样的问题:

思路广,EXSi 5.x服务器插了一块专业卡,能不能让其中一个虚拟机用上?

Can you Program/Test CUDA in a Virtual Machine?

虚拟机中跑 CUDA 取决于你的硬件,软件环境:
CPU,主板,板卡本身。

1. 其中提到了硬件 CPU 支持 VT-d,注意这里与一般的虚拟化技术 VT 不一样:

esxi 使用vgu不使用集成显卡 esxi需要显卡吗_VMware_03

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

GPGPU Computing in a VM

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