问题描述
tuple<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(当然是通过调整数组的大小)?
解决方法
您可能会使用 alignas
并具有以下内容:
template <typename T,std::size_t N,std::size_t Align>
struct aligned_array
{
alignas(Align) T data[N];
};
然后
std::tuple<aligned_array<float,4,16>,aligned_array<float,16>>;