Как использовать мульти-GPU cuFFT библиотеку в Фортране? - PullRequest
1 голос
/ 19 июня 2019

Я не смог найти какие-либо функции нескольких графических процессоров из встроенного модуля cufft, поэтому я написал интерфейс C-Fortran.Я использую компилятор PGI v19.4 вместе с MVAPICH2.Я использовал следующие команды для компиляции и запуска кода, но он выдает код ошибки 1: CUFFT_INVALID_PLAN.Пожалуйста, помогите.

mpif90 -Mcuda -I/usr/local/cuda/include -L/usr/local/cuda/lib64 -lcufft testxt.cuf -o testxt
mpirun -np 4 ./testxt
program testxt

   use cudafor
   use cufft
   use mpi 
   use iso_c_binding
   implicit none
   interface
      function cufftXtSetGPUs &
         (plan, nGPUs, whichGPUs) bind(C,name='cufftXtSetGPUs')
         use iso_c_binding
         integer(c_int)        :: plan
         integer(c_int), value :: nGPUs
         integer(c_int)        :: whichGPUs(*)
         integer(c_int), value :: cufftXtSetGPUs
      end function
   end interface
   integer :: localRank, rank, nProcs, ierr, i, N
   integer(c_int) :: plan
   integer, allocatable :: whichGPUs(:)
   character(len=10) :: rankStr

   ! MPI initialization
   call GET_ENVIRONMENT_VARIABLE ('MV2_COMM_WORLD_LOCAL_RANK',rankStr)
   read (rankStr,'(i10)') localRank
   call CHECK_STAT ( cudaSetDevice (localRank) )
   call MPI_init(ierr)
   call MPI_comm_rank(MPI_COMM_WORLD, rank, ierr)
   call MPI_comm_size(MPI_COMM_WORLD, nProcs, ierr)

   ! Device ID
   allocate(whichGPUs(nProcs))
   do i=1,nProcs
      whichGPUs(i)=i
   enddo

   ! Setup cufft
   call CHECK_STAT ( cufftCreate (plan) )
   call CHECK_STAT ( cufftXtSetGPUs (plan,nProcs,whichGPUs) )
   call CHECK_STAT ( cufftPlan1D (plan,N,CUFFT_Z2Z,1) )

   deallocate(whichGPUs)
   call MPI_finalize(ierr)

end program testxt

subroutine CHECK_STAT (istat)
   use cudafor
   implicit none
   integer, intent(in) :: istat
   if (istat /= cudaSuccess) then
      write(0,'(A,I2,A)',advance='no') " Error code ",istat,": "
      write(*,*) cudaGetErrorString(istat)
      stop
   endif
end subroutine CHECK_STAT

...