如何加快从内存向GPU转储mermory?

时间:2015-08-04 04:41:27

标签: opengl gpu gpgpu ogre

我正在PC上开发AR(增强现实),我有摄像头捕获,检测到某些标记功能,并将内存转储到GPU以渲染图像上的虚拟对象。我使用Ogre引擎。

/** Convenience function that blits a pixelbox from memory to the entire 
            buffer. The source image is scaled as needed.
            @param src      PixelBox containing the source pixels and format in memory
            @note Only call this function when the buffer is unlocked. 
        */
 mTexture->getBuffer()->blitFromMemory(mPixelBox);

对于720P图像输入,大约需要100ms,这对于渲染是不希望的。我有一个i5-4460 @ 3.20GHz,16G内存和Geforce GTX 660卡。

我知道CPU和GPU内存之间存在差距,但如果我只显示带有amcap的720P视频输入,只需30fps。是什么东西出现在屏幕渲染GPU?如何知道CPU和GPU内存的速度?

1 个答案:

答案 0 :(得分:0)

为了有效地做到这一点,你真的需要能够容忍几帧延迟。

在100毫秒时,当以30 FPS绘制时,这实际上是2个额外帧。这种行为可以通过驾驶员提前排队多个帧来解释。

称为预渲染帧(NVIDIA)/翻转队列大小(AMD)的驱动程序设置将增加CPU和GPU之间传输的任何数据的延迟。 3是AMD驱动程序的默认设置,目前尚不清楚NVIDIA的默认设置是什么(但您正在讨论的数字表明它也是3)。尝试将其设置为1,这将限制CPU / GPU并行性(可能降低帧速率),但会为您提供尽可能低的延迟。

有一个原因,司机不会将此设置发送到1,这让我回到原点。尝试接受几帧延迟,一切都会顺利运行 - 你很可能没有遇到I / O传输限制,只是并行问题。