【问题标题】:word alignment of 4 byte for XOR operations异或运算的 4 字节字对齐
【发布时间】:2009-12-20 06:58:36
【问题描述】:

在字边界上进行按位运算有什么好处吗?这样做有什么 CPU 或内存优化吗?

实际问题: 我正在尝试创建两个结构的 XOR。假设结构 1 和结构 2 的大小都为 10000 字节。我保留前几百个字节不变,然后开始异或 1 和 2。 假设我从 302 开始。这将一次占用 4 个字节并进行 XOR。两个结构的 302、303、304 和 305 将被异或。这个循环会一直重复到10000。

现在,如果我从 304 开始,是否有预期的性能提升?

【问题讨论】:

    标签: c memory alignment micro-optimization xor


    【解决方案1】:

    是的,使用正确对齐至少有两个优点:

    1. 便携性。并非所有处理器都支持非对齐数字。为了获得最大的可移植性,您应该只使用完全对齐的(即一个 N 字节整数从一个 N 的倍数的地址开始)数字
    2. 速度。 AFAIK,即使是支持非对齐数字的处理器,对齐数字仍然更快。

    【讨论】:

      【解决方案2】:

      过早的优化是万恶之源

      只需以简单的方式进行,然后在您的分析器告诉您它很重要时对其进行优化。

      是的,如果你正确对齐,你会走得更快。如果您使用 SSE2 向量 XOR 指令,您会走得更快,如果正确对齐,您将一次执行 16 个字节并且不会污染缓存。而且,您不太可能将时间花在优化这方面。

      【讨论】:

      • 感谢您的回答。我真的很想优化它,因为我每秒执行一次此操作,数据大小为 40,000 字节,并且连续执行 3-4 天。
      • 好吧,如果你的 CPU 受限,那么请继续。如果你每秒只对 40,000 字节数据进行异或运算,我会说这是不值得的,除非你在嵌入式系统上并试图最大限度地减少功耗或其他东西。在现代笔记本电脑/台式机 CPU 上,处理可以忽略不计。
      【解决方案3】:

      有些处理器只允许在 32 位字边界上进行 4 字节操作(有些只允许在半字边界上进行操作)。

      在这些处理器上,非对齐访问会导致处理器异常 - 根据 CPU、操作系统和设置 - 将导致进程崩溃或只是操作系统的大量工作。

      在其他处理器(例如 x86)上,您只会因为每次操作必须执行两次读取和写入(加上一些移位)而受到性能影响。

      查看link text 了解 ARM CPU 的问题

      【讨论】:

      • “在这些处理器上,非对齐访问会导致处理器异常” - 不一定。我用过的ARM都是这样,但显然有些ARM处理器不会陷进去,只会给你错误的答案。
      • 感谢您提及异常和错误输出。我从来不知道这件事。不过,我的应用程序不会与 ARM 一起使用。
      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 2023-03-25
      • 2021-04-30
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2015-05-28
      • 2016-06-01
      相关资源
      最近更新 更多