问题:Geforce卡是否有仿真器,可以让我在没有实际硬件的情况下编程和测试CUDA?
的信息:
我希望在CUDA中加速我的一些模拟,但我的问题是我并不总是在我的桌面上进行这项开发。我想在我的上网本上做一些工作,但我的上网本没有GPU。据我所知,你需要一个支持CUDA的GPU来运行CUDA。有办法解决这个问题吗?看起来唯一的方法是GPU模拟器(显然会很慢,但会起作用)。但无论如何,我想听听。
我在Ubuntu 10.04 LTS上编程。
答案 0 :(得分:39)
这种反应可能为时已晚,但无论如何都值得注意。如果您希望使用模拟器或LLVM后端,则可以在未安装CUDA设备驱动程序(libcuda.so)的情况下编译GPU Ocelot(我是其中一个核心贡献者)。我已经在没有NVIDIA GPU的系统上演示了仿真器。
模拟器试图忠实地实施PTX 1.4和PTX 2.1规范,其中可能包括旧GPU不支持的功能。 LLVM转换器致力于从PTX到x86的正确和高效转换,这有望使CUDA成为编程多核CPU和GPU的有效方法。 -deviceemu
已经被CUDA弃用了很长一段时间,但LLVM转换器一直都比较快。
此外,在仿真器中内置了几个正确性检查器以验证:对齐的内存访问,对共享内存的访问是否正确同步,以及全局内存解除引用访问已分配的内存区域。我们还实现了一个command-line interactive debugger,主要受到gdb的启发,可以单步执行CUDA内核,设置断点和观察点等等......这些工具专门用于加快CUDA程序的调试;你会发现它们很有用。
对于仅限Linux的方面感到抱歉。我们已经启动了Windows分支(以及Mac OS X端口),但工程负担已经足够大,足以强调我们的研究追求。如果有人有任何时间和兴趣,他们可能希望帮助我们为Windows提供支持!
希望这会有所帮助。
答案 1 :(得分:36)
您也可以检查gpuocelot项目,这是一个真正的模拟器,因为将模拟PTX(转换为CUDA代码的字节码)。
还有一个LLVM翻译器,测试它是否比使用-deviceemu时更快是有趣的。
答案 2 :(得分:36)
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
以前在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;
}
请注意,在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".
我在互联网上发现,如果我使用gcc-4.2
或类似古代而不是gcc-4.9.2
,错误可能会消失。我放弃了。
gpuocelot
Stringer的回答链接到一个非常古老的gpuocelot
项目网站。所以起初我认为该项目在2012年左右被放弃了。实际上,它在几年后就被放弃了。
以下是一些最新的网站:
我尝试在the guide之后安装gpuocelot。我在安装过程中遇到了几个错误,但我又放弃了。不再支持gpuocelot
,并且取决于一组非常特定的库和软件版本。
您可能会尝试从2015年7月开始关注this tutorial,但我不保证它能够正常运作。我还没有测试过它。
MCUDA翻译框架是一个基于Linux的工具 有效地将CUDA编程模型编译为CPU架构。
它可能有用。这是a link to the website。
它是在Windows 7和8上使用的模拟器。虽然我没有尝试过。它似乎不再被开发(最后一次提交日期为2013年7月4日)。
这是指向该项目网站的链接:https://code.google.com/archive/p/cuda-waste/
答案 3 :(得分:14)
CUDA工具包已经内置了一个,直到CUDA 3.0发布周期。我使用其中一个非常旧版本的CUDA,确保在使用nvcc编译时使用-deviceemu。
答案 4 :(得分:7)
https://github.com/hughperkins/cuda-on-cl允许您在OpenCL 1.2 GPU上运行NVIDIA®CUDA™程序(完全披露:我是作者)
答案 5 :(得分:3)
使用-deviceemu进行编程时要小心,因为nvcc在仿真模式下会接受这些操作,但在GPU上实际运行时则不然。这主要与设备 - 主机交互有关。
正如你所提到的,准备一些缓慢的执行。
答案 6 :(得分:-1)
GPGPU-Sim是一种GPU模拟器,可以在不使用GPU的情况下运行CUDA程序。 我创建了一个docker image,并为自己安装了GPGPU-Sim,以防万一。