考虑以下情况:我正在编写一个函数,在其中有一个计算密集型循环。我使用TBB的
通常在TBB中并行化内部和外部循环都不是问题,因为与OpenMP不同,TBB中的嵌套并行化不会导致创建额外的线程。TBB只会创建更多任务。然而,有时在内部循环中创建更多任务的开销仍然不可取(在极端情况下,我观察到40%的速度减慢)。
那么是否有一种方法,在执行另一个
parallel_for
并行化了它。现在,问题是这个函数可能会单独使用,并从并行化中受益。或者它可能在另一个循环内部使用。在后一种情况下,外部循环也可以并行化。通常,仅并行化外部循环更好。通常在TBB中并行化内部和外部循环都不是问题,因为与OpenMP不同,TBB中的嵌套并行化不会导致创建额外的线程。TBB只会创建更多任务。然而,有时在内部循环中创建更多任务的开销仍然不可取(在极端情况下,我观察到40%的速度减慢)。
那么是否有一种方法,在执行另一个
parallel_for
算法时,让TBB不创建任何任务呢?类似于对于OpenMP的OMP_NESTED=FALSE
的效果。