Boids计算进入CPU测试领域 走近3DMark CPU Profile

2021-10-29 19:52徐昌宇
微型计算机 2021年17期
关键词:线程处理器个体

徐昌宇

3DMark是大家耳熟能详的显卡和系统游戏性能基准测试软件,一直以来其主要测试内容都偏向图形性能。不过近期3DMark推出了全新的CPU Profile测试模块,专门用于考察CPU性能。这个测试包含哪些内容?它是如何反映CPU性能的?又和CPU日常应用的性能有多少相关性呢?今天本文就和你一起来了解这些内容。

2014年,独立产品安全认证机构Underwriters Laboratories(下简称为UL)收购了Futuremark。在收购之后,U L宣布将加大在产品性能和测试领域的投入。随后我们看到了3DMark、PCMark家族不但衍生出Android、iOS等不同版本,还扩展到A I推理、照片编辑、视频编辑、VR测试等大量不同类型的测试领域。而这次我们关注的目标是新近推出的CPU Pr ofil e,它是3D M a rk家族中首次出现的专门针对CPU性能的测试模块,它的一些算法和测试内容非常有趣,值得探究。

价值29.99美元的测试模块

目前3DMark已成为一个庞大的测试模块的组合,UL宣称其为“适合所有硬件的基准测试”。3DMark现有3个版本,其中免费版本只包含Tim eSpy、Night Raid和Fire Strike三个测试模块,内容非常有限。如果要体验最新推出的CPU Profile,用户需要花费29.99美元购买进阶版3D Mark,该版本除了有前面提到的三个加上P o r tRoyal、Wild Life共五个图形相关的测试模块外,还包含一个压力测试模块以及5个独立测试功能区域的功能测试组合,再就是CPU Profile了。第三个版本是面向商业用户的,费用较高,本文在这里就不赘述了。

用户在购买了进阶版的3DMark后,完成安装并运行它,就可在主界面点击“更多测试”来选择想要运行的项目,其中就包含了本文的主角CPU Profile。但用户还需要点击下载并安装这个测试模块,才可以进行相关测试。

3DMark CPU Profile:怎么测?

在CPU Profile的页面可以看到一些简单的说明,比如其提到“每个CPU Profile测试都是物理计算和自定义模拟的组合。为了避免测试受到渲染性能的限制,我们测量每帧的平均模拟时间,而不是帧率。这个指标会被转换为每个测试的分数”。由此可知,CPU Profile和3DMark中的GPU测试有所不同。GPU测试一般是考察GPU每一秒钟能够输出多少帧画面,而CPU Profile则是考察CPU计算每一帧需要花费多少时间。这个时间会通过算法转换成统一的分数。

在测试方式上,CPU Profile一共包含了6个测试项目,其内容都是一样的,差别在于每次测试启用的CPU线程数量不同。它们所支持的C P U线程数量分别是当前处理器支持的“最多线程”、16线程、8线程、4线程、2线程和1线程。其中,“最多线程”考察的是处理器的最强性能,如果是8核心16线程的CPU,那么这个测试的成绩就和16线程测试的成绩基本相同。从实际测试情况来看,由于测试内容都是固定的,所以CPU所拥有的核心数量以及线程数量越多,测试速度就越快,测试分数就越高。最慢的则是单线程测试,用一个CPU线程来渲染所有的测试画面,需要等待较长时间才能完成。

接下来看看CPU Profile的核心测试内容和算法本质。它的测试包含了150帧画面,都是来自现实的游戏场景,但是完全不采用任何GPU渲染,而是全部通过CPU渲染。由于CPU相对G P U较小的计算规模和较低的计算能力,因此画面分辨率被大幅度降低。CPU Profile主要涉及的是一个名为“Boids”,也就是类鸟群体的计算框架,这个框架很容易被并行化计算,因此较为适合考察单线程到多线程的性能变化情况。

在计算机科学中,Boi ds类鸟群模拟是一个经典算法,它主要模拟大量物体的运动,且包含一定规则。一般来说,B oid s模拟中的每个个体必须遵循三个规则:首先是个体不能离开群体超过一定距离(不分离);其次是个体的运动模式相对群体中的其他单位是基本相近的(对齐);第三则是个体能够充分显示向群体移动的平均位置移动的期望(凝聚)。三个规则有些拗口,简而言之,就是我们经常在天空中看到的群鸟,呈现多变而有一定规律的运动,单个鸟儿并不会轻易离开鸟群,并且鸟群的整体移动方向呈现随机性。

Boids在实际的物理模拟中非常有用,除了鸟群外,鱼群也基本遵循这一运动规律,因此它也常被游戏用来模拟鱼群运动。如果对Boids模拟的数学参数中针对分离、对齐和凝聚的一些参数进行调整的话,它还可以准确地调整整个群体的运动状态,这也是其受欢迎的重要原因之一。

从模拟计算的角度来说,Boids模拟中的每个个体实际上都是独立的,因此它可以和其他个体进行并行计算。但是每个个体都需要了解周围的环境以及其他个体的方向和位置,才能准确地给出自己的下一步运行方向。这意味着如果Boids模拟中个体数量越多,那么它们需要找到影响自己下一步运动方向和趋势的其他个体也就越多。计算量会变得更大,并且这些数据也比较复杂,包含了不同个体之间的数据、运动的趋势等,需要从缓存、内存的多个存储区域多次轮询,并且几乎是随机的,这相当考验整个系统的计算能力。

由于Boids模拟的独特性,它应用的场合很多,这也使得其源代码有多个版本。不过目前绝大部分Boids模拟都不采用CPU计算,因为G PU对这种并行计算拥有先天优势,一些面向个人的Boids模拟GPU算法最大可以扩展至65000个单位。在CPU Profile的Boids模拟中,一半个体采用了SSE3优化的指令,另一半个体采用了AVX2优化的指令。如果CPU不支持AVX2的话,那么会全部使用SSE3。

最后再来看看测试成绩。由于所有测试都只模拟150幀,因此3DMark CPU Profile的总分算法是:总分=35000/平均帧时间。最终的成绩报告和前文描述的6个测试一样,CPUProfile将提供6个成绩数据,覆盖不同线程的情况。

测试结果:数据全面还带“激励”

在运行完相关测试后,CPU有多个版本。不过目前绝大部分Boids模拟都不采用CPU计算,因为G PU对这种并行计算拥有先天优势,一些面向个人的Boids模拟GPU算法最大可以扩展至65000个单位。在CPU Profile的Boids模拟中,一半个体采用了SSE3优化的指令,另一半个体采用了AVX2优化的指令。如果CPU不支持AVX2的话,那么会全部使用SSE3。

Profile会展示最终的性能结果页面。页面顶端分为三个部分,左侧是处理器型号,用户可以在线比较自己的CPU和同样使用该型号CPU的其他用户所测得的性能。中间的6个数据则是6个不同测试的成绩。右侧则标明了测试软件名称和版本号。下方还有温度、CPU频率、系统信息等内容。

测试成绩部分非常有趣。每个测试成绩除了分数外,还显示一个灰色、绿色的数据条。这个数据条的绿色部分是当前处理器的成绩,黑色的标记竖线表示所有同型号处理器的中位数成绩,灰色的部分表示用户可以通过超频获得的性能预期,可以看作“激励”部分。

分数中的常数“35000”是怎么来的?根据3DMark的说明,“35000”是“时间常数70ms”乘以“分数常数5000”。如果帧时间为70ms,那么最终结果可以得到5000分,实际上整个测试分数就是CPU实际完成的时间相对70ms的倍数值,再和5000这个常数相乘的结果。其次,对游戏来说,应该参考2线程、4线程或者8线程的性能(根据官方的描述),这样复杂的机制增加了一般用户考察处理器性能的难度:用户究竟如何在这些数据中快速选择自己想要的数据来考察最终的游戏性能呢?如果不是详细阅读本文的话,可能一般用户都没法看懂这个测试结果。

其他方面,3DMark CPU Profile还是做得不错的,包括提供了CPU温度、频率和不同测试的细节信息等,便于用户比较和参考。

对3DMark CPU Profile的一些疑问:真的能反映游戏性能?

在了解了测试内容、相关算法和测试结果后,本文對CPU Profile还有一些疑问:这个测试真的能反应CPU在游戏中的性能吗?

从3D Mar k的说明来看,CPUProfile测试中不同的线程指代不同的应用场景。比如1线程是原始的C P U性能考察;2线程和4线程适合《DOTA 2》《CS:GO》等DirectX9游戏;8线程则适合考察CPU在DiretcX12游戏中的性能情况,这一点和3D Mark TimeSpy相关联;16线程和更多的线程(如果有)考察的是计算性能,和游戏无关了。

从上述描述来看,CPU Profile似乎和游戏性能是相关的,正如3DMark中其他的图形测试项目一样,比如TimeSpy或者Fire Strike测试模块。不过关键问题在于,TimeSpy、Fire Strike的确是模拟现实世界游戏运行方式的测试模块,它们的技术应用和性能呈现都和最终游戏性能高度相关。但在CPU Profile上,这一点却存在疑问。

CPU Profile中的CPU测试算法也就是Boids模拟实际上更倾向底层工作负载模拟而不是游戏工作负载模拟。在计算负载方面,一般来说,对Boids模拟这种计算,至少需要2000个未经优化的个体才能使得CPU的一个线程饱和,那么针对目前比较高端的8核心16线程处理器而言,如果需要使用Boids模拟来填充CPU算力的话,在算法尽可能优化的情况下,则需要模拟50000~100000个个体。在实际的CPU Profile测试中,3DMark没有给出模拟的个体数量,但是目测应该在300个左右,这个数量显然是不能充分填充CPU计算负荷的。另外,目前绝大部分游戏也不太使用Boids模拟来构建游戏世界。即使使用了类似的模拟,一般也不会和人物角色进行互动。如果有互动的话,不会使用这么多个体,这也从侧面证明了CPU Profile在很大程度上不太能反映游戏中CPU的计算情况。

另外在测试方式的选择上,CPUProfile选择了150帧画面进行测试,无论CPU有多少线程,都是150帧画面。这里存在另一个问题,那就是如果CPU线程很多,并且支持类似频率Boost的技术,那么对多核心多线程的CPU而言,CPU Profile很难稳定地反映一个处理器的性能。因为对这类多核心处理器而言,150帧画面可能几秒钟就完成了,这意味着CPU可以在非常短的时间窗口内完成所有测试—这个时间窗口可以充分提高CPU频率,甚至由于时间太短,CPU温度还没提升起来。但是在实际的游戏运行中,C P U长期处于高负载、高温度的状态下,CPU频率应该会稳定在一个较低且比较小的范围内,而不是较高的Boost频率下。这意味着不同的测试条件、散热温度、测试时机都会影响到CPU Profile最后的性能呈现,这使得CPU Profile的测试成绩可重复性降低了。

3DMark官方也对这个问题进行了回复。他们认为设计CPU Profil e的目的是降低测试流程的长度,他们希望CPU Profile中8个线程的测试结果和Time Spy Extreme相关,并且固定150帧的画面意味着计算量是一致的。如果采用目前比较常见的固定测试时间来考察系统的计算数量的话(CPU Profile是固定计算数量考察计算完成时间),3DMark认为可能性能较差的系统的计算量过少。但是这其实也说不通,对于测试而言,只要多次重复稳定且可以取得平均值计算的话,计算固定时间自然也是没问题的。对于为什么只设置150帧,3DMark认为他们在这个范围内可以保证工作负载能够均衡地布置在所有的CPU线程上,如果超过的话可能会影响结果一致性。但实际上在游戏中,计算负载是不可能均衡地被放置在所有线程上的,这也是CPU Profil e的一个问题。

所以,3DMark CPU Profile和游戏性能的相关性是存疑的。如果以更合理的角度来判断,CPU Profile是3DMark建立的一个可以用于游戏性能评价的模拟机制,而不是一个识别CPU在游戏中性能呈现情况的测试工具。毕竟从“模拟机制”到“测试工具”,还有很长的道路要走。

总的来说,3DMark CPU Profile的现有版本在CPU性能测试方面给出了不错的模拟机制,但是其采用的算法和测试方法,和它想要反映出的CPU游戏性能可能还存在差距,并且分数结构设计也让人难以直接地了解到CPU的游戏性能。希望UL公司和3DMark开发团队能在未来的时间中注意到这些问题,并予以有针对性的改进。

猜你喜欢
线程处理器个体
关注个体防护装备
浅谈linux多线程协作
个体反思机制的缺失与救赎
How Cats See the World
Imagination的ClearCallTM VoIP应用现可支持Cavium的OCTEON® Ⅲ多核处理器
ADI推出新一代SigmaDSP处理器
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究
么移动中间件线程池并发机制优化改进
AItera推出Nios II系列软核处理器