|
34 | 34 | if (prefer_gpu_mode .eq. 1) then |
35 | 35 | #:for arg in args |
36 | 36 | !print*, "Moving ${arg}$ to GPU => ", SHAPE(${arg}$) |
37 | | - ! unset |
38 | | - istat = cudaMemAdvise( c_devloc(${arg}$), SIZEOF(${arg}$), cudaMemAdviseUnSetPreferredLocation, cudaCpuDeviceId ) |
| 37 | + ! set preferred location GPU |
| 38 | + istat = cudaMemAdvise( c_devloc(${arg}$), SIZEOF(${arg}$), cudaMemAdviseSetPreferredLocation, 0 ) |
39 | 39 | if (istat /= cudaSuccess) then |
40 | 40 | write(*,"('Error code: ',I0, ': ')") istat |
41 | 41 | write(*,*) cudaGetErrorString(istat) |
42 | 42 | endif |
43 | | - ! set |
44 | | - istat = cudaMemAdvise( c_devloc(${arg}$), SIZEOF(${arg}$), cudaMemAdviseSetPreferredLocation, 0 ) |
| 43 | + ! set accessed by CPU |
| 44 | + istat = cudaMemAdvise( c_devloc(${arg}$), SIZEOF(${arg}$), cudaMemAdviseSetAccessedBy, cudaCpuDeviceId ) |
| 45 | + if (istat /= cudaSuccess) then |
| 46 | + write(*,"('Error code: ',I0, ': ')") istat |
| 47 | + write(*,*) cudaGetErrorString(istat) |
| 48 | + endif |
| 49 | + ! prefetch to GPU - physically populate memory pages |
| 50 | + istat = cudaMemPrefetchAsync( c_devloc(${arg}$), SIZEOF(${arg}$), 0, 0 ) |
45 | 51 | if (istat /= cudaSuccess) then |
46 | 52 | write(*,"('Error code: ',I0, ': ')") istat |
47 | 53 | write(*,*) cudaGetErrorString(istat) |
|
0 commit comments