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