从被动(非主动)GPU 运行 CUDA GUI 示例

Posted

技术标签:

【中文标题】从被动(非主动)GPU 运行 CUDA GUI 示例【英文标题】:Running CUDA GUI samples from a passive (inactive) GPU 【发布时间】:2015-04-13 12:50:52 【问题描述】:

我成功地在GeForce GTX 750 Ti 上运行了CUDA 程序,同时使用AMD Radeon HD 7900 作为渲染设备(实际上连接到显示器)使用this guide;例如,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吗?

【问题讨论】:

【参考方案1】:

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

回答您的问题:NVIDIA 样本原样需要在执行模拟阶段的同一个 GPU 上运行渲染阶段,否则处理图形的 GPU 将没有数据在它的内存中渲染。

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

【讨论】:

以上是关于从被动(非主动)GPU 运行 CUDA GUI 示例的主要内容,如果未能解决你的问题,请参考以下文章

如何设置FTP的主动模式和被动模式

FTP主动模式和被动模式的区别

ftp主动/被动模式+虚拟账号配置

ftp主动模式和被动模式

什么是ftp主动模式和被动模式

是否可以在AMD GPU上运行CUDA?