я использую pdpotrf () для того, чтобы выполнить разложение Холецкого. Тогда я хочу позвонить pdpotri (), для того, чтобы инвертировать матрицу. Функция вызывается из каждого процесса, сразу после pdpotrf()
, Должен ли я поставить там барьер, чтобы я был уверен, что все процессы выполнены с факторизацией Холецкого, а затем перейдем к инверсионной части, или она не нужна?
Я написал несколько примеров с крошечными данными, которые показывают, что это не нужно, но я хочу быть уверен, что мне не просто (не) повезло, и я столкнулся с проблемой с большими данными.
Обратите внимание, что под барьером я имею в виду это: MPI_Barrier(MPI_COMM_WORLD);
РЕДАКТИРОВАТЬ
Я просто волнуюсь, что инвертирование может начаться до того, как какой-то другой процесс завершит разложение Холецкого. Есть ли pdpotri()
позаботиться об этом? Я имею в виду, он проверяет и ждет, если это необходимо. Или делает pdpotri()
работать только в подматрице своего вызывающего процесса? Если это так, то барьер не нужен.
Пока я не изучал детали pdpotri()
а также pdpotrf()
Я вижу два случая:
1) Между двумя функциями должен быть барьер. В этом случае, однако, потому что pdpotri()
всегда должен идти после pdpotrf()
было бы наиболее разумно, если бы к началу pdpotri()
,
2) Не должно быть барьера между двумя функциями.
В любом случае, вам не обязательно писать свой собственный явный барьер, используя MPI_Barrier()
,