Opengl 在代码中共享GPU资源

Opengl 在代码中共享GPU资源,opengl,opencl,gpgpu,Opengl,Opencl,Gpgpu,我的程序使用OpenGL在屏幕上绘制。此任务强度较低,但对延迟敏感。我的程序的另一个CPU线程进行一些计算,这些计算非常密集,但优先级较低。我使用在GPU上运行的OpenCL实现了这个计算。从那时起,我观察到OpenGL绘图的视觉延迟太大 是否可以管理GPU加载或在GPU上安排任务?我使用AMD Radeon GPU。据我所知,OpenCL有“设备裂变”扩展,在这种情况下很有用,但它只支持CPU,不是吗 我关心的另一件事是AMD系统监视器显示GPU占用率为55%。因此,在我看来,应该有足够的资源

我的程序使用OpenGL在屏幕上绘制。此任务强度较低,但对延迟敏感。我的程序的另一个CPU线程进行一些计算,这些计算非常密集,但优先级较低。我使用在GPU上运行的OpenCL实现了这个计算。从那时起,我观察到OpenGL绘图的视觉延迟太大

是否可以管理GPU加载或在GPU上安排任务?我使用AMD Radeon GPU。据我所知,OpenCL有“设备裂变”扩展,在这种情况下很有用,但它只支持CPU,不是吗

我关心的另一件事是AMD系统监视器显示GPU占用率为55%。因此,在我看来,应该有足够的资源来运行OpenGL和OpenCL这两个部分,而不会出现停滞


更新。我用OpenCL内核函数做了一个小实验。全局工作大小被限制为足够小的数量,以保证在OpenCL内核运行时某些计算单元将处于空闲状态。为了弥补这一点,每个工作项都要做更多的工作。所以GPU现在占用更少,但内核工作时间更长。因此,OpenGL的速度变慢了。因此,看起来OpenGL绘图和OpenCL计算不能同时进行。我在哪里可以找到哪些卡支持此类功能的信息?NVIDIA GPU呢?

在我看来,您的问题可能是内存受限。这将在GPU上提供很多noop。GPU的主要瓶颈是对全局内存的读写,以及向GPU复制数据和从GPU复制数据

为了确保复制的数据不会超过需要,请查看如果在主机和设备内存之间来回复制,是否可以将任何共享数据直接放在GPU上。您正在处理多大的数据集?小数据集=GPU占用率低,CPU性能没有太大提高


大多数GPU一次只能完成一项任务,这意味着不能在所有GPU上同时绘制和计算。因此,在绘制之前,您必须等待计算完成,vica verca当然会引入一个小的延迟,如果您尽可能地绘制/不要以固定的FPS为目标,而是以尽可能高的FPS为目标。

OpenCL实现在单独测试时提供了显著的加速。然而,它与OpenGL的结合并不令人满意。如果我的GPU可以同时绘图和计算,我在哪里可以找到信息?我使用Radeon HD 58xx。“大多数GPU一次只能完成一项任务,这意味着你不能在所有GPU上同时绘制和计算。”这是一个有点不吉利的措辞,因为从技术上讲这是不正确的(所有合理的新GPU至少可以同时做三件不同的事情——处理一组工作组,退出并设置另一些工作组,以及运行DMA传输),因为驱动程序通过一个异步命令队列(或多个)来整合大部分工作组。因此,即使GPU在技术上一次只能做一件事,您也可以同时进行绘图(即提交)。