无需硬件即可进行 CUDA 编程的 GPU 模拟器 [关闭]
Posted
技术标签:
【中文标题】无需硬件即可进行 CUDA 编程的 GPU 模拟器 [关闭]【英文标题】:GPU Emulator for CUDA programming without the hardware [closed] 【发布时间】:2011-03-06 11:12:29 【问题描述】:问题:是否有 Geforce 卡的模拟器可以让我在没有实际硬件的情况下编程和测试 CUDA?
信息:
我希望在 CUDA 中加快我的一些模拟,但我的问题是我并不总是在我的桌面上进行这项开发。我想在我的上网本上做一些工作,但我的上网本没有 GPU。现在据我所知,您需要一个支持 CUDA 的 GPU 来运行 CUDA。有没有办法解决这个问题?似乎唯一的方法是使用 GPU 模拟器(这显然会非常缓慢,但可以工作)。但无论有什么办法,我都想听听。
我在 Ubuntu 10.04 LTS 上编程。
【问题讨论】:
相关:AMD GPU:***.com/questions/12828268/…,英特尔集成显卡:***.com/questions/8193242/can-i-run-cuda-on-intel 【参考方案1】:此响应可能为时已晚,但无论如何都值得注意。 GPU Ocelot(我是其中的核心贡献者之一)如果您希望使用模拟器或 LLVM 后端,可以在不安装 CUDA 设备驱动程序 (libcuda.so) 的情况下进行编译。我已经在没有 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]:GPU Ocelot - https://code.google.com/archive/p/gpuocelot/ [2]:Ocelot 交互式调试器 - http://forums.nvidia.com/index.php?showtopic=174820【讨论】:
嗨 - 你还在吗?是否有关于如何在现有的 CUDA 构建环境中使用 Ocelot 构建程序的文档?另外,Ocelot 可以与 Thrust 一起使用吗? 更多最新的GPU Ocelot源代码可以通过GitHubgtcasl/gpuocelot找到。【参考方案2】:对于那些在 2016 年(甚至 2017 年)寻求答案的人...
免责声明
毕竟我没能模拟 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
曾经在 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".
我在 Internet 上发现,如果我使用 gcc-4.2
或类似古老的而不是 gcc-4.9.2
,错误可能会消失。我放弃了。
gpuocelot
Stringer 的答案有一个非常古老的gpuocelot
项目网站的链接。所以一开始我以为这个项目在 2012 年左右就被放弃了。实际上,几年后它就被废弃了。
以下是一些最新的网站:
GitHub; Project's website; Installation guide。我尝试在the guide 之后安装 gpuocelot。我在安装过程中遇到了几个错误,我又放弃了。 gpuocelot
不再受支持,它依赖于一组非常具体的库和软件版本。
您可以尝试从 2015 年 7 月开始关注 this tutorial,但我不保证它会起作用。我没有测试过。
MCUDA
MCUDA 翻译框架是一个基于 linux 的工具,旨在 有效地将 CUDA 编程模型编译为 CPU 架构。
它可能有用。这里是a link to the website。
CUDA 废物
它是在 Windows 7 和 8 上使用的模拟器。不过我还没有尝试过。它似乎不再开发(最后一次提交日期为 2013 年 7 月 4 日)。
这是项目网站的链接:https://code.google.com/archive/p/cuda-waste/
CU2CL
最后更新:12.03.2017
正如dashesy 在 cmets 中指出的那样,CU2CL 似乎是一个有趣的项目。它似乎能够将 CUDA 代码翻译为 OpenCL 代码。因此,如果您的 GPU 能够运行 OpenCL 代码,那么您可能会对 CU2CL 项目感兴趣。
链接:
CU2CL homepage CU2CL GitHub repository【讨论】:
太可惜了!由于不提供慢速路径,因此很难在任何机器上构建和测试应用程序。这意味着,开发人员应避免向 Cuda 添加依赖项。它仍然可供业余爱好者和研究人员用于一次性项目。不适用于客户的实际应用。 CU2CL 好像很活跃,也值得一看。 1.nvcc -deviceemu
4.得到CUDA Waste
工作
5.得到CU2CL
工作【参考方案3】:
您还可以查看gpuocelot 项目,这是一个真正的模拟器,因为 PTX(CUDA 代码转换为的字节码)将被模拟。
还有一个 LLVM 转换器,测试它是否比使用 -deviceemu 时更快会很有趣。
【讨论】:
可悲的是,这仅适用于 linux。其中,默认情况下我是 linux 用户。我做的少量开发是在 Windows 机器上进行的。 -deviceemu 已被弃用,因此 jskaggz 的答案不太合适。总的来说,这似乎是最好的答案。【参考方案4】:CUDA 工具包在 CUDA 3.0 发布周期之前内置了一个。如果您使用这些非常旧的 CUDA 版本之一,请确保在使用 nvcc 编译时使用 -deviceemu。
【讨论】:
CUDA 模拟器已被弃用,你最好看看 gpuocelot。 Plus CUDA 模拟器每个逻辑 CUDA 线程使用一个本机操作系统线程,这非常低效。【参考方案5】:https://github.com/hughperkins/cuda-on-cl 让您可以在 OpenCL 1.2 GPU 上运行 NVIDIA® CUDA™ 程序(完全公开:我是作者)
【讨论】:
我也可以在 CPU 上运行它吗? 仅限 GPU。需要 OpenCL 1.2 GPU 或更高版本。 您可能可以在 CPU 上运行它,使用 jrprice.com/Oclgrind ,但我想这可能不是您的意思 ;-) 。我猜 Coriander(新名称)可能也可以在 CPU OpenCL 上运行,但我从未对此进行过测试。可能需要一点刺激。【参考方案6】:使用 -deviceemu 进行编程时要小心,因为 nvcc 在仿真模式下会接受某些操作,但在 GPU 上实际运行时不会接受。这主要发生在设备-主机交互中。
正如你所说,为一些缓慢的执行做好准备。
【讨论】:
【参考方案7】:GPGPU-Sim 是一个 GPU 模拟器,可以在不使用 GPU 的情况下运行 CUDA 程序。 我创建了一个 docker image 并为自己安装了 GPGPU-Sim,以防万一。
【讨论】:
以上是关于无需硬件即可进行 CUDA 编程的 GPU 模拟器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章