Как вы распараллеливали первый шаг элиминации?
Я имею в виду, что обратное распараллеливание - это в основном тот же алгоритм, только что сделанный снизу вверх.Так почему бы не использовать ваш алгоритм еще раз?
Мне нужно было бы легко реализовать только один алгоритм, который мне пришел в голову:
Предположим матрицу размера [kxk], где A_x_y - это у-йэлемент в х-й строке.Так что теперь просто вернемся назад, как это:
i = k
while(i > 1)
broadcast A_i_i
if(line < i)
do Gaussion elimination step
i--
Важная часть в основном заключается в том, что вам нужно транслировать только один элемент (или два, если у вас есть LSE), потому что все остальные части строки уже равны нулю.Я предположил, что вы поделили несколько строк на каждый процессор, что кажется мне наиболее разумным разделением данных MPI.