c++ - C/C++ : -msse and -msse2 Flags do not have any effect on the binaries?

标签 c++ gcc sse sse2

我只是在玩弄 gcc (g++) 和编译器标志 -msse 和 -msse2。我有一个看起来像这样的小测试程序:

#include <iostream>

int main(int argc, char **argv) {
    float a = 12558.5688;
    float b = 6.5585;

    float result = 0.0;

    result = a * b;

    std::cout << "Result: " << result << std::endl;

    return 0;
}

当我用下面的语句编译它时:

/usr/local/bin/g++-4.9 -W -msse main.cpp -o testsse

/usr/local/bin/g++-4.9 -W -msse2 main.cpp -o testsse2

输出文件是二进制相等的。但由于 SMID 标志,我预计它们并不相同。

所以我的问题是,那些编译器标志对二进制文件没有任何影响吗?我已经在 OS X 10.10.3 和 Fedora 21 上对其进行了测试。

感谢您的帮助。

亲切的问候

法比安

最佳答案

在您的代码中涉及非常基本的 float 学运算。我敢打赌,如果您打开优化(甚至 -O1),它就会被优化掉,因为这些值是常量表达式,因此可以在编译时计算。

使用 SSE (movss, mulss) 因为它是浮点微积分的阈值,如果我们愿意的话。 SSE2 在这里没有作用域。
为了为 SSE2 找到空间,您需要包含更复杂的微积分,这些微积分可能会或可能不会利用 SSE2 中可用的某些指令;您可以查看一些人做了什么,做他们的等价物,看看编译器是否可以利用它们。

关于c++ - C/C++ : -msse and -msse2 Flags do not have any effect on the binaries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29875098/

相关文章:

c++ - 如何正确地从水平阵列垂直读取数据?

c++ - std::lower_bound 的奇怪错误

c++ - 如何在运行时使用 typeof 创建一个 void * 指针

c++ - 非整数常量如何在 C++ 中工作?

c - C库中的函数数量

c++ - 将数组元素移动 n 个位置

c++ - 快速将数组 float 到双数组并返回

c++ - 如何在 MFC 功能包中获取功能区控件以处理 ID_WINDOW_TILE_VERT

c - 独立编译相互依赖的 C 模块

c++ - 快速加权均值和方差10格