Fortran95とgfortranコンパイラを使用したコードがあります。私もOpenMPを使用しており、非常に大きな配列を処理する必要があります。私のコードでは、OpenBLASのソルバーDGTSVを使用して連立一次方程式を解く必要もあります。このソルバーも、それが可能なはずのopenblasを使用して並列化したいと思います。しかし、構文に問題があります。添付の擬似コードを使用すると、4つのCPUすべてがほぼ100%使用されますが、各カーネルが線形方程式を個別に解くのか、それとも部分に分割して並列に計算するのかはわかりません。全体はを使用してコンパイルされますgfortran -fopenmp -lblas a.f95 -o a.out
だから私の擬似コードは次のようになります
program a
implicit none
integer, parameter :: N = 200
real*8, dimension(numx) :: D = 0.0
real*8, dimension(numx-1):: DL = 0.0
real*8, dimension(numx-1):: DU = 0.0
real*8, dimension(numx) :: b = 0.0
integer :: info = 0
integer :: numthread=4
...
!$OMP PARALLEL NUM_THREADS(numthread)
...
!$OMP DO
...
!$OMP END DO
CALL DGTSV(N,1,DL,D,DU,b,N,info)
!$OMP DO
...
!$OMP END DO
...
!$OMP END PARALLEL
end program a
ソルバーを並列化して、各カーネルがソルバーの一部を計算するようにするには、何をする必要がありますか?