我有一个使用 Fortran 95 和 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
我必须做什么才能使求解器并行化,以便每个内核计算求解器的各个部分?