从被动(非主动)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 示例的主要内容,如果未能解决你的问题,请参考以下文章