36 use,
intrinsic :: iso_c_binding
61 bind(c, name =
'cudaMalloc')
62 use,
intrinsic :: iso_c_binding
65 integer(c_size_t),
value :: s
69 bind(c, name =
'cudaFree')
70 use,
intrinsic :: iso_c_binding
72 type(c_ptr),
value :: ptr_d
75 integer(c_int) function cudamemcpy(ptr_dst, ptr_src, s, dir) &
76 bind(c, name =
'cudaMemcpy')
77 use,
intrinsic :: iso_c_binding
79 type(c_ptr),
value :: ptr_dst, ptr_src
80 integer(c_size_t),
value :: s
81 integer(c_int),
value :: dir
85 bind(c, name =
'cudaMemcpyAsync')
86 use,
intrinsic :: iso_c_binding
88 type(c_ptr),
value :: ptr_dst, ptr_src, stream
89 integer(c_size_t),
value :: s
90 integer(c_int),
value :: dir
94 bind(c, name =
'cudaMemsetAsync')
95 use,
intrinsic :: iso_c_binding
97 type(c_ptr),
value :: ptr, stream
98 integer(c_int),
value :: v
99 integer(c_size_t),
value :: s
103 bind(c, name =
'cudaDeviceSynchronize')
104 use,
intrinsic :: iso_c_binding
109 bind(c, name =
'cudaDeviceReset')
110 use,
intrinsic :: iso_c_binding
115 bind(c, name =
'cudaGetDeviceProperties')
116 use,
intrinsic :: iso_c_binding
118 type(c_ptr),
value :: prop
119 integer(c_int),
value ::
device
123 bind(c, name =
'cudaStreamCreate')
124 use,
intrinsic :: iso_c_binding
126 type(c_ptr) :: stream
130 bind(c, name =
'cudaStreamCreateWithFlags')
131 use,
intrinsic :: iso_c_binding
133 type(c_ptr) :: stream
134 integer(c_int),
value :: flags
138 bind(c, name =
'cudaStreamCreateWithPriority')
139 use,
intrinsic :: iso_c_binding
141 type(c_ptr) :: stream
142 integer(c_int),
value :: flags, prio
146 bind(c, name =
'cudaStreamDestroy')
147 use,
intrinsic :: iso_c_binding
149 type(c_ptr),
value :: steam
153 bind(c, name =
'cudaStreamSynchronize')
154 use,
intrinsic :: iso_c_binding
156 type(c_ptr),
value :: stream
160 bind(c, name =
'cudaStreamWaitEvent')
161 use,
intrinsic :: iso_c_binding
163 type(c_ptr),
value :: stream, event
164 integer(c_int),
value :: flags
168 (low_prio, high_prio) &
169 bind(c, name =
'cudaDeviceGetStreamPriorityRange')
170 use,
intrinsic :: iso_c_binding
172 integer(c_int) :: low_prio, high_prio
176 bind(c, name =
'cudaProfilerStart')
177 use,
intrinsic :: iso_c_binding
182 bind(c, name =
'cudaProfilerStop')
183 use,
intrinsic :: iso_c_binding
188 bind(c, name =
'cudaEventCreate')
189 use,
intrinsic :: iso_c_binding
195 bind(c, name =
'cudaEventDestroy')
196 use,
intrinsic :: iso_c_binding
198 type(c_ptr),
value :: event
202 bind(c, name =
'cudaEventCreateWithFlags')
203 use,
intrinsic :: iso_c_binding
206 integer(c_int),
value :: flags
210 bind(c, name =
'cudaEventRecord')
211 use,
intrinsic :: iso_c_binding
213 type(c_ptr),
value :: event, stream
217 bind(c, name =
'cudaEventSynchronize')
218 use,
intrinsic :: iso_c_binding
220 type(c_ptr),
value :: event
224 bind(c, name =
'cudaGetDeviceCount')
225 use,
intrinsic :: iso_c_binding
227 integer(c_int) :: device_count
231 bind(c, name =
'cudaGetDevice')
232 use,
intrinsic :: iso_c_binding
238 bind(c, name =
'cudaSetDevice')
239 use,
intrinsic :: iso_c_binding
241 integer(c_int),
value ::
device
248 STRM_HIGH_PRIO, STRM_LOW_PRIO)
249 type(c_ptr),
intent(inout) :: glb_cmd_queue
250 type(c_ptr),
intent(inout) :: aux_cmd_queue
251 integer,
intent(inout) :: STRM_HIGH_PRIO
252 integer,
intent(inout) :: STRM_LOW_PRIO
253 integer(c_int) :: device_id
254 integer :: nthrds = 1
263 if (nthrds .gt. 1)
then
277 call neko_error(
'Error retrieving stream priority range')
292 type(c_ptr),
intent(inout) :: glb_cmd_queue
293 type(c_ptr),
intent(inout) :: aux_cmd_queue
294 integer(c_int) :: ierr
297 call neko_error(
'Error destroying main stream')
301 call neko_error(
'Error destroying aux stream')
310 character(len=*),
intent(inout) :: name
311 character(kind=c_char, len=8192),
target :: prop
327 end_pos = scan(prop(1:256), c_null_char)
328 if (end_pos .ge. 2)
then
329 name(1:end_pos-1) = prop(1:end_pos-1)
335 integer(c_int) :: num_devices
338 call neko_error(
'Error retrieving device count')
subroutine cuda_device_name(name)
subroutine cuda_finalize(glb_cmd_queue, aux_cmd_queue)
@ cudamemcpydevicetodevice
integer function cuda_device_count()
Return the number of avaialble CUDA devices.
@ cudaerrorinitializationerror
@ cudaerrormemoryallocation
subroutine cuda_init(glb_cmd_queue, aux_cmd_queue, strm_high_prio, strm_low_prio)
Device abstraction, common interface for various accelerators.