OpenMP中的环境变量包括下面的一些:
・ OMP_SCHEDULE;
・ OMP_NUM_THREADS;
・ OMP_DYNAMIC;
・ OMP_NESTED.
OMP_SCHEDULE用来指定DO循环的调度方式,注意,只有那些调度方式在程序中被指定为RUNTIME类型的DO和PARALLEL
DO知道语句会受这个环境变量的影响。与在程序中给出调度参数一样,OMP_SCHEDULE可以取任何合法的调度类型(注意,不能为RUNTIME,因为这没有意义)与调度块大小(注意,调度块必须为正整数,当然也可以省略)。如果调度块大小参数被省略,那么除了STATIC类型外,其它的调度类型都会假设这个参数为1,而对于STATIC调度类型,它将把循环的各个叠代尽可能均匀的分配到各个处理器上。
设置OMP_SCHEDULE的例子(c shell,下同):
setenv OMP_SCHEDULE "GUIDED,4"
setenv OMP_SCHEDULE "dynamic"
OMP_NUM_THREADS用来设置OpenMP程序运行时工作线程的数目,它必须是一个正整数,不同的OpenMP实现会对合法的值作不同的规定(比如,pgf77编译器需要这个数为2的幂),当这个环境变量不设置时,缺省值与OpenMP编译器的实现有关,当请求得线程数操作了系统的容量,此时的程序行为也与编译器的实现有关。有两个例外,一个是程序中显示的调用OMP_SET_NUM_THREADS函数来设置程序线程数,一个是PARALLEL指导语句本身就给出了NUM_THREADS子句来指明对应的PARALLEL需要产生的线程数。当线程数动态调整开关(见下面的OMP_DYNAMIC)被打开的时候,这个环境变量给出的是程序中最大线程数。
设置OMP_NUM_THREADS例子:
setenv OMP_NUM_THREADS 8
OMP_DYNAMIC被称为线程数动态调整开关。当它的值为TRUE时,在执行PARALLEL时,运行时库会根据系统资源状况动态调整工作线程数目。当为FALSE时,这种动态调整被关闭。可以用OMP_SET_DYNAMIC调用来在程序中设定这个开关。这个变量的缺省值与OpenMP编译器的实现有关。
设置OMP_DYNAMIC的例子:
setenv OMP_DYNAMIC TRUE
OMP_NESTED是控制嵌套并行性的开关。当它的值为TRUE时,嵌套并行性允许,当为FALSE时,嵌套的并行块被当作串行部分执行。缺省值为FALSE。
设置OMP_NESTED的例子:
setenv OMP_NESTED TRUE
|