4. 环境变量

本章介绍 OpenMP C 和 C++ API 环境变量(或类似的平台特定机制),这些变量可控制并行代码的执行。 环境变量的名称必须大写。 分配给它们的值不区分大小写,并且可能具有前导空格和尾随空格。 程序启动后对值的修改将被忽略。

环境变量如下所示:

本章中的示例仅演示如何在 Unix C shell (csh) 环境中设置这些变量。 在 Korn shell 和 DOS 环境中,操作如下所示:

csh:
setenv OMP_SCHEDULE "dynamic"

ksh:
export OMP_SCHEDULE="dynamic"

DOS:
set OMP_SCHEDULE="dynamic"

4.1 OMP_SCHEDULE

OMP_SCHEDULE 仅适用于具有计划类型 runtimeforparallel for 指令。 可在运行时设置所有此类循环的计划类型和区块大小。 将此环境变量设置为任何已识别的计划类型和可选的 chunk_size。

对于具有 runtime 以外的计划类型的 forparallel for 指令,将忽略 OMP_SCHEDULE。 此环境变量的默认值是实现定义的。 如果已设置可选 chunk_size,该值必须为正值。 如果未设置 chunk_size,则假定值为 1,但计划为 static 时除外。 对于 static 计划,默认区块大小设置为循环迭代空间除以应用于循环的线程数。

示例:

setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"

交叉引用

4.2 OMP_NUM_THREADS

OMP_NUM_THREADS 环境变量设置要在执行期间使用的默认线程数。 如果通过调用 omp_set_num_threads 库例程显式更改该数字,则忽略 OMP_NUM_THREADS。 如果 parallel 指令上有一个显式的 num_threads 子句,则也会忽略它。

OMP_NUM_THREADS 环境变量的值必须是一个正整数。 其效果取决于是否启用了线程数的动态调整。 有关 OMP_NUM_THREADS 环境变量和线程动态调整之间的交互的完整规则集,请参阅第 2.3 部分

在以下情况中,要使用的线程数是实现定义的:

  • 未指定 OMP_NUM_THREADS 环境变量,
  • 指定的值不是正整数,或者
  • 该值大于系统可支持的最大线程数。

示例:

setenv OMP_NUM_THREADS 16

交叉引用

4.3 OMP_DYNAMIC

OMP_DYNAMIC 环境变量启用或禁用可用于执行并行区域的线程数的动态调整。 通过调用 omp_set_dynamic 库例程显式启用或禁用动态调整时,将忽略 OMP_DYNAMIC。 其值必须为 TRUEFALSE

如果 OMP_DYNAMIC 设置为 TRUE,则运行时环境可调整用于执行并行区域的线程数,以便最好地使用系统资源。 如果 OMP_DYNAMIC 设置为 FALSE,则禁用动态调整。 默认条件是“实现定义的”。

示例:

setenv OMP_DYNAMIC TRUE

交叉引用

4.4 OMP_NESTED

除非通过调用 omp_set_nested 库例程来启用或禁用嵌套并行,否则由 OMP_NESTED 环境变量启用或禁用嵌套并行。 如果 OMP_NESTED 设置为 TRUE,则启用嵌套并行。 如果 OMP_NESTED 设置为 FALSE,则禁用嵌套并行。 默认值为 FALSE

示例:

setenv OMP_NESTED TRUE

交叉引用