曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3664|回复: 0
打印 上一主题 下一主题

优化内存访问

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-12-6 22:20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
内存访问是处理器执行的最慢功能之一。编写需要高性能的汇编程序,尽可能避免内存访问。只要可能,最好把变量保存在处理器的寄存器中。处理器的寄存器访问是经过高度优化的,并且是处理数据的最快方式。

当不可能把所有应用程序数据都保存在寄存器中时,应该试图优化应用程序的内存访问。对于使用数据缓存的处理器来说,在内存中按照连续的顺序访问内存能够帮助提高缓存命中率,因为内存块会一次被读取到缓存中。

当使用内存时,另一个要考虑的问题是处理器如何处理内存的读取和写入。大多数处理器都被优化为从数据段开始的位置,在特定的缓存块中读取和写入内存位置。Intel 建议在定义数据时遵循以下原则:
      按照 16 字节边界对准 16 位数据。
      对准 32 位数据使它的基址是 4 的倍数。
      对准 64 位数据使它的基址是 8 的倍数。
      避免很小的数据传输,而是使用单一的大型数据传输。
      避免在堆栈中使用大的数据长度 (比如 80 位和 128 位浮点数) 。
在数据段中对准数据可能是困难的。数据元素被定义的顺序对于应用程序的性能可能是至关重要的。如果有很多长度类似的数据元素,比如整数和浮点值,可以把它们一起安排在数据段的开始。这确保它们保持适当的对准方式。如果有很多长度不一的数据元素,比如字符串和缓冲区,可以把它们安排在数据段的结尾,以便它们不会破坏其他数据元素的对准方式。

gas 汇编器支持 .align 命令,它用于在特定的内存边界对准定义的数据元素。在数据段中,.align 命令紧贴在数据定义的前面,它只是汇编器按照内存边界安置数据元素。

关于 .align 命令的说明还有:http://www.groad.net/bbs/read.php?tid-1362.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 01:32 , Processed in 0.075566 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表