[zz]高性能Linux Kernel项目—LinuxDNA [性能真的提高 40%?]
http://linux.solidot.org/article ... 313201&from=rss
旨在提供高Linux kernel性能的项目LinuxDNA,本月初成功实现用Intel C/C++编译器(ICC)编译了Linux kernel 2.6.22,不仅没有编译错误,而且完全可充当一个完整Linux系统的核心,开发者使用的Linux系统是基于Gentoo Linux。早期研究发现,用ICC编译Linux内核,在性能上可以提升40%。开发者以前使用的是ICC 8,目前已换到10.1和11版本。 该项目的负责人Thaidog称:“ 编译一个新内核的所有指示都已公布在网站(虽然针对的是Gentoo,但其它任何发行版都适用)。任何有编译内核能力的人都可轻松完成。”他表示希望能维护一个与当前Linux内核并存的kernel源。现在的新内核对应的是2.6.22,因为.22版之后内核发生了一些变动,使得编译的难度加大了,但并非是不可能的。
40% 啊 看来 GCC 改进空间很大啊
的确有改进 GCC 寄存器分配这么个项目
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
提高40%,的确很强
说实在的,我并不明白他的"性能提高40%"是什么意思
just info:
http://blog.alphagemini.org/2008/03/icc-vs-gcc-43.html
http://www.coyotegulch.com/reviews/linux_compilers/index.html (new)
http://www.coyotegulch.com/revie ... tel_gcc_bench2.html (old)
http://www.linuxjournal.com/cont ... x-intel-cc-compiler
(40% is mentioned here)
其实这个意义不是很大,因为你跑的 testcase 不一样得分也是不一样的。
客观的说,在 x86 上, ICC 做的很好(不过有人和 VS 比说 VS 编译出来的代码效率更高), GCC的确有很大的改进空间(每个 Arch 都是,写出来高水平的 md 不容易,我现在体会到了),有人的文章说 CSDN 上说 ICC 将会取代 GCC 我就找啊,没找到,可能么?不记得 ORC 了? FSF 不买帐谁都没辙!这个只能说 ICC 某些方面做的很好,然后 GCC 的开发人员去赶紧追赶。
不否认我也使用 OpenSolaris 去跑 SUN cc 了,可是在 OpenSolaris 上连 GCC 4 都无法编译(也许可以,太麻烦了)我就放弃了,意义不大,5 年之后 SUN cc 和 ICC 还有那个 ORC 对 GCC 还会有多少优势?10 年之后还会谁还会存在?
据说使用GNU hash的工具链也能很大程度的提升性能。
Ubuntu 使用了 GNU hash,别的我就不关心了。
binutils 我还是算了,仅仅可以 port 就算了,不打算深究了。
> 其实这个意义不是很大,因为你跑的 testcase 不一样得分也是不一样的。
对,得看什么样的benchmark
>客观的说,在 x86 上, ICC 做的很好(不过有人和 VS 比说 VS 编译出来的代码效率更高), GCC的确有很大的改进空间(每个 Arch 都是,写出来高水平的 md 不容易,我现在体会到了)
icc估计更多microarchitecture 级别的优化, 而不是通用的优化。 Intel的icc开发工程师也有很多给gcc的x86 backend提补丁的
>不否认我也使用 OpenSolaris 去跑 SUN cc 了,可是在 OpenSolaris 上连 GCC 4 都无法编译(也许可以,太麻烦了)我就放弃了,意义不大,5 年之后 SUN cc 和 ICC 还有那个 ORC 对 GCC 还会有多少优势?10 年之后还会谁还会存在?
opensolarsi上编译gcc不麻烦,我就在用gcc 4.3.1呢。 我的笔记,仅供参考:
44) 在Solaris/x86 上编译gcc
(注意,只针对4.0以及更新的gcc)
准备:
-> 安装libintl, sunfreeware上有;
-> 安装libmpfr和libgmp,用blastwave安装即可;
配置:
$ gtar jvxf gcc-4.3.1.tar.bz2
$ cd gcc-4.3.1
$ mkdir src
$ mv * src/
$ mkdir obj/ dst/
$ cd obj/
$ ../src/configure --prefix=/export/home/soft/gcc-4.3.1/dst/ --with-gnu-as \
--with-as=/usr/sfw/bin/gas --with-ld=/usr/ccs/bin/ld --without-gnu-ld
--enable-shared --enable-languages=c,c++ --with-gmp=/opt/csw/ --with-mpfr=/opt/csw/
/* 你可以直接:
*
* $ gmake
* 来编译gcc; 也可以:
*
* $ make bootstrap
* 让gcc把编译过程分成3个stage,每一个stage的结果用来编译下一个stage,这是
* 一个bootstraping的过程。如果硬盘空间不足,还想bootstrap,那就:
*
* $ gmake bootstrap-lean
*/
$ gmake bootstrap
/*{{{*/ 如果出现错误:
libcpp/下编译时找不到libintl_gettext等符号:
$ cd libcpp/
$ vi Makefile 给CFLAGS加上-L/usr/local/lib -lintl
$ gmake
//继续
$ cd ..
$ gmake
其他目录出现这个错误也是一样的办法。
/*}}}*/
[FYI] Solaris上是否可以用gcc和GNU ld来编译、连接程序? gcc官方文档推荐使用SUN的link-editor,
亦即/usr/ccs/bin/ld,而不是GNU ld。
网上有人说,如果编译gcc时指定了--with-gnu-ld,那就可以把GNU ld的路径export到环境变量
GCC_EXEC_PREFIX中去,gcc就可以使用GNU ld了。 (该方法尚待验证)
ICC是专用编译器,对于专门硬件的优化肯定是讲究的多的,专用和通用的差别还是很大的
而且, icc之所以可以编译某些特定版本的kernel, 也是因为它对gcc做了选项和语法上的全面兼容。
即使这样,也不是每个kernel版本都可以用icc编译的。