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
237 bind(c, name =
'cuda_device_mp_count')
238 use,
intrinsic :: iso_c_binding
245 bind(c, name =
'cuda_device_total_mem')
246 use,
intrinsic :: iso_c_binding
251 bind(c, name =
'cudaGetDevice')
252 use,
intrinsic :: iso_c_binding
258 bind(c, name =
'cudaSetDevice')
259 use,
intrinsic :: iso_c_binding
261 integer(c_int),
value ::
device
268 STRM_HIGH_PRIO, STRM_LOW_PRIO)
269 type(c_ptr),
intent(inout) :: glb_cmd_queue
270 type(c_ptr),
intent(inout) :: aux_cmd_queue
271 integer,
intent(inout) :: STRM_HIGH_PRIO
272 integer,
intent(inout) :: STRM_LOW_PRIO
273 integer(c_int) :: device_id
274 integer :: nthrds = 1
283 if (nthrds .gt. 1)
then
297 call neko_error(
'Error retrieving stream priority range')
312 type(c_ptr),
intent(inout) :: glb_cmd_queue
313 type(c_ptr),
intent(inout) :: aux_cmd_queue
320 call neko_error(
'Error destroying main stream')
324 call neko_error(
'Error destroying aux stream')
341 character(len=*),
intent(inout) :: name
342 character(kind=c_char, len=8192),
target :: prop
358 end_pos = scan(prop(1:256), c_null_char)
359 if (end_pos .ge. 2)
then
360 name(1:end_pos-1) = prop(1:end_pos-1)
366 integer(c_int) :: num_devices
369 call neko_error(
'Error retrieving device count')
Number of streaming multiprocessors of the current device (0 if unknown), see device/cuda/props....
Total memory of the current device in bytes (0 if unknown), see device/cuda/props....
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.