Hi,
I am using CUDA fortran with multi-GPU device. In order to put parameters on different GPU, I define a type like this,
module mul_dev
! distributed arrays
type deviceArray
real* 8, device, allocatable :: den_dev(:,:,:),rhou_dev(:,:,:)
end type deviceArray
type (deviceArray), device, pointer :: dev_ptr
end module mul_dev
and in the program define
type (deviceArray),target, allocatable :: dev(:) ! (1:nDevices)
However, when I try to use these parameters in CFU kernel,
do isub = 1, ndomainM
ierr=cudaSetDevice(deviceIDM(isub));
istart = refIDM(isub,1)
jstart = refIDM(isub,2)
kstart = refIDM(isub,3)
iend = refIDM(isub,4)+istart-1
jend = refIDM(isub,5)+jstart-1
kend = refIDM(isub,6)+kstart-1
dev_ptr => dev(isub);
!$cuf kernel do(3) <<<*,*,stream=streamID(isub)>>>
do k=kstart,kend-1
do j=jstart,jend-1
do i=istart,iend
dev_ptr%rhou_dev(i,j,k)=(dev_ptr%den_dev(i,j+1,k+1)+
& dev_ptr%den_dev(i+1,j+1,k+1))/2d0
enddo
enddo
enddo
write(*,*) "after multi domain in device "
ierr=cudaThreadSynchronize();
ierr=cudaGetLastError();
write(*,*) isub, cudaGetErrorString(ierr);
enddo
I got error information:
misaligned address
Do you have any suggestions?