在 C++ 中使用内部函数计算倒数

Computing reciprocal using intrinsics functions in C++

我正在尝试使用内部算术计算 1/x 并假设 x 是双精度数。我正在尝试按如下方式实现计算:

__inline__ double __attribute__((const)) rcp_d (double x ) {
    double res;
    _mm_store_pd(&res,
                 _mm_rcp_ps(_mm_load_pd(&x))
        );

    return res;
}

但是我得到错误:

error: cannot convert ‘__m128d {aka __vector(2) double}’ to ‘__m128 {aka __vector(4) float}’ for argument ‘1’ to ‘__m128 _mm_rcp_ps(__m128)’
                  _mm_rcp_ps(_mm_load_pd(&x))

有什么建议可以正确进行计算吗?

_mm_rcp_ps 适用于 __mm128 (4xfloat) 数据类型,而不是双精度数据类型。您应该改用 _mm_rcp14_pd,尽管此指令仅适用于支持 AVX512 扩展的较新 CPU。