嵌套并行区域提供一种直接的方法来允许多个线程参与到计算中。
例如,假定您的程序包含两级并行操作,并且每个级别的并行操作等级为 2。此外,还假定您的系统有四个 CPU,您要使用全部四个 CPU 来加快此程序的执行速度。如果只并行化其中任意一个级别,则只需使用两个 CPU。您想要并行化两个级别。
嵌套并行区域容易创建过多的线程,从而占用过多的系统资源。适当设置 OMP_THREAD_LIMIT 和 OMP_MAX_ACTIVE_LEVELS 可限制使用中的线程数,并防止对系统资源的过度使用失控。
创建嵌套并行区域会增加开销。如果在外部级别有足够的并行操作并且负载平衡,通常在计算的外部级别使用所有线程要比在内部级别创建嵌套并行区域更有效。
例如,假定您的程序包含两级并行操作。外部级别的并行操作等级为 4,并且负载平衡。您的系统具有四个 CPU,您要使用所有四个 CPU 来加快此程序的执行速度。那么,通常将所有 4 个线程用于外部级别比将 2 个线程用于外部并行区域而将其他 2 个线程用作内部并行区域的从属线程的性能要好。