OpenMP 环境变量

来源:互联网 发布:c语言如何运用函数库 编辑:程序博客网 时间:2024/06/06 18:34


OpenMP 规范定义了四个用于控制 OpenMP 程序执行的环境变量。下表对它们进行了概括。

表 2–1 OpenMP 环境变量

环境变量 

功能 

OMP_SCHEDULE

为指定了 RUNTIME 调度类型的 DOPARALLEL DOforparallel for 指令/pragma 设置调度类型。如果未定义,则使用缺省值 STATIC为 "type[,chunk]"

示例:setenv OMP_SCHEDULE 'GUIDED,4'

OMP_NUM_THREADS PARALLEL

设置在执行并行区域期间所要使用的线程数。使用 NUM_THREADS 子句或调用OMP_SET_NUM_THREADS() 可以覆盖此值。如果未设置,则使用缺省值 1。value 是一个正整数。为与传统程序兼容,设置 PARALLEL 环境变量的效果与设置 OMP_NUM_THREADS 的效果相同。但如果将这两个环境变量都设置为不同的值,运行时库会发出一个错误消息。

示例:setenv OMP_NUM_THREADS 16

OMP_DYNAMIC

启用或禁用可用于执行并行区域的线程数的动态调整。如果未设置,则使用缺省值 TRUE为 TRUE 或FALSE

示例:setenv OMP_DYNAMIC FALSE

OMP_NESTED

启用或禁用嵌套并行操作。

 为 TRUE 或 FALSE。缺省值为 FALSE

示例:setenv OMP_NESTED FALSE

其他多重处理环境变量也会影响 OpenMP 程序的执行,但它们不是 OpenMP 规范的一部分。下表对它们进行了概括。

表 2–2 多重处理环境变量

环境变量 

功能 

SUNW_MP_WARN

控制 OpenMP 运行时库发出的警告消息。如果设置为 TRUE,运行时库会给 stderr 发出警告消息;如果设置为 FALSE,则禁用警告消息。缺省值为 FALSE

OpenMP 运行时库能够检查很多常见的 OpenMP 违规行为,如错误的嵌套和死锁。运行时检查会增加程序执行的开销。请参见第 3 章,实现定义的行为。

如果 SUNW_MP_WARN 设置为 TRUE,则运行时库会向 stderr 发出警告消息。如果程序注册一个回调函数以接受警告消息,则运行时库也将发出警告消息。程序可通过调用以下函数来注册用户回调函数:


   int sunw_mp_register_warn (void (*func)(void *));

回调函数的地址将作为参数传递给 sunw_mp_register_warn()。如果成功注册了回调函数,该函数将返回 0,如果注册失败则返回 1。

如果程序已注册了回调函数,libmtsk 将调用该注册的函数,将一个指针传递给包含错误消息的本地化字符串。从回调函数返回后,指向的内存将不再有效。

示例: 

setenv SUNW_MP_WARN TRUE

SUNW_MP_THR_IDLE

控制 OpenMP 程序中空闲线程的状态,这些空闲线程正在某个屏障处等待或者正在等待要处理的新并行区域。可以将该值设置为下列某个值:SPINSLEEPSLEEP(times)SLEEP(timems)SLEEP( timemc),其中 time 是一个整数,指定时间量,s、ms 和 mc 指定时间单位(分别为秒、毫秒和微秒)。

SPIN 指定空闲线程在屏障处等待时或等待要处理的新并行区域时应旋转。不带时间参数的SLEEP 指定空闲线程应立即休眠。带时间参数的 SLEEP 指定线程进入休眠状态前应旋转等待的时间量。

缺省情况下,空闲线程经过一段时间的旋转等待后将进入休眠状态。SLEEP、SLEEP(0)、SLEEP(0s)、SLEEP(0ms) 和 SLEEP(0mc) 都是等效的。

示例: 


setenv SUNW_MP_THR_IDLE SPIN setenv SUNW_MP_THR_IDLE SLEEP setenv SUNW_MP_THR_IDLE SLEEP(2s) setenv SUNW_MP_THR_IDLE SLEEP(20ms) setenv SUNW_MP_THR_IDLE SLEEP(150mc)

SUNW_MP_PROCBIND

该环境变量仅能在 Solaris 系统上工作。SUNW_MP_PROCBIND 环境变量可用于将 OpenMP 程序的线程绑定到正在运行的系统上的虚拟处理器。虽然可以通过处理器绑定来增强性能,但是如果将多个线程绑定到同一虚拟处理器,则会导致性能下降。有关详细信息,请参见2.4 Solaris 上的处理器绑定。

SUNW_MP_MAX_POOL_THREADS

指定线程池的最大大小。线程池只包含 OpenMP 运行时库创建的非用户线程。它不包含主线程或由用户程序显式创建的任何线程。如果将此环境变量设置为零,则线程池将为空,并且所有并行区域都将由一个线程执行。如果未指定,则使用缺省值 1023。有关详细信息,请参见4.2 控制嵌套并行操作。

SUNW_MP_MAX_NESTED_LEVELS

指定活动嵌套并行区域的最大深度。活动嵌套深度大于此环境变量值的任何并行区域将只由一个线程来执行。如果并行区域是 OpenMP 并行区域(其 IF 子句的值为 false),则不会将该区域视为活动区域。如果未指定,则使用缺省值 4。有关详细信息,请参见4.2 控制嵌套并行操作。

STACKSIZE

设置每个线程的栈大小。值以千字节为单位。缺省线程栈大小在 32 位 SPARC V8 和 x86 平台上为 4 Mb,在 64 位 SPARC V9 和 x86 平台上为 8 Mb。

示例: 

setenv STACKSIZE 8192 将线程栈大小设置为 8 Mb

STACKSIZE 环境变量还接受后缀为 B(表示字节)、K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)的数值。缺省单位为千字节。

SUNW_MP_GUIDED_WEIGHT

设置加权因子,该因子用于确定在使用 GUIDED 调度的循环中为线程分配的块的大小。该值应该是正浮点数,并且应用于程序中所有使用 GUIDED 调度的循环。如果未设置,则采用缺省值 2.0。


原创粉丝点击