#pragma simd_level

适用的调用

表 1. 接受给定编译指示的调用
编译指示 (pragma) xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
#pragma simd_level    
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

优化和调整

用途

控制个别循环的向量指令的编译器代码生成。

当与算法密集型任务 (如多媒体应用程序) 一起使用时,向量指令可以提供高性能。 您可以灵活地逐个循环地控制自动简单化的攻击性,并且可以通过此精细颗粒控制实现进一步的性能增益。

受支持的级别从 0 到 10。 level (0) 指示对遵循 pragma 伪指令的循环不执行自动简单化。 level (10) 指示在循环上执行最激进的自动辛化形式。 通过此 pragma 伪指令,您可以逐个循环地控制自动简单化行为。

语法

读取语法图跳过可视语法图#pragmasimd_level( n )

参数

n
从 0 到 10 的标量整数初始化表达式,用于在遵循 pragma 伪指令的循环上指定自动简单化的攻击性。

使用量

缺省情况下,如果 -qsimd=auto 生效,那么没有 simd_level pragma 的循环将设置为 simd 级别 5。

#pragma simd_level (0) 等效于 #pragma nosimd,其中不会在 pragma 伪指令后面的循环上执行自动简单化。

#pragma simd_level (10) 指示编译器对最积极地遵循 pragma 伪指令的循环执行自动简单化,包括绕过成本分析。

规则

#pragma simd_level 伪指令的规则列示如下:
  • #pragma simd_level 伪指令仅适用于支持向量指令的体系结构以及与 -qsimd=auto配合使用时。
  • #pragma simd_level 伪指令适用于 whiledo whilefor 循环。
  • #pragma simd_level 伪指令仅适用于紧跟其后的循环。 该伪指令对嵌套在指定循环中的其他循环没有影响。 可以通过指定单独的 #pragma simd_level 伪指令为内部和外部循环设置不同的 simd 级别。
  • #pragma simd_level 伪指令可以与循环优化 (-qhot) 和 OpenMP 伪指令混合使用,而无需任何特定优化级别。 有关 -qhot 和 OpenMP 伪指令的更多信息,请参阅本文档中的 -qhot 以及 IBM XL C/C++ Optimization and Programming Guide中的 Using OpenMP 伪指令

示例

...
#pragma simd_level(10)
for (i=1; i<1000; i++) { 
/* program code */

} ...