Помогите правильно перевести выделенное жирным. Никак не пойму смысла этого утверждения.
* When a thread reaches a PARALLEL directive, it creates a team of threads and becomes the master of the team. The master is a member of that team and has thread number 0 within that team.
* Starting from the beginning of this parallel region, the code is duplicated and all threads will execute that code.
* There is an implied barrier at the end of a parallel section. Only the master thread continues execution past this point.
* If any thread terminates within a parallel region, all threads in the team will terminate, and the work done up until that point is undefined.
Здравствуйте, barmale-y, Вы писали:
BY>Помогите правильно перевести выделенное жирным. Никак не пойму смысла этого утверждения.
BY>BY> * If any thread terminates within a parallel region, all threads in the team will terminate, and the work done up until that point is undefined.
Как-то так:
Если какая-либо из нитей завершится внутри параллельной секции, то и все нити из группы также завершатся, и рабочая программа, выполненная выше до этой точки, будет в неопределенном состоянии.
Здравствуйте, wagant, Вы писали:
W>Здравствуйте, barmale-y, Вы писали:
BY>>Помогите правильно перевести выделенное жирным. Никак не пойму смысла этого утверждения.
BY>>BY>> * If any thread terminates within a parallel region, all threads in the team will terminate, and the work done up until that point is undefined.
W>Как-то так:
W>Если какая-либо из нитей завершится внутри параллельной секции, то и все нити из группы также завершатся, и рабочая программа, выполненная выше до этой точки, будет в неопределенном состоянии.
Что же здесь имеется ввиду, что нить
1) аварийно завершится
2) закончит работу нормально
Так вот и не понятно: "завершится" не значит аварийно прервется. Вроде логично, что если нить завершилась (отработала) и она master (нить с 0 индексом), то она должна ожидать завершения остальных нитей. Т.е. программа ожидает (определенное сосотояние).
P.S. штурмую
OpenMP Blaise Barney, Lawrence Livermore National Laboratory, может гуру в openMP посоветует какое-либо все исчерпывающее руководство по OpenMP
Здравствуйте, barmale-y, Вы писали:
BY>Здравствуйте, wagant, Вы писали:
W>>Здравствуйте, barmale-y, Вы писали:
BY>>>Помогите правильно перевести выделенное жирным. Никак не пойму смысла этого утверждения.
BY>>>BY>>> * If any thread terminates within a parallel region, all threads in the team will terminate, and the work done up until that point is undefined.
W>>Как-то так:
W>>Если какая-либо из нитей завершится внутри параллельной секции, то и все нити из группы также завершатся, и рабочая программа, выполненная выше до этой точки, будет в неопределенном состоянии.
BY>Что же здесь имеется ввиду, что нить
BY>1) аварийно завершится
BY>2) закончит работу нормально
BY>Так вот и не понятно: "завершится" не значит аварийно прервется. Вроде логично, что если нить завершилась (отработала) и она master (нить с 0 индексом), то она должна ожидать завершения остальных нитей. Т.е. программа ожидает (определенное сосотояние).
как я понимаю, тут имеется ввиду, что поток завершился не по сценарию работы OpenMP, а путем вызова системных функций завершения потока или же после "ловли" исключений, ...
BY>P.S. штурмую OpenMP Blaise Barney, Lawrence Livermore National Laboratory, может гуру в openMP посоветует какое-либо все исчерпывающее руководство по OpenMP
Здравствуйте, barmale-y, Вы писали:
BY>Что же здесь имеется ввиду, что нить
BY>1) аварийно завершится
BY>2) закончит работу нормально
У меня сложилось впечатление, что речь идет об аварийном (принудительном завершении). Т.е. если какая-либо из нитей аварийно завершилась, то и все остальные нити тоже завершаются. При этом все, что они до этого считали становится неопределенным.
Вообще, это соответствует идеологии OpenMP. Например, если мы рассмотрим код:
#pragma omp parallel for reduction(+:sum)
for(i = 0; i < N; i++)
{
sum = sum + i;
}
Здесь каждая нитка считает частичную сумму, которую потом объединяет в общий результат. Если одна из нитей аварийно завершится, то в любом случае результат будет невалидным. Поэтому правильно остановить все остальные нитки и результат считать неопределенным.
Зачем нужен этот параметр циклу for ?
COLLAPSE: Specifies how many loops in a nested loop should be collapsed into one large iteration space and divided according to the schedule clause. The sequential execution of the iterations in all associated loops determines the order of the iterations in the collapsed iteration space.