繁体   English   中英

在不使用互操作性的情况下并行运行CUDA和OpenGL

[英]Running CUDA and OpenGL in parallel without using interoperability

我正在使用nVidia Tesla C2050 GPU构建实时信号处理和显示系统。 该设计使信号处理部分可以作为单独的程序运行,并使用CUDA进行所有计算。 同时,如果需要,我可以启动一个单独的显示程序,该程序使用OpenGL显示处理后的信号。由于设计是将这些过程作为独立的进程运行,所以我没有任何CUDA-OpenGL互操作性,这两个程序通过UNIX流套接字。

信号处理程序大部分时间都使用GPU来处理CUDA。我每隔50毫秒刷新一次OpenGL中的帧,而CUDA程序每次运行约运行700毫秒,而两个连续运行通常间隔30-40毫秒。 当我一次运行一个程序(即仅运行CUDA或OpenGL部件)时,一切运行正常。 但是,当我一起启动程序时,显示内容也不应该是预期的,而CUDA部分会产生正确的输出。 我已经检查了套接字的实现,并且我对套接字可以正常工作充满信心。

我的问题是,因为我只有一个GPU,并且没有CUDA-OpenGL互操作性,并且两个进程都定期使用GPU,所以CUDA内核和OpenGL内核之间的上下文切换是否可能相互干扰。 我是否应该将设计更改为只有一个程序才能运行具有CUDA-OpenGL互操作性的零件。

计算能力5.0及以下的设备无法同时运行图形和计算。 Tesla C2050不支持任何形式的抢占,因此在CUDA内核执行GPU时,不能将其用于渲染OpenGL命令。 CUDA-OpenGL互操作无法解决此问题。

如果您只有一个GPU,那么最好的选择是将CUDA内核分解为较短的启动时间,以便GPU可以在图形计算之间进行切换。 在上述情况下,CUDA内核执行的时间不应超过50毫秒-GLRenderTime。

使用第二个GPU进行图形渲染将是更好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM