综述
PCMark2002是由MadOnio公司开发的一个组件式的系统性能测试软件。PCMark2002采用开放式的源代码来构建其核心测试算法,但MadOnio是针对系统的某些特殊性质来选取那些测试算法的,也就是说,PCMark2002的测试成绩并不能代表整机系统在实际应用场合当中的性能表现。MadOnio方面在关于PCMark2002的官方说明文档当中指出,PCMark2002旨在为用户提供了一个针对PC系统各部分子系统性能测试的简易测试平台,主要针对主流家用娱乐性质的个人电脑市场和商业用机市场(包括手提电脑、台式机、工作站等不同级别的PC系统)。在此之前,曾经有文章质疑PCMark2002当中CPU性能测试部分的可靠性,我并不赞同这种观点,但是我觉得并不能就通过表面的数据来说明这个问题,当中有许多值得研究的地方。

大家是否注意到在此之前的所有文章都欠缺对PCMark2002这个测试软件本身的全面深入分析,很多都只是拿PCMark2002来跑个分数,做做简单的性能测试对比。而这次,本文将对PCMark2002的测试数据做全面的分析,测试系统基于Intel的PentiumIII处理器和Pentium4处理器平台。测试的方法:这次的测试是严格的针对CPU性能测试部分和内存子系统性能测试部分的测试,完全不包括磁盘子系统和图形子系统方面的性能测试,在这次测试当中,我们注意到:在不同的处理器平台上,我们的磁盘子系统性能测试结果和图形子系统的性能测试结果十分接近(我们使用相同的硬盘、相同的显卡),性能差别微乎其微,性能表现就在同一个水平上,这也说明了这个组件式的测试软件各个测试组件之间保持了高度的独立性。

提醒大家一句:不要拿PCMark2002和那些强调系统实际性能表现的测试软件(比如我们常常在测试报告里面看到的Winstone、SYSMark等的测试软件)相比,两者是完全不同的概念。Winstone、SYSMark等的测试软件强调的是整机系统在实际应用场合当中的性能表现,但是这些测试软件并不能清晰体现各个整机系统在组件上的细微差别所造成的性能差异(比如说,我们只是更换了内存,要是用Winstone、SYSMark就很难体现出好品质的内存所带来的性能增幅了)。另一方面,PCMark2002则尽可能地细分所有的部件,比如说CPU的二级缓存的速度和大小、CPU核心运算速度、系统前端总线频率等在PCMark2002里面都是相对独立的,在文章稍后的部分,我们将逐一介绍。
虽然PCMark2002能够尽可能地体现不同组件所带来的性能差异,但是一个突出的问题也随之而来:PCMark2002的测试结果是否能够客观的反映整机系统的实际性能呢?为什么会有这个问题呢?其实大家细想一下也知道故中缘由了:内存子系统的性能直接影响到CPU性能的发挥,因此,脱离内存子系统而单独考虑CPU的性能是非常不实际的做法,因为这样做只能得出一个毫无实际意义的结果。因此,当考虑到整机性能表现的时候,我们就必须同时考虑我们的CPU性能和内存子系统的性能,因此本文关注的重点也是系统的CPU性能测试分数和内存子系统性能测试分数。
PCMark2002测试主要针对PC系统的四大子系统的性能:CPU系统、内存子系统、磁盘子系统、图形子系统。图形子系统可以单独对显示速度或者画面质量进行测试,也可以同时对这两个项目进行测试。还有一个附加的性能测试项目(“Crunch”测试,粉碎性测试,^_^),这是一个测试系统在满负荷状态下性能表现的测试项目。这项测试首先不断改变临时文件夹的位置,使得磁盘一直处于读写状态,然后运行测试项目(我们可以选择测试运行的次数),如果我们选择超过一次的运行次数,我们将得到那么多次测试结果的平均测试数值,这比Winstone的测试方式更能够折磨机器(Winstone也只能让我们设置到最高5次的运行次数)。这项测试有个美中不足的地方:没有保存我们的系统设置的功能,因此每次使用这个测试的时候,我都特别将测试项目设置为同一的样式。而对于本文来说,鉴于我们只是初步分析,因此我们都只是运行一次这个测试项目,并没有将运行次数设置为更高的数值。
顺便说一句,我还用PCMark2002测试了一下几款工作频率为300MHz的旧式处理器(包括PentiumII、CeleronA和Celeron)的CPU性能表现,让我们来看看这些旧式处理器在PCMark2002当中有什么样的表现吧。
CPU系统测试:
PCMark2002包括了六种不同的CPU性能测试算法。这些算法对处理器的整数运算单元和浮点数运算单元都有较高的性能要求,并且对Intel的SSE和SSE2指令集做了相应的优化。PCMark2002采用C++来描述测试算法,并使用了微软的Visual C++和Intel的C++编译器进行编译,一些由特定的代码构成的测试组件是否被执行则视乎我们采用何种CPU了(比如说,如果我们的CPU支持SSE指令集,那么PCMark2002才会执行那些对SSE做相应优化的测试组件),PCMark2002通过这样的方式以确保被测试的处理器发挥其最佳的性能。
PCMark2002的帮助文档里面提到:我们对Intel的SSE指令集和SSE2指令集做出了相应的优化。在某些测试里面,如果采用微软的Visual C++来编译我们的测试算法,我们将得到更快的测试结果,而某些情况下,我们采用Intel的C++编译器所编译出的测试组件能够获得更好的测试结果,因此,我们对Intel的SSE指令集和SSE2指令集做出了最佳的优化,AMD和Intel双方支持SSE指令集和SSE2指令集的处理器都将获得相应的优化,以求发挥CPU的最佳性能。
六种不同的针对CPU性能测试的算法:
1、JPEG解压缩算法:在10秒内连续解压缩3幅JPEG图片(大小分别为149KB、771KB、889KB)来计算单位时间内被还原的象素值的数量,测试结果以MPixel/s(每秒兆象素)的单位给出。在PCMark2002的帮助文档里面提到,用于测试的图片文件都是来自于由JPEG官方组织制定的标准JPEG图象数据库(版本号为6b)。
2、Zlib压缩算法:在10秒内尽可能的对所测试的文件进行多次的压缩,所测试的文件为一个887KB的JPEG图片文件、一个1468KB的文本文件、一个1280KB大小的可执行文件。测试所用的压缩算法为Zlib官方组织公布的LZ77压缩算法,处理器的整数运算性能在这项测试里面起到相当重要的作用。
3、Zlib解压缩算法:将上述测试当中形成的压缩包文件在10秒内进行尽可能多次的解压。压缩测试和解压缩测试的测试结果均以MB/s(每秒兆字节)的单位给出。
4、文本搜索算法:在10秒内,在一个相当大的文本文件里搜索特定的字符串,测试所用的算法为Boyer-Moore算法。测试的结果以成功搜索次数的形式给出。整数运算在此起到相当重要的作用。
5、音频转换算法:采用微软的MP3解码器将一个500KB的MP3音频文件还原为WAV文件,并压缩为Ogg Vorbis格式的音频文件。并且考察处理器实时回放MP3(即实时解压)的性能表现。测试结果以KB/s(每秒千字节)的形式给出。
6、三维向量运算算法:测试采用大量三角形和线条来模拟人类的毛发的形状和毛发的运动方式,在3D游戏场景和3D建模应用的场合,我们也常常见到这样的实时运算。测试运行时间同样为10秒,测试结果以Fps的(帧每秒)形式给出。这项测试对CPU增强指令集做出了相应的优化。
而总的CPU性能测试分数按照下面的公式计算:
JPEGDecompression*606 + (FileCompression*1538 + FileDecompression*124)/2 + TextSearch*49 + AudioConversion*111 + 3DVectorCalculation* 167
根据PCMark2002的一些相关文档的资料,一个高性能的高端PC系统,其CPU性能测试分数应该达到5000分左右。
让我们来看看测试结果吧:
P4 Willamette |
1.4GHz |
1.6GHz |
1.8GHz |
2.0GHz |
JPEG解压缩算法 |
10.5 |
12.1 |
13.5 |
15.1 |
Zlib压缩算法 |
4.1 |
4.6 |
5.2 |
5.7 |
Zlib解压缩算法 |
54 |
60.9 |
67.4 |
73.8 |
文本搜索算法 |
187.9 |
213.7 |
238.8 |
263.9 |
音频转换算法 |
55.7 |
63 |
70 |
76.8 |
三维向量运算 |
34 |
38.8 |
43.6 |
48.4 |
CPU性能测试总分 |
3398 |
3859 |
4314 |
4766
|
P4 Northwood |
2.0A GHz |
2.2 GHz |
2.4 GHz |
JPEG解压缩算法 |
15.2 |
16.8 |
17.9 |
Zlib压缩算法 |
5.9 |
6.5 |
7.3 |
Zlib解压缩算法 |
74 |
78.3 |
85.4 |
文本搜索算法 |
262.9 |
285.6 |
306.7 |
音频转换算法 |
83.4 |
91.4 |
100 |
三维向量运算 |
48.7 |
53.6 |
58.4 |
CPU性能测试总分 |
4864 |
5311 |
5764
|
在这项测试当中,我们清楚看到Willamette核心的P4 2GHz处理器和Northwood核心的2GHz 处理器获得几乎一致的性能测试分数。看来这项测试并没有如实的反映Northwood 512KB的二级缓存所带来的性能增幅,而也从另一个角度说明了,二级缓存的大小在PCMark2002的CPU性能测试里面并没有得到足够多的重视。
从下图我们看到,随着频率的提升,Pentium4的性能测试分数增幅相当缓慢。

也许前面的测试还未让你意识到PCMark2002对二级缓存的忽视程度有多严重,下面我们将进行另外一项测试,参与测试的处理器为PentiumII 300、Celeron 300A、Celeron 300,二级缓存的数量分别为512KB(半速)、128KB(全速)、无二级缓存。让我们来看看这些处理器的性能测试结果吧:
|
PIII 300 |
Cel. 300A |
Cel 300 |
JPEG解压缩算法 |
2.8 |
2.8 |
2.6 |
Zlib压缩算法 |
1 |
1.1 |
0.5 |
Zlib解压缩算法 |
12.9 |
13.5 |
10.6 |
文本搜索算法 |
23.4 |
24.3 |
24.2 |
音频转换算法 |
15.5 |
15.1 |
13.4 |
三维向量运算 |
11.4 |
11.6 |
11.6 |
CPU性能测试总分 |
801 |
817 |
722 |
从测试结果看来,CPU性能测试似乎专为CeleronA的128KB二级缓存而设,PII的512KB大缓存似乎没有带来性能上的优势,而无二级缓存的Celeron也仅仅是在Zlib压缩算法、解压缩算法和音频转换算法当中相对落后,在其余的各项测试里面并没有性能上的弱势。由此我们可以得出两个结论:
1、PCMark2002当中的CPU性能测试对二级缓存的数量要求相当低,某些项目所测试的数据几乎都可以一次载入一级缓存当中,(这也表明了为什么Celeron和CeleronA在许多性能测试项目上并没有性能上的差别),然后直接交付CPU核心运算器进行处理,换句话说,测试结果也反映了PCMark2002的CPU性能测试分数对CPU二级缓存系统的依赖程度相当低,同时也说明了这样一个问题:一级缓存较小的CPU(比如Pentium4处理器)在这项测试里面则没有什么优势可言了。
2、PCMark2002对二级缓存的大小并没有很多的要求,但是对二级缓存的带宽(也就是二级缓存的运行频率)则有一定的依赖性。PII300的核心和Celeron300A的核心是完全一样,不同的只是二级缓存的速度和大小,本来两个CPU的核心运算速度应该是一样的,但是由于Celeron300A具备128KB的全速二级缓存,使得它的性能测试分数比起PII300要高出一些,这也说明了PCMark2002并未清晰能够反映出大二级缓存所带来的性能优势。
大家可以自己做做自己系统的PCMark2002测试,看看当中的测试数据到底怎么样。我相信,无论是AMD的CPU还是Intel的CPU,这种测试的数据其实并不一定能够如实地反映处理器在实际应用场合当中的性能表现,因为这个测试项目是针对CPU核心而言、并没有考虑到CPU本身的缓存系统的影响,应该说这个测试项目将CPU缓存系统的影响降到最低了。