正 文

创建可移植的64位应用程序代码


www.7dspace.com  更新日期:2006-2-13 22:36:21  七度空间


  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能带来实质上的性能改变。

  总之,明智地使用这些开关选项,你可以在AMD64平台上生成可具移植性,且极有效率的代码。

2页,页码:[1] [2] 

上一篇:在Java中使用Draw2D和SWT绘图
下一篇:远程终端3389端口合理修改秘藉
标题:创建可移植的64位应用程序代码 作者:谢启东编译 来源:天极网
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐