OMP_THREAD_LIMIT 环境变量的设置控制可用于整个程序的最大 OpenMP 线程数。这一数量包括初始(或主)线程以及 OpenMP 运行时库创建的 OpenMP 辅助线程。缺省情况下,可用于整个程序的最大 OpenMP 线程数为 1024(一个初始线程或主线程及 1023 个 OpenMP 辅助线程)。
请注意,线程池仅由 OpenMP 运行时库创建的 OpenMP 辅助线程组成。该池不包含初始(或主)线程或由用户程序显式创建的任何线程。
如果将 OMP_THREAD_LIMIT 设置为 1,则辅助线程池将为空,并且所有并行区域将由一个线程(初始线程或主线程)执行。
以下示例输出表明,如果池中不包含足够数量的辅助线程,并行区域可能会获得较少的辅助线程。该代码与Example 3–1 中的代码相同,除了将环境变量 OMP_THREAD_LIMIT 设置为 6。使所有并行区域同时处于活动状态所需的线程数为 8 个。所以,池至少需要包含 7 个辅助线程。如果将 OMP_THREAD_LIMIT 设置为 6,则池中将最多包含 5 个辅助线程。因此,四个最里面的并行区域中的两个区域可能无法获取所请求的所有辅助线程。以下示例显示一个可能的结果。
% setenv OMP_NESTED TRUE % OMP_THREAD_LIMIT 6 % a.out | sort 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