曲径通幽论坛
标题:
优化内存访问
[打印本页]
作者:
beyes
时间:
2009-12-6 22:20
标题:
优化内存访问
内存访问是处理器执行的最慢功能之一。编写需要高性能的汇编程序,尽可能避免内存访问。只要可能,最好把变量保存在处理器的寄存器中。处理器的寄存器访问是经过高度优化的,并且是处理数据的最快方式。
当不可能把所有应用程序数据都保存在寄存器中时,应该试图优化应用程序的内存访问。对于使用数据缓存的处理器来说,在内存中按照连续的顺序访问内存能够帮助提高缓存命中率,因为内存块会一次被读取到缓存中。
当使用内存时,另一个要考虑的问题是处理器如何处理内存的读取和写入。大多数处理器都被优化为从数据段开始的位置,在特定的缓存块中读取和写入内存位置。Intel 建议在定义数据时遵循以下原则:
按照 16 字节边界对准 16 位数据。
对准 32 位数据使它的基址是 4 的倍数。
对准 64 位数据使它的基址是 8 的倍数。
避免很小的数据传输,而是使用单一的大型数据传输。
避免在堆栈中使用大的数据长度 (比如 80 位和 128 位浮点数) 。
在数据段中对准数据可能是困难的。数据元素被定义的顺序对于应用程序的性能可能是至关重要的。如果有很多长度类似的数据元素,比如整数和浮点值,可以把它们一起安排在数据段的开始。这确保它们保持适当的对准方式。如果有很多长度不一的数据元素,比如字符串和缓冲区,可以把它们安排在数据段的结尾,以便它们不会破坏其他数据元素的对准方式。
gas 汇编器支持 .align 命令,它用于在特定的内存边界对准定义的数据元素。在数据段中,.align 命令紧贴在数据定义的前面,它只是汇编器按照内存边界安置数据元素。
关于 .align 命令的说明还有:
http://www.groad.net/bbs/read.php?tid-1362.html
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2