OpenMP: есть ли у потока способ завершить все другие параллельные потоки? - PullRequest
2 голосов
/ 12 октября 2010

Я экспериментирую с openMP для обработки больших данных и относительно новых для нее.Мой набор входных данных огромен, поэтому я разделил его на несколько подмножеств, и каждый поток работал над подмножеством данных.Каждый элемент данных в подмножестве обрабатывается потоком.Если один из потоков выходит из строя во время его работы на любом элементе данных, я хотел бы завершить другие потоки и вернуть ошибку.Использование совместно используемой переменной является опцией, но есть ли лучший способ сделать то же самое?

1 Ответ

2 голосов
/ 12 октября 2010

Что вы хотите случиться, если один из ваших потоков задохнется от своего ввода?Вы хотите внезапно остановить программу?Или вы хотите остановить параллельное выполнение и привести в порядок последовательную часть программы?

OpenMP на самом деле не предназначен ни для какой операции, поэтому вы будете бороться с этим, а не сборется с этим, как и большинство начинающих.Вы, конечно, могли бы, как вы предлагаете, использовать общие переменные и написать свою собственную логику, чтобы остановить программу или перейти к концу параллельной области, если один из потоков завершится неудачно.Но для этих операций нет встроенных механизмов OpenMP.

Возможно, вы захотите изучить новые task возможности OpenMP 3.0.Используя их, вы, безусловно, можете реализовать систему, в которой задачи отправляются потокам, которые возвращают либо успех, либо неудачу, и имеют другие задачи, которые имеют дело со сбоями.

Наконец, можно утверждать, что неправильный ввод не должен вызывать программусбой, но это уже другая тема.

...