Высокопроизводительные вычисления на кластерах. Беликов Д.А - 148 стр.

UptoLike

148
лельный код. Присвоение ряда компонентов есть двухшаговый про-
цесс: сначала вызывают процедуру
SUBROUTINE VecSetValues(x, n, indices, values, IN-
SERT_VALUES, ierr)
Vec x
INTEGER n, indices(k1), ierr
Double precision values(k2)
любое число раз на один или все используемые процессы. Аргумент
n количество компонент, установленных в этом присваивании.
Целочисленный массив indices содержит индексы глобальных ком-
понентов, а values массив добавляемых значений. Часто необхо-
димо не вставить элементы в вектор, а сложить значения, для этого
вместо INSERT_VALUES используется ADD_VALUES. Например:
Call VecSetValues(x, n, indices, values, ADD_VALUES, ierr)
Любой параллельный процесс может определить любой компо-
нент вектора, при этом PETSc гарантирует, что присваиваемые зна-
чения сохранятся в правильной ячейке. После того как значения
размещены с помощью VecSetValues, нужно вызвать две процедуры
SUBROUTINE VecAssemblyBegin(x,ierr)
SUBROUTINE VecAssemblyEnd(x,ierr)
Vec x
INTEGER ierr
чтобы выполнить необходимую межпроцессорную передачу нело-
кальных компонент.
Для совмещения обменов и вычислений код пользователя может
выполнять любую последовательность других действий между эти-
ми двумя вызовами, пока сообщения находятся в состоянии переда-
чи.
Вектор можно вывести на экран с помощью процедуры
SUBROUTINE VecView(x,
PETSC_VIEWER_STDOUT_WORLD)
Vec x