我来认认真真的解释一下,MaLing 说的某些是对的。
首先,在Intel CPU上,对于memcpy这样的操作,假设你的内存带宽不是瓶颈(这个假设恐怕不成立),那么最佳方式就是利用CPU的SIMD来实现这样的操作。那么很显然SIMD是对对齐有要求的。即便只考虑Intel CPU,你也得想到底是SSE还是AVX还是AVX2还是AVX512。 不同指令集扩展对此要求不一样。比如AVX512需要64字节对齐。512 bits are 64 bytes.
但是你的input 数组的长度未必恰好是64字节的整数倍。所以这时候就需要多写一些if...else去处理剩余的不够64字节的部分。如果你追求极致,这些代码会影响程序效率。一个简化做法就是多分配一些,要求所有这样的buffer都是按64字节对齐并且长度是64的整数倍。
【 在 hgoldfish 的大作中提到: 】
: 假定要执行 memcpy(*dest, *src, n) 复制一段内存。正常在 amd64 计算机下,dest, src 两个指针最好是对齐的。
: 那么,不同的计算机架构会要求不同的对齐方式吗?还是说只要对齐到 4 个字节就行?
--
FROM 107.139.34.*