Chinaunix首页 | 论坛 | 博客
  • 博客访问: 244287
  • 博文数量: 91
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1100
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-15 14:35
文章分类

全部博文(91)

文章存档

2008年(91)

我的朋友

分类:

2008-07-07 13:21:55

    充分利用AMD 64位技术需要以下三个条件:必要的AMD64硬件平台,一个可支持AMD64的操作系统,和一个支持AMD64 的64位编译器。AMD公司提供了第一个条件,Window和Linux提供了第二个条件,而一些开发工具提供了最后一个条件。
   

虽然PathScale和Portland Group公司等几个开发工具提供商推出了支持AMD64架构的编译器产品,但对于大多数Windows和Linux下的开发者来说,Microsoft和gcc编译器仍旧是不二的选择。这里主要讲:GCC编译器

 

GCC编译器

在Linux平台上,GNU gcc C/C++编译器存在着许多种不同的版本。

对于在Linux平台下的AMD64应用程序二进制层面上,ILP是32位、64位和64位。正如前面所说的,在移植代码到新平台之前,要充分考虑这些数据的位宽。AMD推荐以下可以使用AMD64技术的操作系统版本,它们是:

Red Hat Enterprise-gcc-ssa (从3.5开始的一个分枝)-package: gcc-ssa 安装于 /usr/bin

SuSE Linux-gcc 3.3.3 (Hammer版)-package: gcc-33 安装于 /opt/gcc33

以上两个版本的gcc通过使用下述选项,都可以生成更快的代码,这对gcc来说,终归是一场挑战,因为相对于优化,它最初的设计目标是创建可具移植性的代码。

-O3打开几个通用的优化

-ffast打开浮点数学运算的更快方法,与之前提过的Microsoft的选项类似

-funroll-all-loops将把所有的循环解开成代码。这个开关选项使可执行文件的体积变大,但能改善执行效率,然而,测试一下此选项所带来的改变是非常重要的。举例来说,如果因为循环被展开后,不再适合放入缓存,那实际上将降低性能,因此,有些循环最好还是不要管它。多试几次,将会有助于判断此选项带来的价值。

64位GCC编译器同样也提供了配置向导优化(profile-guided optimization PGO)。想了解PGO是如何运作的更多信息,参考前面所提及的Microsoft编译器部分。对以上提及的gcc编译来说,要想使用PGO,第一步是带上-fprofile-arcs选项,接下来在重新编译中打开-fbranch-probabilities选项。

还有一件更重要的事,如果程序中有许多数学运算,就像计算FFT、调用触发器函数,或者解算线性代数,可能此时就要考虑使用AMD核心数学库(ACML),它提供了针对于含有AMD64技术芯片的高度优化的函数。在这些数学函数被经常调用的密集循环中,ACML能带来实质上的性能改变。

阅读(1181) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~