我在 Visual Studio 2012 解决方案中有几个 C++ 项目。这些项目包含大量文件,我使用/MP来加速代码生成。
我想知道是否有办法以类似的方式加速 NVCC。在包含 CUDA 内核的项目中使用 /MP 对编译时间没有任何好处,而且我只能看到一个内核在工作。
所以问题是:如何使用我的多核 PC 来加速 CUDA 编译?
我在 Visual Studio 2012 解决方案中有几个 C++ 项目。这些项目包含大量文件,我使用/MP来加速代码生成。
我想知道是否有办法以类似的方式加速 NVCC。在包含 CUDA 内核的项目中使用 /MP 对编译时间没有任何好处,而且我只能看到一个内核在工作。
所以问题是:如何使用我的多核 PC 来加速 CUDA 编译?
从 CUDA 5.5 开始,nvcc
没有 MSVC 的 /MP 等效项,因此 .cu 文件的任何构建并行性都需要来自调用 NVCC 的构建工具。
如果您可以使用 GNU Make 构建(例如在 Cygwin 下或在 Linux/Unix/OS X 系统上),您可以使用它的并行构建功能,使用-j
选项,这会导致它并行处理多个配方。
这是一篇不错的博客文章,它列举了 Windows 上的多个并行构建选项,其中一些可能适用于 NVCC。
对于支持 MSVC 和 NVCC 的真正分布式/并行构建系统,您可以尝试Incredibuild。
您可以使用IncrediBuild
但是可能会出现这个错误:
致命错误C1041:无法打开程序数据库'...';如果多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS
为避免这种情况,请设置项目 -> 属性 -> CUDA C/C++ -> 主机 -> 附加编译器选项 -> /FS。
有关更多信息,请阅读此博客。