【问题标题】:Is it possible to emulate a GPU for CUDA/OpenCL unit testing purposes?是否可以为 CUDA/OpenCL 单元测试目的模拟 GPU?
【发布时间】:2017-03-20 14:21:45
【问题描述】:

我想开发一个包含可在 CPU 或 GPU 上运行的算法的库。 GPU 可以是 Nvidia(那么算法将使用 CUDA)也可以不是(那么该算法将使用 OpenCL)。

我想在这个项目中模拟 GPU,因为可能:

  • 我将使用不同的计算机来开发软件,其中一些没有 GPU。

  • 软件最终会在有或没有GPU的服务器上执行,必须执行并通过单元测试。

有没有办法模拟 GPU 以进行单元测试?

在以下链接中:

GPU Emulator for CUDA programming without the hardware

他们展示了一个解决方案,但仅适用于 CUDA,而不适用于 OpenCL,并且他们提出的“GPUOcelot”软件不再得到积极维护。

【问题讨论】:

  • 在 CPU 上的性能显然会更差,但我需要知道是否有一种方法可以测试该算法是否有效,并且在未安装 GPU 时是否正确编程。在单元测试中,有一些库可以模拟数据库正在监听,例如 fakemongo github.com/fakemongo 模拟 mongodb 数据库监听以测试您的 sql 函数是否正确。
  • 在那个链接中,他们只谈论 cuda(而不是 opencl),他们提出的解决方案是一个没有积极维护的软件。
  • 使用 GPUOcelot 或其他功能性 GPU 模拟器可能会成为单元测试的问题,因为这些模拟器无法完全模拟 GPU 的并行性。因此,一些明显不正确且同步中断的代码将在模拟器中执行而不会出错。它肯定会比没有单元测试要好,但肯定比常规单元测试差。

标签: unit-testing cuda opencl gpu emulation


【解决方案1】:

这取决于您对仿真的含义。您无法模拟 GPU 的速度。

GPU 在架构上与 CPU 非常不同,有很多工作线程(1000 秒、10000 秒……),这就是我们使用它的原因。即使您并行化代码,CPU 也只能有几个线程。它们也有不同的指令集。

但是,您可以使用特殊软件模拟执行,例如用于 NVIDIA GPU 的 NVEmulate 和用于 AMD 的 OpenCL Emulator-Debugger

一个相关问题:GPU Emulator for CUDA programming without the hardware,其中接受的答案建议 gpuocelot 进行 CUDA 仿真。

【讨论】:

  • 非常感谢,这就是我要找的。我的计算机中有一个 GPU,但有时我更喜欢使用没有 GPU 的旧笔记本电脑在沙发上编写代码,我需要知道代码是否有效。
  • @Rob 在这种情况下,您可能想看看 rCUDA。它允许您从没有 GPU 的节点访问远程 GPU。见:rcuda.net/index.php/what-s-rcuda.html
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 2015-09-10
  • 2013-07-28
  • 2018-12-05
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2013-08-03
相关资源
最近更新 更多