有一些我从未理解过的东西。像GTA IV这样的大型PC游戏如何使用50%的CPU并以60fps的速度运行,而旋转茶壶@ 60fps的DX演示则要使用高达30%的速度?
有一些我从未理解过的东西。像GTA IV这样的大型PC游戏如何使用50%的CPU并以60fps的速度运行,而旋转茶壶@ 60fps的DX演示则要使用高达30%的速度?
Answers:
一般来说,这是因为
例如,您可以进行的一项简单优化就包括不实际尝试绘制看不见的东西。考虑一个复杂的场景,例如侠盗猎车手IV中的城市景观。渲染器实际上并未渲染所有建筑物和结构。相反,它仅渲染摄像机可以看到的内容。如果您可以飞向相同建筑物的后部,面对原始相机,则会看到半建的挖空的外壳结构。相机看不到的每个点都不会被渲染-因为您看不到它,所以无需尝试向您展示它。
此外,当您针对一组特定的硬件进行开发时,存在优化的指令和特殊技术,以实现更好的加速。
您问题的另一部分是演示为什么要使用这么多CPU:
...而以60fps旋转茶壶的DX演示使用高达30%的速度?
图形API的演示(例如dxdemo
)通常回退到所谓的软件渲染器当您的硬件不支持演示漂亮示例所需的所有功能时。这些功能可能包括阴影,反射,光线跟踪,物理等。
为了模仿API的所有功能,这模仿了一个不太可能存在的功能齐全的硬件设备的功能。但是由于硬件实际上并不存在,因此可以在您的CPU上运行。这比委派显卡要低得多-因此,您的CPU使用率很高。
耐心,技术能力和耐力。
第一点是,DX演示主要是一种教学辅助工具,因此这样做是为了清楚起见而不是执行速度。
这是一个相当大的话题,但是游戏开发主要是在几乎病理的程度上了解数据和执行路径。
3D游戏擅长欺骗您的眼睛。例如,存在一种称为屏幕空间环境光遮挡(SSAO)的技术,该技术通过遮盖场景中接近曲面不连续性的那些部分来提供更逼真的感觉。如果您查看墙的拐角,在大多数情况下,它们会比中心稍微暗一些。
使用光能传递可以达到非常相同的效果,这基于相当精确的模拟。光能传递还将考虑反射光等带来的更多影响,但是它在计算上非常昂贵-这是一种射线追踪技术。
这只是一个例子。用于实时计算机图形的算法有数百种,它们基本上是基于良好的近似值,通常会做出很多假设。例如,必须根据速度,摄像机的典型位置以及场景几何形状的变化量非常仔细地选择空间排序。
这些“优化”是巨大的 -您可以高效地实现算法,并使它的运行速度提高10倍,但是选择能产生相似结果(“作弊”)的智能算法可以使您从O(N ^ 4)变为O(N log(N))。
优化实际的实现是使游戏更加高效的原因,但这仅仅是线性优化。
哎呀!
我知道这个问题很老,但是令人兴奋的是没有人提到VSync!
您将游戏的CPU使用率为60fps与茶壶演示的CPU使用率为60fps进行了比较。
两者是否都以60fps的速度运行(或多或少),这不是很明显吗?这导致了答案...
两个应用程序都启用了vsync才能运行!这意味着(降低)渲染帧速率被锁定到显示器的“垂直空白间隔”。图形硬件(和/或驱动程序)将仅以最大速度渲染。60fps。60fps = 60Hz(Hz =每秒)刷新率。因此,您可能会使用过时的,闪烁的CRT或普通的LCD显示器。在以100Hz运行的CRT上,您可能会看到高达100Hz的帧速率。VSync也以类似的方式应用于LCD显示器(它们通常具有60Hz的刷新率)。
因此,茶壶演示实际上可以更有效率地运行!如果它使用30%的CPU时间(而GTA IV则是50%的CPU时间),则它可能每帧使用更少的CPU时间,并且等待下一个垂直空白间隔的时间更长。要比较两个应用程序,您应该禁用vsync并再次进行测量(两个应用程序都将测量更高的fps)。
有时可以禁用vsync(大多数游戏在其设置中都有一个选项)。有时,当禁用vsync时,您会看到“撕裂的假象”。
您可以在Wikipedia上找到它的详细信息以及使用它的原因:http : //en.wikipedia.org/wiki/Vsync
尽管这里的许多答案都很好地说明了我将如何回答一个简单的问题,为什么
最好的例子(可能是最著名的例子之一)是Id软件。他们很早就意识到,在指挥官基恩(Ken)的时代(早于3D),想出一种巧妙的方法来实现目标1,即使它依靠图形上优于竞争,这将使您的游戏脱颖而出。确实如此,但他们进一步意识到,他们不必自己提出新游戏和内容的方式,而是可以许可该技术,从而从其他人那里获得收入,同时能够开发下一代引擎,从而再次超越竞争对手。 。
这些程序员的能力(加上精通业务)使他们变得富有。
话虽如此,但不一定是金钱会激励这些人。可能有想要实现的愿望。他们在初期所赚的钱只是意味着他们现在有时间致力于自己的享受。并且尽管许多人都具有外部兴趣,但几乎所有人仍然在编程,并尝试找出比上一次迭代做得更好的方法。
简单地说,编写茶壶演示的人可能遇到以下一个或多个问题:
最后一个听起来可能很刺耳2,但显然有些人比其他人更好,钟形曲线有时具有极端,并且倾向于被该技能所做的相应极端所吸引。
实际上,目标偏低可能是主要原因。茶壶演示的目标就是演示。但是不能演示程序员的技能3。这将是(大型)操作系统的一个小方面的演示,在本例中为DX渲染。
对于观看该演示的人来说,只要看起来足够好,它使用的CPU就会超过所需的 CPU 数量。如果没有受益者,将没有动力消除浪费。相比之下,游戏会希望有空闲周期来获得更好的AI,更好的声音,更多的多边形,更多的效果。
由于一些原因
编辑:给几个数字
带有NV-6800 GPU的2.8 Ghz Athlon-64。结果是:
通过给出的所有合格和良好答案,仍然没有找到一个重要的问题:Windows的CPU使用率计数器不是很可靠。我猜想这个简单的茶壶演示仅在其空闲循环中调用呈现功能,从而阻止了缓冲区交换。
现在,Windows CPU利用率计数器仅查看每个进程中花费了多少CPU时间,而不是该CPU时间的使用方式。尝试添加一个
Sleep(0);
从渲染函数返回后,进行比较。
任何答案的核心应该是-3D引擎执行的变换主要是通过加法和乘法(线性代数)(没有分支或跳转)指定的,绘制单个框架的操作通常以这样的add-mul的工作可以并行完成。GPU内核是非常好的add add-mul,它们具有数十个或数百个add-mull内核。
CPU只剩下做简单的事情了,例如AI和其他游戏逻辑。
像GTA IV这样的大型PC游戏如何使用50%的CPU并以60fps的速度运行,而旋转茶壶@ 60fps的DX演示则要使用高达30%的速度?
虽然GTA很有可能比DX演示更有效率,但是用这种方法来测量CPU效率实际上已被打破。效率可以通过例如您在给定时间内完成多少工作来定义。一个简单的反例:每个逻辑CPU产生一个线程,并在其上运行一个简单的无限循环。您将获得100%的CPU使用率,但效率不高,因为没有完成任何有用的工作。
这也导致了一个答案:游戏如何高效?在编写“大型游戏”时,会花大力气在各个方面优化游戏(如今通常还包括多核优化)。至于DX演示,它的目的不是快速运行,而是演示概念。
我认为您应该看一下GPU的利用率,而不是CPU。。。我敢打赌,GTA IV中的显卡比Teapot示例中的要忙得多(实际上应该是闲置的)。
也许您可以使用类似此监视器的内容来检查以下内容:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
此外,还需要考虑帧速率,也许茶壶示例正在全速运行(可能为1000fps),并且大多数游戏都限于监视器的刷新频率(大约60fps)。
查看有关vsync的答案;这就是为什么它们以相同的帧速率运行。
其次,CPU在游戏中处于领先地位。一个简单的解释是,主游戏循环只是一个无限循环:
while(1) {
update();
render();
}
即使您的游戏(或本例中的茶壶)没有做很多事情,您仍然在循环中消耗CPU。
GTA中50%的CPU比演示中的30%的“生产力更高”,因为它根本没有做太多事情。但是GTA正在更新大量细节。即使在演示中添加了“睡眠(10)”,也可能会使CPU减少一吨。
最后看一下GPU的使用情况。该演示可能在现代视频卡上的花费不到1%,而GTA在游戏过程中可能会占据多数。
简而言之,您的基准和测量结果不准确。
我认为答案的重要部分在这里缺失。大多数答案告诉您“了解您的数据”。事实是,您必须以相同的方式和相同的重要性来了解您:
但是,最重要的是,使用当前的现代计算机,您将无法播放>> 30ftp的真实1080p视频(64位中的单个1080p图像将占用15 000 Ko / 14.9 MB)。这样做的原因是由于采样/精度。电子游戏永远不会对像素,图像,数据等使用双精度(64位),而是使用较低的自定义精度(〜4-8位),有时使用插值技术重新缩放精度较低,以进行合理的计算时间。
还有其他技术,例如剪切数据(使用OpenGL标准和软件实现),数据压缩等。还请记住,就硬件功能而言,当前的GPU可以比当前的CPU快300倍以上。但是,好的程序员可能会获得10-20倍的系数,除非您的问题得到了充分优化和完全可并行化(尤其是任务可并行化)。
根据经验,我可以告诉您优化就像一条指数曲线。为了达到最佳性能,所需时间可能非常重要。
因此,回到茶壶上,您应该了解几何图形如何表示,采样以及在GTA 5中具有什么样的精度Vs(就几何图形/纹理而言,最重要的是细节(精度,采样等))。