我不知道最新的技术发展情况,但我可以提供一些有限的东西供参考,这可能会有所帮助。
这个问题的被接受答案已经过时了。在这里,关于在不支持CUDA或OpenCL的机器上编译和运行GPU代码的问题已经出现了多次(但可悲的是,它经常被视为离题)。这个答案也适用于那些问题。
许多答案都涉及到未维护的软件解决方案。似乎只有两个答案经得起时间的考验,将其视为mu question。
- 使用真正的GPU-即如果您还没有一个便宜的cuda卡,就购买一个。
- 在云中租用别人的GPU
然而模拟器确实存在。
GPU虚拟化也在维基百科页面上得到了很好的覆盖。有强烈的支持,使虚拟机使用主机硬件。
Docker和VirtualBox都支持GPU透传。
模拟的原因
- 学习并跟上CUDA和OpenCL的变化
- 估计各种API对性能的影响。
- 测试您的代码在不同平台上的工作情况。
- 作为无法访问的硬件的代理(如本问题所述)
模拟的类型
(感谢https://stackoverflow.com/users/13130048/sebastian提供这两个观点)
对于第二种情况,您可能不仅需要GPU虚拟化,还需要进行额外的优化处理。
为什么模拟器越来越少,难以经受时间的考验?
- GPU价格逐渐降低,但高性能代价不菲。
- GPU(更不用提TPUs和FPGAs)正在快速发展。
- 一些硬件技巧被竞争对手保密,因此模拟实际硬件变得困难。
- CUDA 和 openCL 标准也在变化,但变化较慢。
可以说,更多了解这些内容的程序员是必要的。编译代码并不会直接运行和测试,这显然是不专业的。因此,在你没有所有可能或有趣的硬件组合物理上可用的情况下,模拟应运而生。
既然如此,令人惊讶的是,许多这些模拟项目都未经得住时间的考验,也未经GPU制造商的认可或提供。
但是,仍有一些活跃的模拟项目存在。
活跃的GPU模拟项目
截至2022年10月,至少有两个活跃的模拟项目在维护中:
我无法确定它们的好坏以及与使用真实GPU(自己的或租用的)相比使用的普遍程度。
荣誉提及
Cuda到OpenCL源代码转换器。这些似乎是维护良好的,但它们本身不是仿真器。
为什么这不是一个解决的问题?
有许多挑战需要克服。我的看法是:
- 提供模拟特定版本CUDA或openCL标准的运行时
- 提供针对此运行时的编译器(理想情况下为gcc或clang)
- 获得供应商的支持(例如Nvidia或kronos group)
- 获得社区的支持(即良好的用户群和贡献者集合)
- 将支持构建到流行的仿真环境中(例如virtualbox)
你也可以认为,几乎所有从事这个领域的人都可以访问真正的GPU,因此这并不是必要的。
第3点的供应商在点1、2和4方面做得很好。
仿真器必须在此基础上建立自己的思路。
这是一场艰苦的斗争。我希望并相信未来会取得成功。
看看virtualbox,我能找到的最后一次讨论是2011年。
看似已经停止维护的项目
这些项目曾在之前的提问和回答中被提到过。
其他看似已经停止维护的项目:
早期(已过时)问题: