LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: luciano

gcc-4.5.0

[复制链接]
发表于 2010-4-26 19:02:39 | 显示全部楼层
Post by 溺水三千;2085919
朋友能否给个链接?


链接看这里:http://forums.gentoo.org/viewtop ... r-asc-start-50.html

这个贴子里还有个家伙glxgears从200提升到500-1000 FPS,不过他也提到目前很多软件还不能编译过去
回复 支持 反对

使用道具 举报

发表于 2010-4-26 19:10:17 | 显示全部楼层
另外,转篇gcc 4.5的介绍:
http://www.qtchina.net/?q=node/426

距离GCC 4.4的发布一年之久,GNU终于发布GCC 4.5了。新版本带来了很多新特性,包括使用MPC库在编译时完成复杂的算术计算,C++0x支持增强,使用部分Graphite完成自动并行化,支持新的ARM处理器,Intel Atom优化和调优支持,以及AMD Orochi优化支持等。今年稍晚发布的Fedora 14,Ubuntu 10.10,OpenSUSE 11.3,都将有GCC4.5,估计Gentoo马上就会有支持了,磨拳擦掌准备试用喽:)详细支持如下:

总体说明:

.编译GCC需要MPC库
.故纸堆里的旧系统和很久没有更新和测试的系统在GCC4.5中被标记为待放弃,包括IRIX, Solaris 7, Tru64 UNIX V5.1.
.GCC4.4中标记为待放弃的支持被放弃
.移除Itanium 1变种支持,但Itanium2编译的程序能在Itanium1上正确执行
.GCC生成的调试信息包括了更多DWARF 3的特性,甚至包含了DWARF4的一些特性.GDB7.0之前的版本将无法使用这些特性.所以调试GCC4.5编译的程序需要使用GDB7.0及以上版本.也可以使用选项 -gdwarf-s -gstrict-dwarf来禁止生成DWARF4信息,或者-gdwarf-2 -gstrict-dwarf让GCC严格执行DWARF2标准.
.X86上,浮点运算在GCC4.5上使用严格C99语法编译时,可能会运行变慢。这是为了和标准一致,可以通过选项-fexcess-precision=fast来避免严格的标准限制。
.noinline属性不再能阻止整个函数拷贝。但可以通过新的属性noclone做到。

改进:

.-save-temps可以增加参数,该功能让用户可以在并行编译的时候得到编译器的中间文件,但不会在不同的文件夹中使用相同的文件名从而干扰比起。
.调试信息目标文件也都被放在了同个文件夹下,而不是当前工作目录,这样用户可以在并行编译的时候得到调试信息。
.集成了MPC库,这样可以让GCC在编译时更精确的评估复杂的算术运算。GCC也可以通过它,对于常数作参数的数学运算类内建函数调用,直接在编译时使用相等的返回值来代替之。包括下列内建函数:cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan和ctanh。
.新的链接时优化器(-flto),打开此选项后,GCC会针对每个输入文件,产生bytecode的表示形式,并将其写入每个目标文件的特定ELF区內。链接时,从这些ELF区內读取函数体,并将其实体化为转换单元。这样就可以使得过程间优化能在不同的文件间进行(甚至不同语言间),进而可能提升性能。使用此功能需要在编译时和链接时都增加-flto选项。如果不需要程序输出任何符号,可以联合-fwhopr和-fwhole-program来让过程间优化器执行更加激进的优化。
.增强自动并行化,现在支持外层循环的并行化。
.自动并行化能作为Graphite的一部分来打开。在选项-ftree-parallelize-loops=的基础上增加-floop-parallelize-all能打开基于Graphite的优化。(注:Graphite是GCC中使用多面体模型做循环优化的部分)
.重写基于严格指针的优化架构,会提高生成代码的效率。基于严格指针的优化在打开-fno-strict-aliasing后可用。
.增加关于函数传参的新优化。试图改变函数原型,避免无用传递,仅传递结构体中特定部分,并将引用传参改为值传参。-O2,-Os及以上级别默认开启此优化。
.优化异常控制代码。

新语言支持和特定语言改进

.所有语言:-fshow-colum选项默认打开,错误信息现在有列信息。
.C类语言:若#include的文件未找到,编译器会立即退出;增加一个新内建函数__builtin_unreachable();增加-Wlogical-op选项,对可能存在的逻辑错误,报警告;嵌入式汇编增加goto特性,允许汇编中的语句直接跳到C中的标号处;C++0x原始strings(raw string)支持;deprecatd树形现在可以增加可选字符串参数,如__attribute__((deprecated(“text string”))),这样,deprecation警告会和字符串一同打印。
.其他针对各个语言的详细细节请参考官方release。

其他改进:

.插件支持:可以不通过改变编译器代码来扩展编译器功能。-fplugin=file.so能指定GCC载入动态链接文件file.so,并将其作为编译器的一部分执行。更多的细节请参考相关文档。
.安装文件夹稍有变动。

参考:

http://gcc.gnu.org/gcc-4.5/changes.html

PS:GCC 4.5.0最大的更新是性能提升,对于高性能的benchmark,普遍性能提升在5%-10%. GCC4.5.0中真正实现了过程间优化。过程间优化能明显的提升性能并明显降低生成的代码大小。另外,GCC4.5.0也使用多面体模型改进了循环优化架构.使得GCC日后可以加入更多高级循环优化,并且能深入调优。
回复 支持 反对

使用道具 举报

发表于 2010-4-26 19:29:53 | 显示全部楼层
能支持的话当然更好,我看changes里没写。一会编译一个版本试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-26 20:11:57 | 显示全部楼层
以前用gold无法build glibc,请问GNU gold现在的进度怎么样了?
回复 支持 反对

使用道具 举报

发表于 2010-4-28 08:24:10 | 显示全部楼层

emerge 看不到 gcc 4.5.0, 看到 4.4.3-r2

需要怎么弄make.conf, keyword 或 unmask,还是要用 overlay?
回复 支持 反对

使用道具 举报

发表于 2010-4-29 08:32:20 | 显示全部楼层
一直用gcc 4.5开发版写c++0x程序,感觉目前gcc 4.5对c++0x支持比vc 2010好的多,后者还不支持variadic template这个主要特性。
不过下面的代码在4.5下编译通不过(从d语言移植过来的),不知是lambda和variadic template联合有问题,或者用法不正确。
#include <cstdio>
#include <functional>

template<typename... Args>
std::function<void(void)> getWrapper (void (*fn)(Args...), Args... args) {
        fn(args...); // 这样写变参可以展开
        return [=] () {
                fn(args...); // 放在这里编译就出错了
        };
}

static void test (int val) {
        printf("%d\n", val);
}

int main () {
        auto f = getWrapper(&test, 1);
        f();
        return 0;
}
回复 支持 反对

使用道具 举报

发表于 2010-4-29 08:42:14 | 显示全部楼层
最近做过一些测试,lto优化在我们的项目中效率提升不到3%,但完全编译时间从以前的43分钟提高到近2个小时,而且生成的目标代码debug信息不完整:不带-lto参数编译出debug版最终可执行文件240MB,而lto生成的只有36M,模板和inline函数都无法跟踪,而且函数符号名后面多了个数字序号(可能用来链接优化)。看来目前只适合生成release版。
回复 支持 反对

使用道具 举报

发表于 2010-12-28 14:13:58 | 显示全部楼层
CFLAGS中添加-flto和graphite
回复 支持 反对

使用道具 举报

发表于 2010-12-28 21:41:54 | 显示全部楼层
gcc-config -l
[1] x86_64-pc-linux-gnu-4.5.2 *

更新完了,没有感觉到有什么特别的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表