许多新的功能部件和增强功能都可归入优化和性能调整类别。
-qarch 编译器选项控制为指定的机器体系结构生成的特定指令。-qtune 编译器选项调整指令、调度和其它优化方法以在指定的硬件上增强性能。这些选项共同起作用以生成对于指定的体系结构可获得最佳性能的应用程序代码。
XL C/C++ V8.0 增大了可用于 -qarch 编译器选项的子选项列表,以支持那些支持 VMX 指令集的处理器和新提供的 POWER5+ 处理器。提供了下列新的 -qarch 选项:
- -qarch=ppc64v
- -qarch=pwr5x
XL C/C++ 包括已充分调整的数学函数,它们可以在很大程度上提高具有大量数学计算的应用程序的性能。这些函数是通过以下高性能库提供的:
有关使用 MASS 库的更多信息,请参阅 Using the Mathematical Acceleration Subsystem。
有关使用 BLAS 函数的更多信息,请参阅 Using the Basic Linear Algebra Subprograms。
下表中的条目描述新增或已更改且在以上各节中尚未提及的编译器选项和伪指令。
此处提供的信息只是一个简短的概述。有关这些编译器选项的更多信息,请参阅 Options for performance optimization。
选项/伪指令 | 描述 |
---|---|
-qfloat | -qfloat
添加了下列新的子选项:
|
-qipa | -qipa
添加了下列新的子选项:
|
-O | 指定 -O3 编译器选项现在指示编译器也采用
-qhot=level=0 编译器选项设置。
指定 -O4 或 -O5 编译器选项现在指示编译器也采用 -qhot=level=1 编译器选项设置。 |
下表列示了本发行版新增的内置函数。有关由 XL C/C++ 提供的内置函数的更多信息,请参阅 Built-in functions for POWER and PowerPC architectures。
函数 | 描述 |
---|---|
void __builtin_return_address (unsigned int level); | 返回当前函数或它的一个调用程序的返回地址,其中 level 是常量文字,指示要在调用堆栈中扫描的帧数。 |
void __builtin_frame_address (unsigned int level); | 返回当前函数或它的一个调用程序的函数帧地址,其中 level 是常量文字,指示要在调用堆栈中扫描的帧数 |
int __compare_and_swap(volatile int* addr, int* old_val_addr, int new_val); | 执行将单字变量的内容与存储的旧值进行比较的原子操作。 |
int __compare_and_swaplp(volatile long* addr, long* old_val_addr, long new_val); | 执行将双字变量的内容与存储的旧值进行比较的原子操作。 |
int __fetch_and_add(volatile int* addr, int val); | 在单个原子操作中将由 addr 指定的单字增加由 val 指定的数量。 |
long __fetch_and_addlp(volatile long* addr, long val); | 在单个原子操作中将由 addr 指定的双字增加由 val 指定的数量。 |
unsigned int __fetch_and_and(volatile unsigned int* addr, unsigned int val); | 在单个原子操作中,通过将该值与输入 val 参数进行“与”运算,清除由 addr 指定的单字中的位。 |
unsigned long __fetch_and_andlp(volatile unsigned long* addr, unsigned long val); | 在单个原子操作中,通过将该值与输入 val 参数进行“与”运算,清除由 addr 指定的双字中的位。 |
unsigned int __fetch_and_or(volatile unsigned int* addr, unsigned int val); | 在单个原子操作中,通过将该值与输入 val 参数进行“或”运算,设置由 addr 指定的单字中的位。 |
unsigned long __fetch_and_orlp(volatile unsigned long* addr, unsigned long val); | 在单个原子操作中,通过将该值与输入 val 参数进行“或”运算,设置由 addr 指定的双字中的位。 |
unsigned int __fetch_and_swap(volatile unsigned int* addr, unsigned int val); | 在单个原子操作中,将由 addr 指定的单字设置为该值或输入 val 参数并返回内存位置的原始内容。 |
double __frim(double val); | 以双精度格式获取输入 val,将 val 向下舍入为下一个较小的整数值,并以双精度格式返回结果。仅对 POWER5+ 处理器有效。 |
float __frims(float val); | 以浮点格式获取输入 val,将 val 向下舍入为下一个较小的整数值,并以浮点格式返回结果。仅对 POWER5+ 处理器有效。 |
double __frin(double val); | 以双精度格式获取输入 val,将 val 四舍五入为最接近的整数值,并以双精度格式返回结果。仅对 POWER5+ 处理器有效。 |
float __frins(float val); | 以浮点格式获取输入 val,将 val 四舍五入为最接近的整数值,并以浮点格式返回结果。仅对 POWER5+ 处理器有效。 |
double __frip(double val); | 以双精度格式获取输入 val,将 val 向上舍入为下一个较大的整数值,并以双精度格式返回结果。仅对 POWER5+ 处理器有效。 |
float __frips(float val); | 以浮点格式获取输入 val,将 val 向上舍入为下一个较大的整数值,并以浮点格式返回结果。仅对 POWER5+ 处理器有效。 |
double __friz(double val); | 以双精度格式获取输入 val,将 val 舍入为最接近零的下一个整数值,并以双精度格式返回结果。仅对 POWER5+ 处理器有效。 |
float __frizs(float val); | 以浮点格式获取输入 val,将 val 舍入为最接近零的下一个整数值,并以浮点格式返回结果。仅对 POWER5+ 处理器有效。 |
long __ldarx(volatile long* addr); | 生成“装入双字并保留索引”(ldarx)指令。可以将此指令与随后的 stwcx. 指令配合使用以在指定的内存位置实施“读-修改-写”。 |
int __lwarx(volatile int* addr); | 生成“装入单字并保留索引”(lwarx)指令。可以将此指令与随后的 stwcx. 指令配合使用以在指定的内存位置实施“读-修改-写”。 |
int __stdcx(volatile long* addr, long val); | 生成“存储双字条件索引”(stdcx.)指令。可以将此指令与前面的 ldarx 指令配合使用以在指定的内存位置实施“读-修改-写”。 |
int __stwcx(volatile int* addr, int val); | 生成“存储单字条件索引”(stwcx.)指令。可以将此指令与前面的 lwarx 指令配合使用以在指定的内存位置实施“读-修改-写”。 |
unsigned long __mftb(); | 生成“从时基移动”(mftb)硬件指令。 |
unsigned int __mftbu(); | 生成“从时基上面移动”(mftb)硬件指令。 |
相关信息