不带硬件的CUDA编程GPU仿真器
问:是否有Geforce卡的仿真器可以让我在没有实际硬件的情况下编程和测试CUDA不带硬件的CUDA编程GPU仿真器,cuda,gpu,emulation,cpu,Cuda,Gpu,Emulation,Cpu,问:是否有Geforce卡的仿真器可以让我在没有实际硬件的情况下编程和测试CUDA 信息: 我希望在CUDA中加速我的一些模拟,但我的问题是我并不总是在我的桌面上做这个开发。我想在我的上网本上做一些工作,但是我的上网本没有GPU。现在据我所知,你需要一个有CUDA能力的GPU来运行CUDA。有没有办法绕过这个问题?这似乎是唯一的方法是GPU仿真器(这显然是痛苦的缓慢,但会工作)。但不管怎样,我都想听一听 我在Ubuntu10.04 LTS上编程。CUDA工具包在CUDA 3.0发布周期之前都内
信息: 我希望在CUDA中加速我的一些模拟,但我的问题是我并不总是在我的桌面上做这个开发。我想在我的上网本上做一些工作,但是我的上网本没有GPU。现在据我所知,你需要一个有CUDA能力的GPU来运行CUDA。有没有办法绕过这个问题?这似乎是唯一的方法是GPU仿真器(这显然是痛苦的缓慢,但会工作)。但不管怎样,我都想听一听 我在Ubuntu10.04 LTS上编程。CUDA工具包在CUDA 3.0发布周期之前都内置了一个。如果您使用这些非常旧的CUDA版本之一,请确保在使用nvcc编译时使用-deviceemu。您还可以检查project,它是一个真正的仿真器,因为PTX(CUDA代码转换为的字节码)将被模拟
还有一个LLVM转换器,测试它是否比使用-deviceemu时更快是很有趣的。在使用-deviceemu编程时要小心,因为nvcc在模拟模式下会接受一些操作,但在GPU上实际运行时不会接受。这主要存在于设备-主机交互中
正如您所提到的,为缓慢执行做好准备。这个响应可能太晚了,但无论如何都值得注意。如果您希望使用Emulator或LLVM后端,可以在不安装CUDA设备驱动程序(libcuda.so)的情况下编译(我是其中的核心贡献者之一)。我已经在没有NVIDIA GPU的系统上演示了模拟器 emulator试图忠实地实现PTX 1.4和PTX 2.1规范,其中可能包括旧GPU不支持的功能。LLVM翻译器致力于从PTX到x86的正确高效转换,这将有望使CUDA成为编程多核CPU以及GPU的有效方式<代码>-deviceemu在相当长的一段时间内一直是CUDA的一个不推荐的功能,但是LLVM转换器总是更快 此外,仿真器中内置了几个正确性检查器来验证:对齐的内存访问、对共享内存的访问是否正确同步,以及全局内存解引用访问分配的内存区域。我们还实现了一个主要受gdb启发的单一步骤,通过CUDA内核,设置断点和观察点等。。。这些工具是专门为加快CUDA程序的调试而开发的;你可能会发现它们很有用 很抱歉,这是Linux独有的特性。我们已经启动了一个Windows分支(以及一个Mac OS X端口),但工程负担已经足够大,足以强调我们的研究工作。如果任何人有任何时间和兴趣,他们可能希望帮助我们提供Windows支持 希望这有帮助
- [1] :GPU Ocelot-
- [2] :Ocelot交互式调试器-
免责声明
- 毕竟我没能模仿GPU
- 如果您满足gpuocelot的列表要求,则可以使用它 依赖关系
nvcc
过去在CUDA Toolkit 3.0中有一个-deviceemu
选项
我下载了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;
}
我在互联网上发现,如果我使用gcc-4.2
或类似的古老版本而不是gcc-4.9.2
,错误可能会消失。我放弃了
gpuocelot
斯特林格的答案有一个链接到一个非常古老的gpuocelot
项目网站。所以一开始我以为这个项目是在2012年左右被放弃的。事实上,它在几年后被废弃了
以下是一些最新的网站:
- )李>
- )李>
我用自己安装的GPGPU Sim创建了一个,以防有帮助。CUDA emulator已被弃用,您最好看看gpuocelot。此外,CUDA emulator在每个逻辑CUDA线程中使用一个本机操作系统线程,效率极低。令人遗憾的是,这只适用于linux。而我默认是linux用户。我做的一小部分开发是在windows机器上进行的。-deviceemu已被弃用,因此jskaggz答案不太合适。总的来说,这似乎是最好的答案
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".