自编教材分享:第八章—访存优化(一)



为了平衡成本、保持存储容量及访存速度,现代计算机的存储系统中一般采用多种不同的存储器件结合即多级层次存储结构。如下图所示,最上层的寄存器在处理器芯片内直接参与运算,它的速度最快、平均每位的价格最高、容量最小。高速缓存存储器、主存储器、辅助存储器这三个级别的存储容量依次增大,但存储速度、价格成本及处理器访问的频度依次降低。

寄存器分配
减少全局变量
全局变量的有效范围在整个程序内,且全局变量会独占一个寄存器,导致过程内可分配寄存器的数量减少,因此编码时应尽量减少全局变量的使用。
初始代码:
优化后代码:
直接读取寄存器
一般情况下,编译时主要对标量进行分配寄存器,因此在编写程序时应该尽量将数组变为标量,这样可以直接读取寄存器中的数据,从而避免每次都从缓存中加载数据,减少部分程序中数据读写耗费的时间。对优化前后示例进行测试,结果显示,标量替换前耗时0.96秒,替换优化后耗时0.88秒。
原始代码:
优化后代码:
除此之外,此方法还可以减少内存写的次数。对代码进行测试,设置输入的数据规模为10000*10000,结果显示优化前耗时0.35s,优化后耗时0.28s,可见对内存写操作的减少会提升程序的性能。
原始代码:
优化后代码:
优化人员除了需要考虑寄存器合理分配的问题之外,还需要防止寄存器溢出。当所需寄存器的数量大于可分配寄存器数量时,就会出现寄存器溢出,可能会抵消前期调优积累的性能优势。
原始代码:
汇编代码:
寄存器重用
当数据从缓存加载到寄存器后,应该尽可能地将后续还要使用的数据保留在寄存器,以避免该数据再次从缓存读取,即寄存器重用可以有效地减少内存访问。
原始代码:
优化后代码:
