【发布时间】:2021-04-04 01:28:43
【问题描述】:
我有一个这样的元组
tuple<array<float, 4>, array<float, 4>, array<float, 4>>
现在我想将这些数组加载到 sse 寄存器中
_mm_load_ps(get<0>(tuple).data());
_mm_load_ps(get<1>(tuple).data());
_mm_load_ps(get<2>(tuple).data());
但根据https://software.intel.com/sites/landingpage/IntrinsicsGuide/#techs=SSE&expand=3330,内在要求内存地址在 16 字节边界上对齐
如何确保数组满足该条件,或者我应该使用未对齐的负载内在
_mm_loadu_ps
也可以将其推广到新的 simd 标准,如 AVX(当然是通过调整数组的大小)?
【问题讨论】:
-
您是否可以预先分配更多内存,将其与
std::align对齐,然后将其作为std::span<float, 4>传递? -
嗯,可能也可以
标签: c++ simd memory-alignment