问题:是否有用于Geforce卡的仿真器,可让我在没有实际硬件的情况下对CUDA进行编程和测试?
信息:
我希望加快CUDA中我的模拟速度,但是我的问题是,我并不总是在桌面上进行此开发。我想在上网本上做一些工作,但是上网本没有GPU。现在,据我所知,您需要具有CUDA功能的GPU才能运行CUDA。有办法解决这个问题吗?看来唯一的方法就是使用GPU仿真器(显然它会很慢,但可以正常工作)。但是,我想听听用什么方法做到这一点。
我正在Ubuntu 10.04 LTS上编程。
问题:是否有用于Geforce卡的仿真器,可让我在没有实际硬件的情况下对CUDA进行编程和测试?
信息:
我希望加快CUDA中我的模拟速度,但是我的问题是,我并不总是在桌面上进行此开发。我想在上网本上做一些工作,但是上网本没有GPU。现在,据我所知,您需要具有CUDA功能的GPU才能运行CUDA。有办法解决这个问题吗?看来唯一的方法就是使用GPU仿真器(显然它会很慢,但可以正常工作)。但是,我想听听用什么方法做到这一点。
我正在Ubuntu 10.04 LTS上编程。
Answers:
gpuocelot
如果满足其依赖关系列表,则可能可以使用。我已经尝试为BunsenLabs(Linux 3.16.0-4-686-pae#1 SMP Debian 3.16.7-ckt20-1 + deb8u4(2016-02-29)i686 GNU / Linux)创建了一个仿真器。
我会告诉你我学到的东西。
nvcc
过去-deviceemu
在CUDA Toolkit 3.0中具有选项我下载了CUDA Toolkit 3.0,将其安装并尝试运行一个简单程序:
#include <stdio.h>
__global__ void helloWorld() {
printf("Hello world! I am %d (Warp %d) from %d.\n",
threadIdx.x, threadIdx.x / warpSize, blockIdx.x);
}
int main() {
int blocks, threads;
scanf("%d%d", &blocks, &threads);
helloWorld<<<blocks, threads>>>();
cudaDeviceSynchronize();
return 0;
}
请注意,CUDA Toolkit 3.0 nvcc
在中/usr/local/cuda/bin/
。
事实证明,我在编译它时遇到了困难:
NOTE: device emulation mode is deprecated in this release and will be removed in a future release. /usr/include/i386-linux-gnu/bits/byteswap.h(47): error: identifier "__builtin_bswap32" is undefined /usr/include/i386-linux-gnu/bits/byteswap.h(111): error: identifier "__builtin_bswap64" is undefined /home/user/Downloads/helloworld.cu(12): error: identifier "cudaDeviceSynchronize" is undefined 3 errors detected in the compilation of "/tmp/tmpxft_000011c2_00000000-4_helloworld.cpp1.ii".
我在Internet上发现,如果我使用gcc-4.2
或类似的方式来代替,gcc-4.9.2
错误可能会消失。我放弃。
gpuocelot
斯金格的答案有一个非常老的gpuocelot
项目网站的链接。因此,起初我以为该项目在2012年左右就被放弃了。实际上,几年后它被废弃了。
以下是一些最新的网站:
我尝试按照指南安装gpuocelot 。我在安装过程中遇到了几个错误,但我又放弃了。gpuocelot
不再受支持,它取决于一组非常特定的库和软件版本。
您可能会尝试从2015年7月开始阅读本教程,但我不能保证它会起作用。我还没有测试。
MCUDA转换框架是基于Linux的工具,旨在将CUDA编程模型有效地编译为CPU架构。
这可能很有用。这是网站的链接。
它是在Windows 7和8上使用的仿真器。虽然我没有尝试过。它似乎不再开发了(最后一次提交日期为2013年7月4日)。
这是项目网站的链接:https : //code.google.com/archive/p/cuda-waste/
nvcc -deviceemu
CUDA Waste
工作
CU2CL
工作
此响应可能为时已晚,但是仍然值得注意。如果您希望使用Emulator或LLVM后端,则可以在不安装CUDA设备驱动程序(libcuda.so)的情况下编译GPU Ocelot(我是其中的主要贡献者)。我已经在没有NVIDIA GPU的系统上演示了该模拟器。
仿真器尝试忠实地实现PTX 1.4和PTX 2.1规范,这些规范可能包括较旧的GPU不支持的功能。LLVM转换器努力将PTX正确正确地转换为x86,这有望使CUDA成为对多核CPU和GPU进行编程的有效方法。-deviceemu
在相当长的一段时间内,CUDA一直不推荐使用它,但是LLVM转换器始终更快。
此外,模拟器中还内置了几个正确性检查器,以进行以下验证:对齐的内存访问,对共享内存的访问已正确同步,并且全局内存取消了对分配给内存区域的访问的引用。我们还实现了一个命令行交互式调试器,该调试器的灵感主要来自于gdb,它可以单步浏览CUDA内核,设置断点和观察点等。您可能会发现它们很有用。
对不起,仅Linux方面。我们已经启动了Windows分支(以及Mac OS X端口),但是工程负担已经很大,足以强调我们的研究追求。如果任何人有时间和兴趣,他们可能希望帮助我们为Windows提供支持!
希望这可以帮助。
您还可以检查gpuocelot项目,这是一个真正的模拟器,可以模拟PTX(转换为CUDA代码的字节码)。
还有一个LLVM转换器,测试它是否比使用-deviceemu时更快更有趣。
直到CUDA 3.0发布周期为止,CUDA工具箱都内置了该工具箱。我使用的是CUDA的非常旧的版本之一,请确保在使用nvcc进行编译时使用-deviceemu。
https://github.com/hughperkins/cuda-on-cl允许您在OpenCL 1.2 GPU上运行NVIDIA®CUDA™程序(全部披露:我是作者)