嵌套并行区域提供一种直接的方法,可让更多线程参与到计算中。
例如,假定您的程序包含两级并行操作,并且将 OMP_NUM_THREADS 设置为 2。同时,假定您的系统有四个硬件线程,并且您希望使用全部四个硬件线程来加速程序的执行。只并行化任何一级将仅使用两个硬件线程。通过启用嵌套并行操作,即可使用全部四个硬件线程。
嵌套并行区域容易创建过多的线程,从而占用过多的系统资源。适当设置 OMP_THREAD_LIMIT 和 OMP_MAX_ACTIVE_LEVELS 可限制使用中的线程数,并防止过多占用系统资源而失控。
嵌套并行区域会增加开销。如果外部级别有足够的并行操作并且负载平衡,在计算的外部级别使用所有线程要比在内部级别创建嵌套并行区域更有效。
例如,假定您的程序包含两级并行操作且对负载进行平衡。假定您的系统有四个硬件线程,并且您希望使用全部四个硬件线程来加速此程序的执行。通常,与对外部并行区域使用两个线程并对内部并行区域使用另外两个线程作为辅助线程相比,对外部并行区域使用全部四个线程能产生更高的性能,因为嵌套并行区域会带来其他屏障。