李正平,程洋洋
(安徽大学 电子信息工程学院, 合肥 230039)
现代计算机中内存空间都是按照byte划分的,对于内存中的基本数据类型的变量,如果它们的起始地址能够被其自身的大小整除,则将该变量称为自然对齐数据,反之称为非对齐数据[1].
不同硬件平台在非对齐数据的处理方面存在很大差异[2].如以MIPS和ARM为代表的精简指令集计算机对地址要求较为严格,需要地址自然对齐;而以X86为代表的复杂指令集计算机就不需要.通常来说,若不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失.比如在MIPS平台上,如果一个int型数据(假设为32位系统)存放在4的整数倍的地址上,那么一个读周期就可以读出;而如果存放在非4的整数倍的地址上,就可能会需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该int型数据,这显然会在存取效率上下降很多[3].在龙芯平台多媒体指令优化时,优化函数一旦访问非对齐数据会严重抵销优化函数的性能提升,影响程序的执行效率.因此,保证优化函数在数据非对齐时也能有较高的性能是一个需要解决的问题.
针对非对齐数据存在的问题,许多学者进行了大量研究,提出了许多行之有效的解决方案.其中,IBM公司的Eichenberger A E[4]提出了一种在内存非对齐的情况下对循环进行矢量化处理的方案,即自动重组寄存器中的数据,以满足硬件提出的对齐要求;浪潮(北京)电子信息产业有限公……