gpt4 book ai didi

graphics - CPU 什么时候在 GPU 上等待?

转载 作者:行者123 更新时间:2023-12-04 17:19:31 29 4
gpt4 key购买 nike

在受 GPU 限制的应用程序中,我想知道 CPU 将在什么时候等待 GPU 完成渲染。 DirectX 和 OpenGL 有什么不同?

运行一个类似于下面的例子,显然 CPU 不会跑掉——在任务管理器中,CPU 使用率(如果是单核机器)将低于 100%。

While (running){

Clear ();

SetBuffers (); // Vertex / Index

SetTexture ();

DrawPrimitives ();

Present ();
}

最佳答案

简要总结一下,您可能会在 Present() 中看到等待,但这实际上取决于 Present() 调用的内容。

通常,除非您特别说要通知 GPU 何时完成,否则您最终可能会在驱动程序的输入缓冲区填满(对您来说是随机的)点等待。将 GPU 驱动程序和卡视为一条很长的管道。您可以在一端投入工作,并最终在一段时间后显示出来。您可能能够在管道填满之前将几帧的命令放入管道中。该卡可能需要花费大量时间来绘制图元,但您可能会看到 CPU 在几帧之后等待某个时间点。

如果您的 Present() 调用包含相当于 glFinish() 的内容,则整个管道必须在该调用返回之前排空。因此,CPU 将在那里等待。

我希望以下内容会有所帮助:

Clear ();

使当前缓冲区中的所有像素都改变颜色,所以 GPU 正在做
工作。查找 GPU 的清晰像素/秒
率以查看这应该花费什么时间。
SetBuffers (); 
SetTexture ();

司机可能会在这里做一些工作,但一般它想等到你
实际上做绘图以使用这些新数据。无论如何,GPU 不做
这里很多。
DrawPrimitives ();

现在这里是 GPU 应该完成大部分工作的地方。取决于
您将受到顶点/秒或像素/秒的限制。也许你有
昂贵的着色器,您将受到着色器指令/秒的限制。

但是,您可能不会将此视为 CPU 等待的地方。司机
可能会为您缓冲命令,并且 CPU 可能会继续运行。
Present ();

在这一点上,GPU 工作是最小的。它只是改变一个指针以从不同的缓冲区开始显示。

然而,这可能是 CPU 在 GPU 上等待的地方。根据您的 API,“Present()”可能包含 glFlush() 或 glFinish() 之类的内容。如果是这样,那么您可能会在这里等待。

关于graphics - CPU 什么时候在 GPU 上等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964856/

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