XL C/C++ Advanced Edition V8.0 for Linux 可以用于复杂且要进行大量计算的大型程序,包括使用 Fortran 程序进行的语言间调用。本节在较高层次讨论了 XL C/C++ 编译器的功能部件。它面向评估 XL C/C++ 的人以及要查找关于该产品的更多信息的新用户。
XL C/C++ 与 XL C 和 XL Fortran 一起组成 XL 编译器系列。
XL 编译器是从在各种平台(如 AIX、Linux 分发、OS/390、OS/400、z/OS 和 z/VM 操作系统)和编程语言之间共享编译器功能和优化技术的公共代码库派生的 IBM C、C++ 和 Fortran 编译器这些较大系列的一部分。公共代码库除了符合国际编程语言标准之外,还有助于确保在多个操作系统和硬件平台之间编译器性能是一致的且容易移植程序。
XL 编译器可供在 AIX 和选择的 Linux 分发上使用。
本指南提供了 XL C/C++ 及其功能部件的概述。您还可以找到以下形式的更广泛的产品文档:
- 自述文件。
- 可安装的联机帮助页。
- 基于 HTML 的信息系统。
- 可移植文档格式(PDF)文档。
- 基于 Web 的联机技术支持。
XL C/C++ Advanced Edition V8.0 for Linux 支持若干个 Linux 分发。有关受支持的分发和需求的完整列表,请参阅自述文件和 System prerequisites。
编译器、编译器的库及其生成的目标程序将在具有必需的软件和磁盘空间的所有 POWER3(TM)、POWER4(TM)、POWER5(TM)、POWER5+(TM)、PowerPC(R) 和 PowerPC 970 系统上运行。
为了最大限度地利用不同的硬件配置,编译器根据用于执行应用程序的机器的配置提供了许多性能调整选项。
XL C/C++ 为您提供了大量功能部件,以允许您根据自己的独特编译要求来定制编译器。
编译器还提供了大多数调用命令的相应“_r”版本,例如,xlC_r。这些“_r”调用指示编译器将目标文件链接和绑定至线程安全组件和库,并为编译器创建的数据和过程生成线程安全目标代码。
有关 XL C/C++ 编译器调用命令的更多信息,请参阅使用 XL C/C++ 进行编译或 Invoking the compiler or a compiler component。
XL C/C++ 使您可以通过环境变量、编译器配置文件、命令行选项和 C 或 C++ 程序源文件中嵌入的编译器伪指令语句的组合来指定编译器选项。
有关 XL C/C++ 编译器选项的更多信息,请参阅 Compiler options reference。
编译过程可能需要频繁地进行调用以指定除 XL C/C++ 提供的缺省设置之外的编译器选项设置。如果是那样的话,XL C/C++ 提供了 vac_configure 实用程序,您可以使用该实用程序来创建其它配置文件。然后,您可以使用任何文本编辑器来修改那些文件以包含您自己的常用编译器选项设置。
有关创建和使用定制配置文件的更多信息,请参阅 Customizing the configuration file。
编译器支持 C 和 C++ 的以下编程语言规范:
- ISO/IEC 9899:1999(C99)
- ISO/IEC 9899:1990(称为 C89)
- ISO/IEC 14882:2003(称为标准 C++)
- ISO/IEC 14882:1998,C++ 语言的第一个正式规范(称为 C++98)
除了标准化语言级别以外,XL C/C++ 还支持语言扩展,包括:
- 用于支持并行化编程的 OpenMP 扩展。
- 用于支持 VMX 向量编程的语言扩展。
- GNU C 和 C++ 语言扩展的子集。
有关 C 和 C++ 语言规范和扩展的更多信息,请参阅 Supported language standards。
XL C/C++ 支持 GNU 编译器命令选项的子集以便于移植用 gcc和 g++ 开发的应用程序。
在将 gxlc 或 gxlc++ 调用命令与选择的 GNU 编译器选项一起使用时,可获得此支持。在调用编译器之前,编译器将这些选项映射至它们的对等 XL C/C++ 编译器选项。
gxlc 和 gxlc++ 调用命令使用 /etc/opt/ibmcmp/vac/8.0/gxlc.cfg 纯文本配置文件来控制 GNU 至 XL C/C++ 选项映射和缺省值。您可以定制 /etc/opt/ibmcmp/vac/8.0/gxlc.cfg 文件以更好地满足您可能有的任何独特编译需求的需要。有关更多信息,请参阅 Reusing GNU C/C++compiler options with gxlc and gxlc++。
XL C/C++ 将 GNU C 和 GNU C++ 头文件与 GNU C 和 C++ 运行时库一起使用,以生成与用 GNU 编译器 GCC V3.3 生成的代码是二进制兼容的代码。应用程序的一些部分可用 XL C/C++ 构建并可将它们与用 GCC 构建的一些部分组合在一起来生成应用程序,并且该应用程序能正常运行就好像它是单独用 GCC 构建的一样。
XL C/C++ 通过提供指示编译器将应用程序编译到特定语言级别的编译器调用命令,帮助保护您在现有 C 和 C++ 源代码中的投资。您也可以使用 -qlanglvl 编译器选项来指定一个给定的语言级别,如果程序源文件中的语言或语言扩展元素不符合该语言级别,则编译器将发出警告、错误和严重错误消息。
有关更多信息,请参阅 -qlanglvl。
XL C/C++ Advanced Edition V8.0 for Linux 附带提供了下列库:
IBM Mathematics Acceleration Subsystem(MASS)库由专门为了在 PowerPC 处理器体系结构上获取最优性能而进行了充分调整的标量和向量内部函数组成。您可以选择 MASS 库来在各种各样的处理器上支持高性能计算,也可以选择已针对特定处理器系列进行了调整的库。
MASS 库支持 32 位和 64 位编译方式,它们是线程安全的并在其相应的 libm 例程上提供了改进的性能。当您请求对应用程序执行特定级别的优化时会自动调用这些库。您也可以显式地调用 MASS 函数而不必考虑优化选项是否生效。
有关更多信息,请参阅 Using the Mathematical Acceleration Subsystem。
libxlopt 库中附带提供了高性能代数函数的 BLAS 集合。这些功能使您能够执行以下操作:
有关使用 BLAS 函数的更多信息,请参阅 Using the Basic Linear Algebra Subprograms。
XL C/C++ 提供了几个可以帮助您控制程序优化的编译器选项。使用这些选项,您可以执行以下操作:
优化变换可以在运行时给予应用程序更好的整体性能。C 和 C++ 提供了一些针对各种受支持硬件的优化变换的组合。这些变换能够:
因为编译器支持完善的程序分析和变换,所以付出相对较小的开发努力就可能获得显著的性能提高。而且,XL C/C++ 启用了编程模型(如 OpenMP),这允许您编写高性能代码。
可能的话,在尝试对代码进行优化之前,应在没有优化的情况下测试并调试代码。
有关优化技巧的更多信息,请参阅 Optimizing your applications。
有关与优化相关的编译器选项的总结,请参阅 Options for performance optimization。
XL C/C++ 编译器的 64 位对象能力满足了更大存储器需求和更大处理能力的需要。Linux 操作系统提供一个环境,该环境允许您开发和执行通过使用 64 位地址空间来利用 64 位处理器的程序。
为了支持可以适合 64 位地址空间的更大的可执行文件,使用了单独的 64 位对象格式来满 足 64 位可执行文件的需要。链接程序绑定 64 位对象以创建 64 位的可执行文件。注意,绑定在一起的对象必须具有相同对象格式。以下方案是不允许的,将不能装入和/或执行:
在 64 位和 32 位平台上,32 位可执行文件将像它们当前在 32 位平台上一样继续运行。
XL C/C++ 主要通过使用 -q64 和 -qarch 编译器选项来支持 64 位方式。此组合确定目标体系结构的位方式和指令集。
有关更多信息,请参阅 Using 32-bit and 64-bit modes。
XL C/C++ Advanced Edition V8.0 for Linux 支持多处理器系统体系结构的应用程序开发。您可以使用下列任何一种方法通过 XL C/C++ 来开发并行化应用程序:
- 基于伪指令的共享内存并行化(OpenMP )
- 指示编译器自动生成共享内存并行化
- 基于消息传递的共享或分布式内存并行化(MPI)
- POSIX 线程(Pthread)并行化
- 使用 fork() 和 exec() 的低级 UNIX 并行化
有关更多信息,请参阅 Parallelizing your programs。
OpenMP 伪指令是一组基于 API 的命令,它们受 XL C/C++ 和许多其它 IBM 以及非 IBM C、C++ 和 Fortran 编译器的支持。
可以使用 OpenMP 伪指令来指示编译器如何并行化特定循环。源代码中存在这些伪指令可使得编译器无需对并行代码执行任何并行分析。OpenMP 伪指令要求存在 Pthread 库以提供用于并行化的必要基础结构。
OpenMP 伪指令解决并行化应用程序的三个重要问题:
- 子句和伪指令可用于限定作用域的变量。通常,不应共享变量;即,每个处理器都应具有它自己的变量副本。
- 工作共享伪指令指定应如何将包含在代码的并行区域中的工作分布在各个 SMP 处理器上。
- 伪指令可用来控制处理器之间的同步。
XL C/C++ 支持 OpenMP API V2.5 规范。有关更多信息,请访问 www.openmp.org。
编译器输出列表具有您可以包括或省略的可选节。有关适用的编译器选项及该列表本身的更多信息,请参阅XL C/C++ 编译器列表。
当调试程序时,可以使用 gdb 或其它任何符号调试器。