将__m128d转换为double

时间:2013-12-05 11:39:25

标签: 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;
}

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

load的对应方为store [msintel]。所以在你的情况下我猜(双精度,对齐指针,常规存储):

_mm_store_pd(A, res); //A = res;