#pragma simd_level
适用的调用
| 编译指示 (pragma) | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
|---|---|---|---|---|
#pragma simd_level |
✓ | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
用途
控制个别循环的向量指令的编译器代码生成。
当与算法密集型任务 (如多媒体应用程序) 一起使用时,向量指令可以提供高性能。 您可以灵活地逐个循环地控制自动简单化的攻击性,并且可以通过此精细颗粒控制实现进一步的性能增益。
受支持的级别从 0 到 10。 level (0) 指示对遵循 pragma 伪指令的循环不执行自动简单化。 level (10) 指示在循环上执行最激进的自动辛化形式。 通过此 pragma 伪指令,您可以逐个循环地控制自动简单化行为。
语法
参数
- 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 伪指令适用于
while,do while和for循环。 - #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 */
} ...