使用C 中的内在函数计算相交

Computing reciprocal using intrinsics functions in C++

本文关键字:函数 计算 使用      更新时间:2023-10-16

我正在尝试使用固有的算术来计算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上可用。