相关疑难解决方法(0)

gcc优化标志-O3使代码比-O2慢

我发现这个主题为什么处理排序数组比未排序数组更快?.并尝试运行此代码.而且我发现了奇怪的行为.如果我使用-O3优化标志编译此代码,则需要2.98605 sec运行.如果我用-O2它编译1.98093 sec.我尝试在同一环境中的同一台机器上运行此代码几次(5或6),我关闭所有其他软件(chrome,skype等).

gcc --version
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

那么请你能解释一下为什么会这样吗?我阅读gcc手册,我看到-O3包括-O2.谢谢你的帮助.

PS添加代码

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ optimization gcc

18
推荐指数
1
解决办法
5180
查看次数

如何使用gcc进行矢量化?

gcc编译器的v4系列可以在一些现代CPU上使用SIMD处理器自动矢量化循环,例如AMD Athlon或Intel Pentium/Core芯片.这是怎么做到的?

gcc loops simd vector-processing

17
推荐指数
2
解决办法
3万
查看次数

为什么要用-O2而不是-O3编译

我们通常编译-O2因为-O3会"触发微妙的错误".

对于我们的GCC版本,-O3可以实现更积极的内联,这实际上可以揭示其他未被注意到的错误(例如,使用来自将其作为引用参数或对数组进行越界访问的函数的未初始化值).在我看来,这种积极的内联还允许使用更小的函数进行更具表现力的编码方式,并-funswitch-loops有助于在循环中保持变量定义更加局部化.

鉴于我们的代码中的错误比编译器错误更有可能,并且我们使用时-Wall -Wextra没有任何问题我们应该寻找什么样的错误?

如果重要我们使用gcc-4.3.2.编译时间对我们来说不是一个主要问题.

optimization g++

16
推荐指数
2
解决办法
2281
查看次数

标签 统计

gcc ×2

optimization ×2

c++ ×1

g++ ×1

loops ×1

simd ×1

vector-processing ×1