Привет, я читаю этот сайт http://www.viva64.com/en/a/0054/ и для номера 17, он говорит, что код ниже без барьера неправильный. Зачем ? Я читал в http://bisqwit.iki.fi/story/howto/openmp/#BarrierDirectiveAndTheNowaitClause, в конце каждого параллельного блока есть неявный барьер, а в конце каждого раздела - для и для одного оператора, если не используется директива nowait.Неявный барьер OpenMP
struct MyType
{
~MyType();
};
MyType threaded_var;
#pragma omp threadprivate(threaded_var)
int main()
{
#pragma omp parallel
{
...
#pragma omp barrier // code is wrong without barrier.
}
}
Кто-то объяснит мне, пожалуйста. Thanks
насколько я понимаю [есть осущий icit барьер в конце параллельной области] (https://computing.llnl.gov/tutorials/openMP/#ParallelRegion). Предполагая, что это правда, я думаю, что точка № 17 неверна в ссылке. –
Просто проверил спецификацию OpenMP 4.5, и он говорит: «В конце параллельной конструкции есть неявный барьер». –
В спецификации указано: «Сохранение всех копий переменной threadprivate освобождается в соответствии с тем, как статические переменные обрабатываются на базовом языке, но в неопределенной точке программы». –