当前位置:  开发笔记 > 编程语言 > 正文

在MSVC中自动生成FMA指令

如何解决《在MSVC中自动生成FMA指令》经验,为你挑选了0个好方法。

MSVC多年来一直支持AVX/AVX2指令,根据这篇msdn博客文章,它可以自动生成融合乘法加法(FMA)指令.

然而,以下两个函数都没有编译为FMA指令:

float func1(float x, float y, float z)
{
    return x * y + z;
}

float func2(float x, float y, float z)
{
     return std::fma(x,y,z);
}

更糟糕的是,std :: fma没有实现为单个FMA指令,它执行速度非常快,比平原慢得多x * y + z(如果实现不依赖于FMA指令,则预期std :: fma的性能很差).

我用/arch:AVX2 /O2 /Qvec旗帜编译.也尝试过/fp:fast,没有成功.

所以问题是MSVC如何被迫自动发出FMA指令?

UPDATE

有一个#pragma fp_contract (on|off),(看起来像)什么都不做.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有