Advertisement
Anna2373

Untitled

Oct 16th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. program Mult
  2. include "omp_lib.h"
  3. ! размер матрицы
  4. integer:: n = 1000
  5. real, allocatable :: matr1 (:,:), matr2 (:,:), matr3 (:,:)
  6. integer i, j, k, size
  7. double precision t1, t2
  8. !выделяем память под матрицы
  9. allocate(matr1(n,n))
  10. allocate(matr2(n,n))
  11. allocate(matr3(n,n))
  12. !заполнение матриц числами
  13. do i=1, n
  14. do j=1, n
  15. matr1(i,j) = (i+1 + j-1)
  16. matr2(i,j) = (i-1 + j+1)
  17. matr3(i,j)=0
  18. end do
  19. end do
  20. t1=omp_get_wtime()
  21. !вызываем подпрограмму перемножения
  22. call Matrmul(matr1,matr2,matr3,n)
  23. t2=omp_get_wtime()
  24. print*,t2-t1
  25. !очищаем память
  26. deallocate(matr1)
  27. deallocate(matr2)
  28. deallocate(matr2)
  29. deallocate(matr3)
  30. end program Mult
  31. !подпрограмма перемножения матриц
  32. subroutine Matrmul(matr1,matr2,matr3,n)
  33. integer, intent(in) :: n
  34. real, dimension(n,n), intent(in) :: matr1,matr2
  35. real, dimension(n,n), intent(out) :: matr3
  36. integer i,j,k
  37. !параллельная область
  38. !$omp parallel shared(matr3) private(i, j, k)
  39. size=omp_get_num_threads();
  40. !$omp do schedule(static)
  41. do i=1, n
  42. do j=1, n
  43. do k=1,n
  44. matr3(i,j)=matr3(i,j)+matr1(i,k)*matr2(k,j)
  45. end do
  46. end do
  47. enddo
  48. !$omp end parallel
  49. end subruotine Martmul
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement