在字边界上进行按位运算有什么优势吗?这样做有任何 CPU 或内存优化吗?
实际问题:我正在尝试创建两个结构的 XOR。假设结构 1 和结构 2 的大小都为 10000 字节。我保留前几百个字节,然后开始 XOR 1 和 2。假设我从 302 开始。这将一次占用 4 个字节并进行 XOR。两个结构的 302、303、304 和 305 将被异或。此循环将重复直到 10000。
现在,如果我从 304 开始,是否有预期的性能改进?
在字边界上进行按位运算有什么优势吗?这样做有任何 CPU 或内存优化吗?
实际问题:我正在尝试创建两个结构的 XOR。假设结构 1 和结构 2 的大小都为 10000 字节。我保留前几百个字节,然后开始 XOR 1 和 2。假设我从 302 开始。这将一次占用 4 个字节并进行 XOR。两个结构的 302、303、304 和 305 将被异或。此循环将重复直到 10000。
现在,如果我从 304 开始,是否有预期的性能改进?
是的,使用正确对齐至少有两个优点:
过早的优化是万恶之源
只需以简单的方式进行操作,然后在您的分析器告诉您它很重要时对其进行优化。
是的,如果你正确对齐,你会走得更快。如果您使用 SSE2 向量 XOR 指令,您会走得更快,如果正确对齐,您将一次执行 16 个字节并且不会污染缓存。并且极不可能优化这个是你应该花时间的地方。
一些处理器只允许在 32 位字边界上进行 4 字节操作(有些只允许在半字边界上进行操作)。
在这些处理器上,非对齐访问会导致处理器异常——取决于 CPU、操作系统和设置——将导致进程崩溃或只是操作系统的大量工作。
在其他处理器(例如 x86)上,您只会获得每次操作必须执行两次读取和写入(加上一些移位)的性能损失。
查看链接文本以查看 ARM CPU 的问题