如何在POWER平台的Linux使用XLC/C++?

如何在POWER平台的Linux使用XLC/C++?

介绍

运行于POWER处理器系统的Linux XL C/C++高级版本是基于标准的C/C++规范、命令行方式的编译器,

VisualAge C/C++ 6.0的后续版本。XL C/C++不仅充分发挥了IBM POWER、POWER3TMPOWER4TM处理器

的功能,同时增加了对POWER5TMPOWER 970处理器的支持。本文主要介绍Linux平台的XL C/C++ 7.0新

增加的特点和gcc编译器的区别。包含以下几个方面:

1. XL C/C++概述

2. 性能和优化

3. 支持的行业标准

4. XL C/C++的新特点

5. 编译器命令

6. 安装配置 XL C/C++

7. 32- 和64-bit编译模式

8. XL C/C++的文档

针对于POWER系统的架构特点,XL C/C++提供了大量的优化选项,包括针对于POWER5和POWER 970处理

器架构的优化。从性能方面考虑,基于POWER处理器的Linux系统的应用,使用XL C/C++编译要比使用gcc编

译有更好的表现,XL C/C++编译器可以充分利用POWER架构潜在的性能优势,建议使用XL C/C++编译器编译

应用。

现在 XL C/C++ 7.0可以运行在SUSE Linux Enterprise Server 9和Red Hat Enterprise AS V3

update 3 Linux系统上,跟详细的资料请参考以下网址:

http://www-306.ibm.com/software/awdtools/xlcpp/features/linux/index.html

一,XL C/C++概述

XL C/C+作为C编译器可以编译.c后缀的代码,或者作为C++编译器可以编译.C,.cc,.cpp或者.cxx后缀

的代码,XL C/C++支持以下规范:

- C的ISO语言规范C89和C99

- 标准C++和C++98

另外,XL C/C++支持许多语言的扩展,包括GNU gcc和g++语言的扩展。

XL C/C++可以创建兼容于GCC生成的二进制或目标文件的对象,要达到这种兼容性,使用XL C/C++编译的

应用包含使用GCC同样的头文件。XL C/C++使用GNU gcc和g++的头文件,应用程序链接gcc提供的C和C++的

运行库,因而应用的部分代码可以使用XL C/C++,达到优化的目的。XL C/C++和gcc的关系可以总结如下:

1. 使用Linux发布的GNU gcc和g++的头文件编译应用

2. 使用GNU的汇编器编译

3. 使用GNU的连接器(linker)链接

4. 编译的应用程序使用GNU gcc和g++的运行库

5. 使用GNU的调试器gdb调试应用

6. IBM针对POWER处理器的嵌入函数与GNU gcc/g++的嵌入函数共存

二,性能和优化

1. 针对于新的处理器架构,–qarch和-qtune编译选项增加了新的参数项,支持POWER5和POWER 970架构,

如下:

-qarch=pwr5

-qtune=pwr5

-qarch=ppc970

-qtune=ppc970

2. 支持VMX(Vector Multimedia Extensions),参数为-qaltivec(只适用于POWER 970)和-qenablevmx

3. IBM MASS(Mathematics Acceleration Subsystem)向量库与编译器打包发布,向量库函数结合libm函

数可提高计算性能

三,支持的行业标准

1. XL C/C++支持OpenMP API v2.0

2. XL C/C++实现了更多的GNU gcc 和g++的扩展

3. 加强对unicode和NLS的支持,增加了信的UTF-16和UTF-32类型

四,XL C/C++的新特点

1. gxlc和gxlc++工具。此工具将GNU gcc和g++的编译器转换为XL C/C++相应的编译器xlc或者xlc++,

如使用gcc –ansi参数项编译C的hello.c程序:

gxlc –ansi hello.c

转化为

xlc –F:c89 hello.c

调用XL C的编译器

gxlc和gxlc++可以帮助我们尽可能少的修改GNU编译器的makefile,支持主要的gcc选项,可使

gxlc.cfg参数文件配置。

2. XL C/C++在模板注册文件中增加了版本信息,这些信息只供编译器内部使用,决定具体采用的模板

注册文件的格式。

五,编译器命令

XL C/C++的确省路经为/opt/ibmcmp,XL C/C++有多组具体的编译器命令组成,每组编译器命令都

有其相应的线程版本,gxlc和gxlc++除外,如下表所示:

编译器命令

线程版本

描述

xlC 或 xlc++

xlC_r 或 xlc++_r

编译C++的源代码

xlc

xlc_r

编译C的源代码,编译器使用如下参数:

-qlanglvl=extc89, -qalias=ansi, -qcpluscmt, -qkeyword=inline

c89

c89_r

ISO C89标准的编译器,使用如下的编译参数:

-qlanglvl=stdc89,-qalias=ansi, -qstrict_induction, -qnolonglong, -D_ANSI_C_SOURCE, -D__STRICT_ANSI__

c99

c99_r

ISO C99标准的编译器,使用如下的编译参数:

-qlanglvl=stdc99, -qalias=ansi, -qstrict_induction, -D_ANSI_C_SOURCE, -D_ISOC99_SOURCE, -D__STRICT_ANSI__

cc

cc_r

旧版本的C代码编译器,不要求完全遵从C89和C99标准,使用如下编译参数:

-qlanglvl=extended, -qnoro, -qnoroconst

xlCcore 或

xlc++core

xlCcore_r或

xlc++core_r

xlC和xlc++雷同,但编译器只链接运行库的核心部分

gxlc或

gxlc++

GNU gcc和g++的编译转化为xlC或xlc++的编译

在大多数情况下,使用

xlC编译C++的源代码,xlc编译C的源代码,如果混合C和C++的源代码,则使用xlC编译链接。

六,安装配置 XL C/C++

XL C/C++要二进制兼容GNU gcc和g++编译器,首先应满足以下条件:

RHEL3

GCC 要求

版本要求

gcc

3.2.3

gcc-c++

3.2.3

glibc-devel (both 32 and 64-bit)

2.3.2

libstdc++-devel (both 32 and 64-bit)

3.2.3

SLES 9

GCC 要求

版本要求

gcc

3.3.3

gcc-c++

3.3.3

gcc-64bit

9