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

UptoLike

37
2.4.6 Примеры
Рассмотрим параллельную OpenMP-программу, выполняющую
умножение матриц.
Program matrix
!подключение модуля
USE IFPORT
!задание размерности матриц
Parameter (n=1000)
Integer(4) i, j, k, l, m, iseed
Double precision A(n,n), B(n,n), C(n,n), tm(3)
! определение типа переменных блока распараллеливания
!$ integer omp_get_num_threads
!$ double precision omp_get_wtime
!$ double precision tm0, tm1
! вывод на экран количества используемых нитей
!$omp parallel
!$ write(*,*) 'OpenMP-parallel with', omp_get_num_threads()
!$omp end parallel
! подготовка датчика случайных чисел для задания значений
! матриц
iseed = 100
CALL SEED(1995)
do i=1,n
do j=1,n
A(i,j) = RAN(iseed)*100
B(i,j) = RAN(iseed)*100
C(i,j) = 0
end do
end do
! фиксируется время начала счета omp-блока
!$ tm0=omp_get_wtime()
write(*,*) 'Calculation... '
! начало области распараллеливания
!$omp parallel
! распараллеливание цикла
!$omp do private (i,j,k)
do j=1,n
do k=1,n
do i=1,n