File1: #include <stdio.h>\n#define N 100\n#define M 100 \n#define K 100\ndouble a[N][M],b[M][K],c[N][K];\n            \nint mmm()   \n{           \n  int i,j,k;\n#pragma omp parallel for private(j,k)\n  for (i = 0; i < N; i++) \n    for (k = 0; k < K; k++) \n      for (j = 0; j < M; j++)\n        c[i][j]= c[i][j]+a[i][k]*b[k][j];\n  return 0; \n} \n\nint main()\n{\n  mmm();\n  return 0;\n}  \n
File2: program DRB060_matrixmultiply_orig_no\n    use omp_lib\n    implicit none\n\n    integer :: N,M,K, len, i, j, l\n    real, dimension(:,:), allocatable :: a, b, c\n\n    len = 100\n    N=len\n    M=len\n    K=len\n\n    allocate (a(N,M))\n    allocate (b(M,K))\n    allocate (c(K,N))\n\n    !$omp parallel do private(j, l)\n    do i = 1, N\n        do l = 1, K\n            do j = 1, M\n                c(i,j) = c(i,j)+a(i,l)*b(l,j)\n            end do\n        end do\n    end do\n    !$omp end parallel do\n\n    deallocate(a,b,c)\nend program