1
我有一个C++的OpenMP代码看起来这一点:OMP屏障嵌套线程
#pragma omp parallel proc_bind(spread), num_threads(ncpu)
{
<some code>
#pragma omp parallel proc_bind(close), num_threads(ncore)
{
<some more code...>
#pragma omp barrier
}/* End of Level 2 threads*/
}/* End of Level 1 threads*/
这将创建2级嵌套螺纹(总共16个线程)。我的问题是我需要屏障来延伸两层线程。因为它现在是每个8线程的第2级群组将等待其群组成员,但是当一个群组完成时,它将继续前进,而不管其他8个线程的组。有没有办法建立一个在顶层运作的障碍? (没有终止L2并行区域并重新创建它)
对不起,只是在例子中忘了他们......我确实有他们在真正的代码 – Joel
,但如果总线程数为100k,那么在每个障碍处它们需要在它们之间的存储器切换中保持10万个堆栈。 –