测试准备:指令选取

    由于测试的主要目的是内存子系统的性能,所以这里主要关心这些操作:(1)读;(2)写;(3)复制。对X86指令集,对应这3种操作的指令都有。不过在多媒体程序中,简单复制的应用是很少的,在这里不予考虑,这里的复制指“读+写”。而读和写是基本操作,可以由一条指令完成。不过在编写测试函数前,必须要确定选择何种基本指令来进行测试。指令的选取必须考虑到:(1)可以对某个大小范围内的内存进行操作;(2)操作的顺序有多种;(3)所操作的内存是动态分配的;(4)每个内存单元可能要操作多次;(5)在不同的CPU上应该都可以达到最好的性能。当然这些特性不可能都满足,这里讨论指令选取的目的只是为了尽可能满足这些要求。

    由于X86指令的复杂性,读指令和写指令的选择也很多。首先是寻址方式的选择。最简单的是直接寻址,这通常对应于访问全局变量,而这里的内存是动态分配的,所以用在这里不适合,实现起来也很困难。除直接寻址外,有间接寻址和SIB(Scale-Index-Base:基址加比例变址)寻址两种。可用的格式如下表:

 
(1) (A) mov  eax,  [esi] mov  [esi],        eax
(B) mov  eax,  [esi+xx] mov  [esi+xx],  eax
(2) (A) mov  eax,  [esi+edx] mov  [esi+edx],       eax
(B) mov  eax,  [esi+edx+xx] mov  [esi+edx+xx], eax
(3) (A) mov  eax,  [esi+edx*y] mov  [esi+edx*y],       eax
(B) mov  eax,  [esi+edx*y+xx] mov  [esi+edx*y+xx], eax

其中的xx表示一个常数偏移,y表示一个大于1的比例因子,可以取2、4、8。理论上,Intel的PIII系列和AMD的Athlon都有地址运算单元,应该对寻址模式的选择不敏感。而Intel的P4系列没有地址运算单元,其地址运算要由ALU的运算组合完成,所以在P4上可能简单的寻址方式会得到更高的测试值,特别是类型(3)的寻址方式会很慢,因为P4的移位单元延迟异常大(4周期:相对于加、减等简单运算的0.5周期,可以称作是天文数字了)。另外,PIII系列还有一个专门运算内存写操作(Store Address)的地址的单元很令人迷惑,不知道究竟是干什么的。而且,PIII系列还要把写指令分解成2个uOP,又是令人迷惑的设置。但可以肯定的是,在PIII上写操作将会有一系列的问题,并且测试结果会对寻址方式敏感。这些都将在后面的测试数据中反映出来。

    所有上面的差异导致选择一个合适的寻址方式变得很困难。在这种情况下,我们只好把所有的寻址方式都实现(在无法作出决定的情况下,就不作决定)。在测试程序中将会有不同寻址方式之间的比较测试。而缺省情况下,对性能参数的测试将采用类型(1)。一般来说,较简单的寻址方式性能会好一些。

    还有一个问题是上面的表格中每种类型都列了2个不同的指令,(A)是无常数偏移的,(B)是有常数偏移的。为何需要2种格式以及如何使用这2种格式将在以后介绍。

    除了寻址方式,指令本身也需要讨论。一般来说,读和写总是用mov指令,如果不用串操作指令,复制也只能用mov的组合。但X86系列CPU中还有一些特别的地方:MMX和SSE。相对于ALU的32位寄存器,MMX是64位,SSE是128位,且各自的寄存器组是独立的。所以在测试中将同时考虑这些单元的操作。数据传输指令的对应关系如下:

ALU/通用寄存器组,32位 MMX,64位 SSE2,128位 SSE,128位浮点
mov movq movdqa/movdqu movaps/movups

    由于SSE没有整数传输指令,而很多CPU又只有SSE指令,所以在只有SSE指令的CPU中,用浮点传输指令代替整数传输指令进行测试。但其效果肯定有差别,所以其测试值仅可作为参考。

    在测试中将考虑上面所有这些数据传输指令(其中32位和64位是必做的,而128位是可选的)。将这些数据传输指令和前面的寻址方式结合,就可以得出我们测试中要采用的指令。可以看出,这个组合是非常庞大的,再加上以前讨论过的循环展开,其函数数目完全是一个天文数字,不可能通过手工书写汇编源代码完成。在测试程序中,这里讨论过的指令及其寻址方式将由程序组合成完整的机器指令,再按适当的循环展开次数复制多份,并与开头和结束的辅助代码结合成适当的测试函数,最后被定位到指定的内存偏移上。整个过程的细节以后将更详细地讨论。


Leading Cloud Surveillance, Recording and Storage service; IP camera live viewing

Leading Enterprise Cloud IT Service; cloud file server, FTP Hosting, Online Storage, Backup and Sharing

Powered by FirstCloudIT.com, a division of DriveHQ, the leading Cloud IT and Cloud Surveillance Service provider since 2003.