这是本书中实现的矩阵到向量乘法的并行(逐字)版本
subroutine matvecmul(mat,vec,res,m,n)
use omp_lib
implicit none
integer::m,n,i,j
real*8,dimension(m,n),intent(in)::mat
real*8,dimension(n),intent(in)::vec
real*8,dimension(m)::res
res(:)=0.0
!$omp parallel do default(none)
!$omp shared(mat,vec,res,m,n) private(i,j)
do i=1,m
do j=1,n
res(i)=res(i)+mat(i,j)*vec(j)
end do
end do
!$omp end parallel do
return
end subroutine matvecmul
我得到这个语法错误“未分类的 openMP 子句共享”,“未分类的 openMP 子句私有”用 gfortran 4.4.5 和 gfortran 4.6.0 编译
共享子句是否在“gomp”中被删除/弃用或未实现,或者我犯了一些愚蠢的错误或书的勘误表......使用默认值(一)我没有得到任何语法错误我该怎么说哪些变量是私有的和要分享哪个?
这是我如何实现没有错误(并且正确)
subroutine matvecmul(mat,vec,res,m,n)
use omp_lib
implicit none
integer::m,n,i,j
real*8,dimension(m,n),intent(in)::mat
real*8,dimension(n),intent(in)::vec
real*8,dimension(m)::res
res(:)=0.0
!$omp parallel do private(i,j)
do i=1,m
do j=1,n
res(i)=res(i)+mat(i,j)*vec(j)
end do
end do
!$omp end parallel do
return
end subroutine matvecmul
我仍然是openmp的新手(但我需要快速学习它......我的工作的一部分!)这里的一些解释将不胜感激......是否有任何只使用gomp的openMP教程(比如gcc/gfortran 4.4.5) ?