OpenMP:障碍之间的单个区域内的比赛条件

时间:2018-09-19 14:58:40

标签: c++ openmp shared-memory race-condition

请考虑以下代码摘录,这是较大代码的一部分:

201     for (int iMesh = _meshByThread[iThread][0]; iMesh <= _meshByThread[iThread][1]; iMesh++){
202         _eq[iMesh]->updateDataPreBC(*_sol[iMesh], t);
203     }
204 #pragma omp barrier
205 #pragma omp single
206     {
207         for (size_t iBC = 0; iBC < _bndConditions.size(); iBC++)
208             _bndConditions[iBC]->apply(_sol, t);
209     }

Intel Inspector报告数据竞赛,并显示以下输出:

Intel Inspector Output

您可能想要一个完整的示例,但鉴于我的简单问题,我认为不需要该示例:

由于在单个区域之前有一个显式障碍,而在单个区域的末尾有一个隐式障碍,所以如果一个线程在单个区域内,则所有其他线程都应该在这两个障碍之间,对吗?

换句话说,是否有一个线程位于208行(在单个区域内),而另一个线程位于202行(在单个区域外),如Intel Inspector所说?如果不是,则为假阳性(或未定义的行为,在代码中的其他地方发生)。

0 个答案:

没有答案