Разве процесс может отправить себе данные? Использование MPICH2

У меня есть верхняя треугольная матрица и вектор результата b.
Моей программе нужно решить линейную систему:

Ax = b

используя метод конвейера.
И одним из ограничений является то, что количество процессов меньше, чем количество
уравнения (скажем, это может быть от 2 до числа Of-Equations-1).

У меня сейчас нет кода, я думаю о псевдокоде ..

Моя идея состояла в том, что один из процессов создаст случайную верхнюю треугольную матрицу (A)
вектор б.
допустим, это случайная матрица:

1  2  3   4   5   6
0  1  7   8   9   10
0  0  1   12  13  14
0  0  0   1   16  17
0  0  0   0   1   18
0  0  0   0   0   1

и вектор б [10 5 8 9 10 5]
и у меня меньше процессов, чем число уравнений (скажем, 2 процесса)

поэтому я подумал, что какой-то процесс отправит каждой строке процесса из матрицы и соответствующее число из вектора b.

поэтому последняя строка матрицы и последнее число в векторе b будут отправлены
process [numProcs-1] (здесь я имею в виду последний процесс (процесс 1))
чем он вычисляет X и отправляет результат в процесс 0.

Теперь процессу 0 нужно вычислить 5 строк матрицы и вот я застрял ..
У меня есть X, который был вычислен процессом 1, но как процесс может отправить самому себе
следующая строка матрицы и соответствующее число из вектора b, которые должны быть вычислены?

Является ли это возможным? Я не думаю, что это правильно отправлять «себе»

1

Решение

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

И нет, общение с собой не обязательно плохо. Наиболее очевидным преимуществом является то, что он делает код более симметричным, так как удаляет / уменьшает специальную логику, необходимую для управления самовзаимодействием. Отправка / получение от себя также происходит в большинстве вызовов коллективной связи. Например, MPI_Scatter также отправляет часть данных в корневой процесс. Чтобы предотвратить некоторые случаи отправки самому себе, которые излишне реплицируют данные и снижают производительность, MPI позволяет использовать режим на месте (MPI_IN_PLACE) для большинства коммуникационных коллективов.

4

Другие решения

Является ли это возможным? Я не думаю, что это правильно отправлять «себе»

Конечно, можно общаться с самим собой. Для этого есть даже коммуникатор: MPI_COMM_SELF. Разговаривать с собой не так уж редко.
Ваша настройка звучит так, как будто вы предпочитаете использовать коллективы MPI. Посмотрите на MPI_Scatter и MPI_Gather и посмотрите, не предоставляют ли они вам ту функциональность, которую вы ищете.

1

По вопросам рекламы [email protected]