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 =
'cuda_buffer_free_all')
119 bind(c, name =
'cudaGetDeviceProperties')
120 use,
intrinsic :: iso_c_binding
122 type(c_ptr),
value :: prop
123 integer(c_int),
value ::
device
127 bind(c, name =
'cudaStreamCreate')
128 use,
intrinsic :: iso_c_binding
130 type(c_ptr) :: stream
134 bind(c, name =
'cudaStreamCreateWithFlags')
135 use,
intrinsic :: iso_c_binding
137 type(c_ptr) :: stream
138 integer(c_int),
value :: flags
142 bind(c, name =
'cudaStreamCreateWithPriority')
143 use,
intrinsic :: iso_c_binding
145 type(c_ptr) :: stream
146 integer(c_int),
value :: flags, prio
150 bind(c, name =
'cudaStreamDestroy')
151 use,
intrinsic :: iso_c_binding
153 type(c_ptr),
value :: steam
157 bind(c, name =
'cudaStreamSynchronize')
158 use,
intrinsic :: iso_c_binding
160 type(c_ptr),
value :: stream
164 bind(c, name =
'cudaStreamWaitEvent')
165 use,
intrinsic :: iso_c_binding
167 type(c_ptr),
value :: stream, event
168 integer(c_int),
value :: flags
172 (low_prio, high_prio) &
173 bind(c, name =
'cudaDeviceGetStreamPriorityRange')
174 use,
intrinsic :: iso_c_binding
176 integer(c_int) :: low_prio, high_prio
180 bind(c, name =
'cudaProfilerStart')
181 use,
intrinsic :: iso_c_binding
186 bind(c, name =
'cudaProfilerStop')
187 use,
intrinsic :: iso_c_binding
192 bind(c, name =
'cudaEventCreate')
193 use,
intrinsic :: iso_c_binding
199 bind(c, name =
'cudaEventDestroy')
200 use,
intrinsic :: iso_c_binding
202 type(c_ptr),
value :: event
206 bind(c, name =
'cudaEventCreateWithFlags')
207 use,
intrinsic :: iso_c_binding
210 integer(c_int),
value :: flags
214 bind(c, name =
'cudaEventRecord')
215 use,
intrinsic :: iso_c_binding
217 type(c_ptr),
value :: event, stream
221 bind(c, name =
'cudaEventSynchronize')
222 use,
intrinsic :: iso_c_binding
224 type(c_ptr),
value :: event
228 bind(c, name =
'cudaGetDeviceCount')
229 use,
intrinsic :: iso_c_binding
231 integer(c_int) :: device_count
235 bind(c, name =
'cudaGetDevice')
236 use,
intrinsic :: iso_c_binding
242 bind(c, name =
'cudaSetDevice')
243 use,
intrinsic :: iso_c_binding
245 integer(c_int),
value ::
device
252 STRM_HIGH_PRIO, STRM_LOW_PRIO)
253 type(c_ptr),
intent(inout) :: glb_cmd_queue
254 type(c_ptr),
intent(inout) :: aux_cmd_queue
255 integer,
intent(inout) :: STRM_HIGH_PRIO
256 integer,
intent(inout) :: STRM_LOW_PRIO
257 integer(c_int) :: device_id
258 integer :: nthrds = 1
267 if (nthrds .gt. 1)
then
281 call neko_error(
'Error retrieving stream priority range')
296 type(c_ptr),
intent(inout) :: glb_cmd_queue
297 type(c_ptr),
intent(inout) :: aux_cmd_queue
304 call neko_error(
'Error destroying main stream')
308 call neko_error(
'Error destroying aux stream')
325 character(len=*),
intent(inout) :: name
326 character(kind=c_char, len=8192),
target :: prop
342 end_pos = scan(prop(1:256), c_null_char)
343 if (end_pos .ge. 2)
then
344 name(1:end_pos-1) = prop(1:end_pos-1)
350 integer(c_int) :: num_devices
353 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.