运行 来自被动(非活动)GPU 的 CUDA GUI 示例

Running CUDA GUI samples from a passive (inactive) GPU

我使用 this guideGeForce GTX 750 Ti 上成功地 运行 CUDA 程序,同时使用 AMD Radeon HD 7900 作为渲染设备(实际连接到显示器);例如,Vector Addition 样本 运行 很好。但是,我只能 运行 不产生视觉输出的应用程序。例如,Mandelbrot CUDA 示例没有 运行 并且失败并显示错误:

Error: failed to get minimal extensions for demo:
  Missing support for:  GL_ARB_pixel_buffer_object
This sample requires:
  OpenGL version 1.5
  GL_ARB_vertex_buffer_object
  GL_ARB_pixel_buffer_object

错误源于询问 glewIsSupported() 这些扩展。有什么方法可以 运行 一个应用程序,比如这些 CUDA 示例,以便 CUDA 操作像往常一样在 GTX 上 运行 但 Window 是在 Radeon 卡上绘制的?我试图说服 Nsight Eclipse 进行 运行 远程调试会话,将我自己的 PC 作为远程主机,但其他方法立即失败。这应该真的有效吗?可以使用VirtualGL吗?

一些涉及图形的 NVIDIA CUDA 示例(例如 Mandelbrot 示例)实现了高效的渲染策略:它们将 OpenGL 数据结构(在 Mandelbrot 的情况下为像素顶点对象)绑定到包含模拟数据的 CUDA 数组并直接从 GPU 渲染它们。这避免了在模拟的每次迭代结束时将数据从设备复制到主机,并导致闪电般快速的渲染阶段。

回答你的问题:NVIDIA 样本 原样 需要 运行 在执行模拟阶段的同一 GPU 上进行渲染阶段,否则,GPU处理图形的数据不会在其内存中呈现。

这不排除可以修改示例以使用多个 GPU。应该可以在每次迭代结束时将模拟数据复制回主机,然后使用自定义方法渲染它,甚至通过网络发送它。这将需要 (1) 通过分离和制作独立的模拟和渲染阶段来修改代码,以及 (2) 接受由此导致的每秒帧数的巨大损失。