如何在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、POWER3TM和POWER4TM处理器
的功能,同时增加了对POWER5TM和POWER 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 |