XL C/C++ 功能部件的概述

与其它 XL 编译器的通用性
文档、联机帮助和技术支持
硬件和操作系统支持
高度可配置的编译器
语言标准一致性
与 GNU 的兼容性
源代码迁移和一致性检查
Mathematics Acceleration Subsystem 库
基本线性代数子程序
工具和实用程序
程序优化
64 位对象能力
共享内存并行化
OpenMP 伪指令
诊断列表
符号调试器支持

XL C/C++ Advanced Edition V8.0 for Linux 可以用于复杂且要进行大量计算的大型程序,包括使用 Fortran 程序进行的语言间调用。本节在较高层次讨论了 XL C/C++ 编译器的功能部件。它面向评估 XL C/C++ 的人以及要查找关于该产品的更多信息的新用户。

与其它 XL 编译器的通用性

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++ 及其功能部件的概述。您还可以找到以下形式的更广泛的产品文档:

硬件和操作系统支持

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++ 为您提供了大量功能部件,以允许您根据自己的独特编译要求来定制编译器。

编译器调用命令
XL C/C++ 提供了几个可以用来调用编译器的不同命令,例如,xlCxlc++xlc。每个调用命令都是唯一的,它们指示编译器定制编译输出以满足特定语言级别规范。提供编译器调用命令是为了支持所有标准化的 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

定制编译器配置文件
安装过程会在 /etc/opt/ibmcmp/vac/8.0/vac.cfg 处创建一个缺省的编译器配置文件。此配置文件包含几个定义编译器选项缺省设置的节。

编译过程可能需要频繁地进行调用以指定除 XL C/C++ 提供的缺省设置之外的编译器选项设置。如果是那样的话,XL C/C++ 提供了 vac_configure 实用程序,您可以使用该实用程序来创建其它配置文件。然后,您可以使用任何文本编辑器来修改那些文件以包含您自己的常用编译器选项设置。

有关创建和使用定制配置文件的更多信息,请参阅 Customizing the configuration file

语言标准一致性

编译器支持 C 和 C++ 的以下编程语言规范:

除了标准化语言级别以外,XL C/C++ 还支持语言扩展,包括:

有关 C 和 C++ 语言规范和扩展的更多信息,请参阅 Supported language standards

与 GNU 的兼容性

XL C/C++ 支持 GNU 编译器命令选项的子集以便于移植用 gccg++ 开发的应用程序。

在将 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 附带提供了下列库:

Mathematics Acceleration Subsystem 库

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

工具和实用程序

xlc_install
此交互式实用程序帮助您在系统上安装 XL C/C++
new_install
在安装 XL C/C++ 之后,运行此实用程序将会配置编译器以在系统上使用。
vac_configure
使用此实用程序来创建其它编译器配置文件,然后可以修改这些文件以包含您自己的编译器选项缺省设置定制集合。
cleanpdf 命令
与概要定向反馈相关的命令,用于管理 PDFDIR 目录。从指定的目录、PDFDIR 目录或当前目录除去所有概要分析信息。
mergepdf 命令
与概要定向反馈(PDF)相关的命令,在将两个或多个 PDF 记录合并为一个记录时,它提供了权衡它们的重要性的能力。PDF 记录必须从相同的可执行文件派生。
resetpdf 命令
resetpdf 命令的当前行为与 cleanpdf 命令相同,保留它是为了与其它平台上的较早发行版兼容。
showpdf 命令
显示在概要定向反馈练习运行(在选项 -qpdf1-qshowpdf 下的编译)中执行的所有过程的调用和块计数的命令。
gxlc 和 gxlc++ 实用程序
两种调用方法,它们将 GNU C 或 GNU C++ 调用命令转换为对应的 xlcxlC 命令并调用 XL C/C++ 编译器。这些实用程序的目的是减少对用 GNU 编译器构建的现有应用程序的 makefile 的更改并使得向 XL C/C++ 的过渡更方便。

程序优化

XL C/C++ 提供了几个可以帮助您控制程序优化的编译器选项。使用这些选项,您可以执行以下操作:

优化变换可以在运行时给予应用程序更好的整体性能。C 和 C++ 提供了一些针对各种受支持硬件的优化变换的组合。这些变换能够:

因为编译器支持完善的程序分析和变换,所以付出相对较小的开发努力就可能获得显著的性能提高。而且,XL C/C++ 启用了编程模型(如 OpenMP),这允许您编写高性能代码。

可能的话,在尝试对代码进行优化之前,应在没有优化的情况下测试并调试代码。

有关优化技巧的更多信息,请参阅 Optimizing your applications

有关与优化相关的编译器选项的总结,请参阅 Options for performance optimization

64 位对象能力

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++ 来开发并行化应用程序:

有关更多信息,请参阅 Parallelizing your programs

OpenMP 伪指令

OpenMP 伪指令是一组基于 API 的命令,它们受 XL C/C++ 和许多其它 IBM 以及非 IBM C、C++ 和 Fortran 编译器的支持。

可以使用 OpenMP 伪指令来指示编译器如何并行化特定循环。源代码中存在这些伪指令可使得编译器无需对并行代码执行任何并行分析。OpenMP 伪指令要求存在 Pthread 库以提供用于并行化的必要基础结构。

OpenMP 伪指令解决并行化应用程序的三个重要问题:

  1. 子句和伪指令可用于限定作用域的变量。通常,不应共享变量;即,每个处理器都应具有它自己的变量副本。
  2. 工作共享伪指令指定应如何将包含在代码的并行区域中的工作分布在各个 SMP 处理器上。
  3. 伪指令可用来控制处理器之间的同步。

XL C/C++ 支持 OpenMP API V2.5 规范。有关更多信息,请访问 www.openmp.org

诊断列表

编译器输出列表具有您可以包括或省略的可选节。有关适用的编译器选项及该列表本身的更多信息,请参阅XL C/C++ 编译器列表

符号调试器支持

当调试程序时,可以使用 gdb 或其它任何符号调试器。