将__m128d转换为double

arc*_*pus 2 c++ sse

我只是尝试使用SSE扩展,我开始使用简单的矢量点乘法.所以我写了下面的代码:

void SSE_vectormult(double * A, double * B)
{
    __m128d a;
    __m128d b;
    a = _mm_load_pd(A);
    b = _mm_load_pd(B);
    const int mask = 0xf1;
    __m128d res = _mm_dp_pd(a,b,mask);
    A = res;
}
Run Code Online (Sandbox Code Playgroud)

AB相同长度的矢量.现在,我必须将结果转换__m128d回来double.有没有简单的方法(或转换功能)?
谢谢!

Z b*_*son 6

你应该用double dot = _mm_cvtsd_f64(res).这从128位寄存器中提取低64位双精度值.


luk*_*k32 5

对应的load将是store[ ms,intel ].所以在你的情况下我猜(双精度,对齐指针,常规存储):

_mm_store_pd(A, res); //A = res;
Run Code Online (Sandbox Code Playgroud)