ВУЗ:
Рубрика:
113
call MPI_ALLTOALLV
$ (xx(1), xcount2, xnumer2, mpi_double_precision,
$ x(1), xcount, xnumer, mpi_double_precision, comm,
$ ierr)
Использование векторной коллективной операции
MPI_ALLTOALLV обусловлено тем, что она допускает передачу и
прием блоков различной длины с более гибким размещением пере-
даваемых и принимаемых данных. Это весьма важно в случае, когда
матрица не может быть распределена равномерно на доступных
процессорах, т.е. результат деления M_SIZE/NPROCS не является
целым числом.
Итерационный процесс продолжается до выполнения условия
(6.9). Для его контроля сначала каждый процесс выполняет поиск
максимальной по модулю разности MAX_ERR между соответст-
вующим новым и старым значениями компонент вектора X в своем
фрагменте. А затем при помощи глобальной операции редукции
среди всех значений MAX_ERR, вычисленных процессами, выби-
рается наибольшее по модулю MAX_ERR1 и сохраняется в памяти
всех процессов.
call MPI_ALLREDUCE (MAX_ERR, MAX_ERR1, 1,
$ mpi_double_precision, mpi_max, comm, ierr)
Аналогично производится вычисление нормы невязки
DRMAX= bAx
k
1
.
Исходная матрица задается в процедуре MATGEN. Формирова-
ние элементов на главной диагонали происходит таким образом,
чтобы было выполнено условие диагонального преобладания (6.8),
необходимое для сходимости, но при этом скорость сходимости
была не слишком высокой, что обычно наблюдается в реальных
задачах.
6.5 MPI -программа решения СЛАУ методом Якоби
Program Jacobi
implicit none
include 'mpif.h'
!
Страницы
- « первая
- ‹ предыдущая
- …
- 111
- 112
- 113
- 114
- 115
- …
- следующая ›
- последняя »
