gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:19 24 4
gpt4 key购买 nike

我正在使用 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 进行图形渲染会是更好的选择。

关于c++ - 在不使用互操作性的情况下并行运行 CUDA 和 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com