Armadillo 向量的内存对齐 vec/fvec
Memory alignment of Armadillo vectors vec/fvec
我想使用 .memptr()
直接从 Armadillo 矢量数据加载 __m256
。
Armadillo 是否确保数据内存是 256 位对齐的?如果是,那么我只是将 .memptr()
返回的 float/double 指针转换为 __m256
指针并跳过 _mm256_load_ps()
,如果它在性能方面有意义的话。
Armadillo 似乎没有在文档中谈论这一点,因此未指定。因此,矢量数据可能无法确保 32 字节对齐。
但是,您不需要对齐矢量数据即可将它们加载到 AVX 寄存器中:您可以使用未对齐加载内部函数 _mm256_loadu_ps
。据我所知,_mm256_load_ps
和 _mm256_loadu_ps
在相对较新的 x86 处理器上的性能大致相同。
我想使用 .memptr()
直接从 Armadillo 矢量数据加载 __m256
。
Armadillo 是否确保数据内存是 256 位对齐的?如果是,那么我只是将 .memptr()
返回的 float/double 指针转换为 __m256
指针并跳过 _mm256_load_ps()
,如果它在性能方面有意义的话。
Armadillo 似乎没有在文档中谈论这一点,因此未指定。因此,矢量数据可能无法确保 32 字节对齐。
但是,您不需要对齐矢量数据即可将它们加载到 AVX 寄存器中:您可以使用未对齐加载内部函数 _mm256_loadu_ps
。据我所知,_mm256_load_ps
和 _mm256_loadu_ps
在相对较新的 x86 处理器上的性能大致相同。