将__m128d转换为双精度

Convert __m128d to double

本文关键字:双精度 m128d 转换      更新时间:2023-10-16

我只是尝试使用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;
}

其中CCD_ 1和CCD_。现在,我必须将__m128d中的结果转换回double。有没有简单的方法(或转换函数)
非常感谢。

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

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

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