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

Posted

技术标签:

【中文标题】在 C++ 中使用内部函数计算倒数【英文标题】:Computing reciprocal using intrinsics functions in C++ 【发布时间】:2017-03-16 05:18:13 【问题描述】:

我正在尝试使用内在算术计算 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))

为了正确进行计算有什么建议吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于在 C++ 中使用内部函数计算倒数的主要内容,如果未能解决你的问题,请参考以下文章

C++:使用 int 指针指向在函数内部创建的向量

在 C++ 中的类的函数内部声明变量

关于C++的虚函数在父类的内部调用

[ C++ ] 类与对象(下) 初始化列表,友元,static成员,内部类

C++ 在函数内部输出当前类名方式

C++类和对象(构造函数static成员内部类友元函数等)