C/C++:-msse和-msse2标志对二进制文件没有任何影响?

Fab*_*ian 5 c++ gcc sse sse2

我只是在玩gcc(g ++)和compilerflags -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;
}
Run Code Online (Sandbox Code Playgroud)

当我使用以下语句编译它时:

/usr/local/bin/g++-4.9 -W -msse main.cpp -o testsse
Run Code Online (Sandbox Code Playgroud)

/usr/local/bin/g++-4.9 -W -msse2 main.cpp -o testsse2
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助.

亲切的问候

法比安

edm*_*dmz 4

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

使用 SSE ( movss, mulss) 是因为如果我们愿意的话,它是浮点微积分的阈值。SSE2 在这里没有范围。
为了为 SSE2 找到空间,您需要包含更复杂的微积分,这些微积分可能会也可能不会利用 SSE2 中可用的某些指令;您可以查看某些代码的作用,执行它们的等效操作,然后看看编译器是否可以利用它们。