здесь - параллельная (дословная) версия умножения матрицы на вектор, реализованная в этой книге
с использованием OpenMP
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 (но мне нужно быстро это освоить ... часть моей работы!)
Некоторое объяснение здесь будет оценено.
есть ли учебник openMP только с использованием gomp (скажем, gcc / gfortran 4.4.5)?