我遇到的情况是我在一台只有一张GPU卡的服务器上同时运行几个OpenGL程序。它们在FPS为60时工作正常。
但问题是,当我重启其中一个时,其他人的FPS下降了很多,可能是3倍甚至1倍
如果我同时重启2个或更多,可能会更糟,FPS只能是个位数
我想知道是否有任何OpenGL初始化(创建上下文/设置纹理)操作可能会花费很多GPU资源?
环境:Linux(Ubuntu 14.04)带X11窗口系统的NVIDIA GTX 770
答案 0 :(得分:0)
大多数OpenGL实现确实在CPU上执行了一些操作。最值得注意的是,当向GPU发送图像时,在CPU上完成任何必要的格式转换(即,如果图像数据尚未处于可由GPU处理的格式)。此外,每个携带批量数据(纹理,渲染缓冲区,数组缓冲区对象)的OpenGL对象通常都需要系统内存中的卷影副本(GPU内存大部分就像一个缓存)并初始化这也是一项代价高昂的操作。
将大量数据发送到GPU会占用总线带宽。虽然由于使用DMA传输而没有真正击中CPU或GPU,但它会消耗任何一侧的内存带宽,从而影响任何一方的内存密集型操作。