Oracle Solaris Studio 12.2:OpenMP API 用户指南

4.2.2 OMP_THREAD_LIMIT

OpenMP 运行时库维护一个线程池,该线程池可用作并行区域中的从属线程。可通过设置 OMP_THREAD_LIMIT 环境变量来控制池中的线程数。缺省情况下,池中的最大线程数为 1023。

线程池只包含运行时库创建的非用户线程。它不包含初始线程或由用户程序显式创建的任何线程。

如果将 OMP_THREAD_LIMIT 设置为 1(或将 SUNW_MP_MAX_POOL_THREADS 设置为零),线程池将为空,所有并行区域都将由一个线程来执行。

以下示例表明,如果池中的线程不足,并行区域将获得较少的线程。代码与上一示例相同。使所有并行区域同时处于活动状态所需的线程数为 8 个。所以,池至少需要包含 7 个线程。如果将 OMP_THREAD_LIMIT 设置为 6(或将 SUNW_MP_MAX_POOL_THREADS 设置为 5),池最多包含 5 个从属线程。这意味着四个最里面的并行区域中的两个区域可能无法获取所请求的所有从属线程。一种可能的结果如下所示。


% setenv OMP_NESTED TRUE
% OMP_THREAD_LIMIT 6
% a.out
Level 1: number of threads in the team - 2
Level 2: number of threads in the team - 2
Level 2: number of threads in the team - 2
Level 3: number of threads in the team - 2
Level 3: number of threads in the team - 2
Level 3: number of threads in the team - 1
Level 3: number of threads in the team - 1