问题:是否有Geforce卡的仿真器,可以让我在没有实际硬件的情况下编程和测试CUDA?
信息:
I'm looking to speed up a few simulations of mine in CUDA, but my problem is that I'm not always around my desktop for doing this development. I would like to do some work on my netbook instead, but my netbook doesn't have a GPU. Now as far as I know, you need a CUDA capable GPU to run CUDA. Is there a way to get around this? It would seem like the only way is a GPU emulator (which obviously would be painfully slow, but would work). But whatever way there is to do this I would like to hear.
I'm programming on Ubuntu 10.04 LTS.
这种反应可能为时已晚,但无论如何都值得注意.如果您希望使用仿真器或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内核,设置断点和观察点等等......这些工具专门用于加快CUDA程序的调试; 你会发现它们很有用.
对于仅限Linux的方面感到抱歉.我们已经启动了Windows分支(以及Mac OS X端口),但工程负担已经足够大,足以强调我们的研究追求.如果有人有任何时间和兴趣,他们可能希望帮助我们为Windows提供支持!
希望这可以帮助.
[1]:GPU Ocelot - https://code.google.com/archive/p/gpuocelot/
[2]:Ocelot Interactive Debugger - http://forums.nvidia.com/index.php?showtopic=174820
毕竟我没能模仿GPU.
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__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<< >>(); 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
斯特林格的回答链接到一个非常古老的gpuocelot
项目网站.所以起初我认为该项目在2012年左右被放弃了.实际上,它在几年后被放弃了.
以下是一些最新的网站:
GitHub ;
项目网站 ;
安装指南.
我试着按照指南安装gpuocelot .我在安装过程中遇到了几个错误,但我又放弃了.gpuocelot
不再受支持,取决于一组非常特定的库和软件版本.
您可能会尝试从2015年7月开始学习本教程,但我不保证它会起作用.我没有测试过它.
MCUDA转换框架是一个基于linux的工具,旨在将CUDA编程模型有效地编译为CPU架构.
它可能有用.这是该网站的链接.
它是在Windows 7和8上使用的模拟器.我没试过它.它似乎不再开发(最后一次提交日期为2013年7月4日).
以下是该项目网站的链接:https://code.google.com/archive/p/cuda-waste/
最后更新:12.03.2017
正如dashesy在评论中指出的那样,CU2CL似乎是一个有趣的项目.它似乎能够将 CUDA代码转换为OpenCL代码.因此,如果您的GPU能够运行OpenCL代码,那么CU2CL项目可能是您感兴趣的.
链接:
CU2CL主页
CU2CL GitHub存储库
您还可以检查gpuocelot项目,它是一个真正的模拟器,因为将模拟PTX(转换为CUDA代码的字节码).
还有一个LLVM转换器,测试它是否比使用-deviceemu时更快是有趣的.
CUDA工具包内置了一个,直到CUDA 3.0发布周期.我使用其中一个非常旧版本的CUDA,确保在使用nvcc编译时使用-deviceemu.
https://github.com/hughperkins/cuda-on-cl允许您在OpenCL 1.2 GPU上运行NVIDIA®CUDA™程序(完全披露:我是作者)