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

UptoLike

157
Call MatSetFromOptions(A, ierr)
Call MatCreate(PETSC_COMM_WORLD, B, ierr)
Call MatSetSizes(B, PETSC_DECIDE, PETSC_DECIDE,
$ n, n, ierr)
Call MatSetFromOptions(B, ierr)
CALL RANDOM_SEED()
Call MatGetOwnershipRange(A, Istart, Iend, ierr)
do i=istart,iend-1
do j=0,n-1
CALL RANDOM_NUMBER(t)
if (t.ne.0) Call MatSetValue(A, i, j, dble(t), INSERT_VALUES,
$ ierr)
end do
end do
Call MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr)
Call MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr)
Call MatGetOwnershipRange(B, Istart, Iend, ierr)
do i=istart,iend-1
do j=0,n-1
CALL RANDOM_NUMBER(t)
if (t.ne.0) Call MatSetValue(B, i, j, dble(t), INSERT_VALUES,
$ ierr)
end do
end do
Call MatAssemblyBegin(B, MAT_FINAL_ASSEMBLY, ierr)
Call MatAssemblyEnd(B, MAT_FINAL_ASSEMBLY, ierr)
write(6,*) istart, iend, rank
time1=MPI_WTIME()
Call MatMatMult(A, B, MAT_INITIAL_MATRIX, dble(1), C,
$ ierr)
time2=MPI_WTIME()
time1=time2-time1
write(*,*) time1
c Обрабатываем матрицу
Call MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)
Call MatView(B, PETSC_VIEWER_STDOUT_WORLD, ierr)
Call MatView(C, PETSC_VIEWER_STDOUT_WORLD, ierr)
c Уничтожаем все использовавшиееся PETSc объекты
Call MatDestroy(A, ierr)
Call MatDestroy(B, ierr)