Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Mult
- include "omp_lib.h"
- ! размер матрицы
- integer:: n = 1000
- real, allocatable :: matr1 (:,:), matr2 (:,:), matr3 (:,:)
- integer i, j, k, size
- double precision t1, t2
- !выделяем память под матрицы
- allocate(matr1(n,n))
- allocate(matr2(n,n))
- allocate(matr3(n,n))
- !заполнение матриц числами
- do i=1, n
- do j=1, n
- matr1(i,j) = (i+1 + j-1)
- matr2(i,j) = (i-1 + j+1)
- matr3(i,j)=0
- end do
- end do
- t1=omp_get_wtime()
- !вызываем подпрограмму перемножения
- call Matrmul(matr1,matr2,matr3,n)
- t2=omp_get_wtime()
- print*,t2-t1
- !очищаем память
- deallocate(matr1)
- deallocate(matr2)
- deallocate(matr2)
- deallocate(matr3)
- end program Mult
- !подпрограмма перемножения матриц
- subroutine Matrmul(matr1,matr2,matr3,n)
- integer, intent(in) :: n
- real, dimension(n,n), intent(in) :: matr1,matr2
- real, dimension(n,n), intent(out) :: matr3
- integer i,j,k
- !параллельная область
- !$omp parallel shared(matr3) private(i, j, k)
- size=omp_get_num_threads();
- !$omp do schedule(static)
- do i=1, n
- do j=1, n
- do k=1,n
- matr3(i,j)=matr3(i,j)+matr1(i,k)*matr2(k,j)
- end do
- end do
- enddo
- !$omp end parallel
- end subruotine Martmul
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement