1!-------------------------------------------------------------------------------!
2! Copyright 2009-2021 Barcelona Supercomputing Center !
4! This file is part of the DLB library. !
6! DLB is free
software: you can redistribute it and/
or modify !
7! it under the terms of the GNU Lesser General Public
License as published by !
8! the Free Software Foundation, either version 3 of the
License,
or !
9! (at your option) any later version. !
11! DLB is distributed in the hope that it will be useful, !
12! but WITHOUT ANY
WARRANTY; without even the implied warranty of !
13! MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the !
14! GNU Lesser General Public
License for more details. !
16! You should have received a copy of the GNU Lesser General Public
License !
17! along with DLB. If
not, see <https://www.gnu.org/licenses/>. !
18!-------------------------------------------------------------------------------!
20 include
'dlbf-errors.h'
28 function dlb_init(ncpus, mask, dlb_args) result (ierr) &
29 & bind(c, name=
'DLB_Init')
31 integer(kind=c_int) :: ierr
32 integer(kind=c_int), value, intent(in) :: ncpus
33 type(c_ptr), value, intent(in) :: mask
34 character(kind=c_char), intent(in) :: dlb_args(*)
37 function dlb_finalize() result (ierr) &
40 integer(kind=c_int) :: ierr
41 end function dlb_finalize
43 function dlb_enable() result (ierr) &
46 integer(kind=c_int) :: ierr
47 end function dlb_enable
49 function dlb_disable() result (ierr) &
52 integer(kind=c_int) :: ierr
53 end function dlb_disable
55 function dlb_setmaxparallelism(maxp) result (ierr) &
58 integer(kind=c_int) :: ierr
59 integer(kind=c_int), value, intent(in) :: maxp
60 end function dlb_setmaxparallelism
62 function dlb_unsetmaxparallelism() result (ierr) &
65 integer(kind=c_int) :: ierr
66 end function dlb_unsetmaxparallelism
68 function dlb_callbackset(which, callback) result (ierr) &
71 integer(kind=c_int) :: ierr
72 integer(kind=c_int), value, intent(in) :: which
73 type(c_funptr), value, intent(in) :: callback
74 end function dlb_callbackset
76 function dlb_callbackget(which, callback) result (ierr) &
79 integer(kind=c_int) :: ierr
80 integer(kind=c_int), value, intent(in) :: which
81 type(c_funptr), intent(out) :: callback
82 end function dlb_callbackget
84 function dlb_lend() result (ierr) &
87 integer(kind=c_int) :: ierr
90 function dlb_lendcpu(cpuid) result (ierr) &
93 integer(kind=c_int) :: ierr
94 integer(kind=c_int), value, intent(in) :: cpuid
95 end function dlb_lendcpu
97 function dlb_lendcpus(ncpus) result (ierr) &
100 integer(kind=c_int) :: ierr
101 integer(kind=c_int), value, intent(in) :: ncpus
102 end function dlb_lendcpus
104 function dlb_lendcpumask(mask) result (ierr) &
107 integer(kind=c_int) :: ierr
108 type(c_ptr), value, intent(in) :: mask
109 end function dlb_lendcpumask
111 function dlb_reclaim() result (ierr) &
114 integer(kind=c_int) :: ierr
115 end function dlb_reclaim
117 function dlb_reclaimcpu(cpuid) result (ierr) &
120 integer(kind=c_int) :: ierr
121 integer(kind=c_int), value, intent(in) :: cpuid
122 end function dlb_reclaimcpu
124 function dlb_reclaimcpus(ncpus) result (ierr) &
127 integer(kind=c_int) :: ierr
128 integer(kind=c_int), value, intent(in) :: ncpus
129 end function dlb_reclaimcpus
131 function dlb_reclaimcpumask(mask) result (ierr) &
134 integer(kind=c_int) :: ierr
135 type(c_ptr), value, intent(in) :: mask
136 end function dlb_reclaimcpumask
138 function dlb_acquirecpu(cpuid) result (ierr) &
141 integer(kind=c_int) :: ierr
142 integer(kind=c_int), value, intent(in) :: cpuid
143 end function dlb_acquirecpu
145 function dlb_acquirecpus(ncpus) result (ierr) &
148 integer(kind=c_int) :: ierr
149 integer(kind=c_int), value, intent(in) :: ncpus
150 end function dlb_acquirecpus
152 function dlb_acquirecpumask(mask) result (ierr) &
155 integer(kind=c_int) :: ierr
156 type(c_ptr), value, intent(in) :: mask
157 end function dlb_acquirecpumask
159 function dlb_acquirecpusinmask(ncpus, mask) result (ierr) &
162 integer(kind=c_int) :: ierr
163 integer(kind=c_int), value, intent(in) :: ncpus
164 type(c_ptr), value, intent(in) :: mask
165 end function dlb_acquirecpusinmask
167 function dlb_borrow() result (ierr) &
170 integer(kind=c_int) :: ierr
171 end function dlb_borrow
173 function dlb_borrowcpu(cpuid) result (ierr) &
176 integer(kind=c_int) :: ierr
177 integer(kind=c_int), value, intent(in) :: cpuid
178 end function dlb_borrowcpu
180 function dlb_borrowcpus(ncpus) result (ierr) &
183 integer(kind=c_int) :: ierr
184 integer(kind=c_int), value, intent(in) :: ncpus
185 end function dlb_borrowcpus
187 function dlb_borrowcpumask(mask) result (ierr) &
190 integer(kind=c_int) :: ierr
191 type(c_ptr), value, intent(in) :: mask
192 end function dlb_borrowcpumask
194 function dlb_borrowcpusinmask(ncpus, mask) result (ierr) &
197 integer(kind=c_int) :: ierr
198 integer(kind=c_int), value, intent(in) :: ncpus
199 type(c_ptr), value, intent(in) :: mask
200 end function dlb_borrowcpusinmask
202 function dlb_return() result (ierr) &
205 integer(kind=c_int) :: ierr
206 end function dlb_return
208 function dlb_returncpu(cpuid) result (ierr) &
211 integer(kind=c_int) :: ierr
212 integer(kind=c_int), value, intent(in) :: cpuid
213 end function dlb_returncpu
215 function dlb_returncpumask(mask) result (ierr) &
218 integer(kind=c_int) :: ierr
219 type(c_ptr), value, intent(in) :: mask
220 end function dlb_returncpumask
222 function dlb_polldrom(ncpus, mask) result (ierr) &
225 integer(kind=c_int) :: ierr
226 integer(kind=c_int), intent(out) :: ncpus
227 type(c_ptr), intent(out) :: mask
228 end function dlb_polldrom
230 function dlb_polldrom_update() result (ierr) &
233 integer(kind=c_int) :: ierr
234 end function dlb_polldrom_update
236 function dlb_checkcpuavailability(cpuid) result(ierr) &
239 integer(kind=c_int) :: ierr
240 integer(kind=c_int), value, intent(in) :: cpuid
241 end function dlb_checkcpuavailability
243 function dlb_barrier() result (ierr) &
246 integer(kind=c_int) :: ierr
247 end function dlb_barrier
249 function dlb_barrierattach() result (ierr) &
252 integer(kind=c_int) :: ierr
253 end function dlb_barrierattach
255 function dlb_barrierdetach() result (ierr) &
258 integer(kind=c_int) :: ierr
259 end function dlb_barrierdetach
261 function dlb_barriernamedregister(barrier_name, flags) &
265 type(c_ptr) :: handle
266 character(kind=c_char), intent(in) :: barrier_name(*)
267 integer(kind=c_int), value, intent(in) :: flags
268 end function dlb_barriernamedregister
270 function dlb_barriernamedget(barrier_name, flags) &
274 type(c_ptr) :: handle
275 character(kind=c_char), intent(in) :: barrier_name(*)
276 integer(kind=c_int), value, intent(in) :: flags
277 end function dlb_barriernamedget
279 function dlb_barriernamed(handle) &
282 integer(kind=c_int) :: ierr
283 type(c_ptr), value, intent(in) :: handle
284 end function dlb_barriernamed
286 function dlb_barriernamedattach(handle) &
289 integer(kind=c_int) :: ierr
290 type(c_ptr), value, intent(in) :: handle
291 end function dlb_barriernamedattach
293 function dlb_barriernameddetach(handle) &
296 integer(kind=c_int) :: ierr
297 type(c_ptr), value, intent(in) :: handle
298 end function dlb_barriernameddetach
300 function dlb_setvariable(variable, val) result (ierr) &
303 integer(kind=c_int) :: ierr
304 character(kind=c_char), intent(in) :: variable(*)
305 character(kind=c_char), intent(in) :: val(*)
306 end function dlb_setvariable
308 function dlb_getvariable(variable, val) result (ierr) &
311 integer(kind=c_int) :: ierr
312 character(kind=c_char), intent(in) :: variable(*)
313 character(kind=c_char), intent(out) :: val(*)
314 end function dlb_getvariable
316 function dlb_printvariables() result (ierr) &
319 integer(kind=c_int) :: ierr
320 end function dlb_printvariables
322 function dlb_printshmem(num_columns, flags) result (ierr) &
325 integer(kind=c_int) :: ierr
326 integer(kind=c_int), value, intent(in) :: num_columns
327 integer(kind=c_int), value, intent(in) :: flags
328 end function dlb_printshmem
330 function dlb_strerror(errnum) result(str) &
334 integer(kind=c_int), value, intent(in) :: errnum
335 end function dlb_strerror
340 integer(kind=c_int) :: ierr
342 end function dlb_setobserverrole
344 function dlb_getversion(major, minor, patch) result (ierr) &
347 integer(kind=c_int) :: ierr
348 integer(kind=c_int), intent(out) :: major
349 integer(kind=c_int), intent(out) :: minor
350 integer(kind=c_int), intent(out) :: patch
351 end function dlb_getversion
355! -*- fortran -*- vim: set ft=fortran:
__thread bool thread_is_observer
Definition: DLB_kernel.c:56
int DLB_ReclaimCpu(int cpuid)
Reclaim a specific CPU that are owned by the process.
Definition: DLB_interface.c:210
const char * DLB_Strerror(int errnum)
Obtain a pointer to a string that describes the error code passed by argument.
Definition: DLB_interface.c:467
int DLB_AcquireCpusInMask(int ncpus, const_dlb_cpu_set_t mask)
Acquire some CPUs from a subset of CPUs.
Definition: DLB_interface.c:267
int DLB_PollDROM(int *ncpus, dlb_cpu_set_t mask)
Poll DROM module to check if the process needs to adapt to a new mask or number of CPUs.
Definition: DLB_interface.c:357
int DLB_AcquireCpu(int cpuid)
Acquire a specific CPU.
Definition: DLB_interface.c:240
int DLB_Barrier(void)
Perform a DLB Barrier among processes in the node.
Definition: DLB_interface.c:384
int DLB_BarrierNamedAttach(dlb_barrier_t *barrier)
Attach process to the named barrier team.
Definition: DLB_interface.c:421
int DLB_AcquireCpus(int ncpus)
Acquire a specific amount of CPUs.
Definition: DLB_interface.c:249
int DLB_ReclaimCpus(int ncpus)
Reclaim a specific amount of CPUs that are owned by the process.
Definition: DLB_interface.c:219
int DLB_GetVariable(const char *variable, char *value)
Query the value of a DLB internal variable.
Definition: DLB_interface.c:439
int DLB_Enable(void)
Enable DLB and all its features in case it was previously disabled, otherwise it has no effect.
Definition: DLB_interface.c:108
int DLB_SetMaxParallelism(int max)
Set the maximum number of resources to be used by the calling process.
Definition: DLB_interface.c:126
dlb_barrier_t * DLB_BarrierNamedRegister(const char *barrier_name, dlb_barrier_flags_t flags)
Register, or obtain, a named barrier.
Definition: DLB_interface.c:402
int DLB_LendCpuMask(const_dlb_cpu_set_t mask)
Lend a set of CPUs.
Definition: DLB_interface.c:189
int DLB_Lend(void)
Lend all the current CPUs.
Definition: DLB_interface.c:162
int DLB_LendCpus(int ncpus)
Lend a specific amount of CPUs, only useful for systems that do not work with cpu masks.
Definition: DLB_interface.c:180
int DLB_BarrierNamed(dlb_barrier_t *barrier)
Perform a DLB Barrier using the named barrier among processes in the node.
int DLB_CallbackGet(dlb_callbacks_t which, dlb_callback_t *callback, void **arg)
Getter for DLB callbacks.
Definition: DLB_interface.c:153
int DLB_ReturnCpu(int cpuid)
Return the specific CPU if it has been reclaimed.
Definition: DLB_interface.c:336
int DLB_BorrowCpus(int ncpus)
Borrow a specific amount of CPUs.
Definition: DLB_interface.c:297
int DLB_LendCpu(int cpuid)
Lend a specific CPU.
Definition: DLB_interface.c:171
int DLB_BarrierAttach(void)
Attach process to the DLB Barrier team.
Definition: DLB_interface.c:390
int DLB_AcquireCpuMask(const_dlb_cpu_set_t mask)
Acquire a set of CPUs.
Definition: DLB_interface.c:258
int DLB_Reclaim(void)
Reclaim all the CPUs that are owned by the process.
Definition: DLB_interface.c:201
int DLB_CheckCpuAvailability(int cpuid)
Check whether the specified CPU is being used by another process.
Definition: DLB_interface.c:378
int DLB_BorrowCpu(int cpuid)
Borrow a specific CPU.
Definition: DLB_interface.c:288
int DLB_GetVersion(int *major, int *minor, int *patch)
Return the DLB version.
Definition: DLB_interface.c:478
int DLB_BarrierNamedDetach(dlb_barrier_t *barrier)
Detach process from the named barrier team.
Definition: DLB_interface.c:427
int DLB_PrintVariables(int print_extended)
Print DLB internal variables.
Definition: DLB_interface.c:445
int DLB_UnsetMaxParallelism(void)
Unset the maximum number of resources to be used by the calling process.
Definition: DLB_interface.c:135
int DLB_PrintShmem(int num_columns, dlb_printshmem_flags_t print_flags)
Print the data stored in the shmem.
Definition: DLB_interface.c:461
int DLB_ReclaimCpuMask(const_dlb_cpu_set_t mask)
Reclaim a set of CPUs.
Definition: DLB_interface.c:228
int DLB_Disable(void)
Disable DLB actions for the calling process.
Definition: DLB_interface.c:117
int DLB_BorrowCpuMask(const_dlb_cpu_set_t mask)
Borrow a set of CPUs.
Definition: DLB_interface.c:306
int DLB_BorrowCpusInMask(int ncpus, const_dlb_cpu_set_t mask)
Borrow some CPUs from a subset of CPUs.
Definition: DLB_interface.c:315
int DLB_PollDROM_Update(void)
Poll DROM module to check if the process needs to adapt to a new mask and update it if necessary usin...
Definition: DLB_interface.c:366
int DLB_CallbackSet(dlb_callbacks_t which, dlb_callback_t callback, void *arg)
Setter for DLB callbacks.
Definition: DLB_interface.c:147
int DLB_Finalize(void)
Finalize DLB library and clean up all its data structures. Must be called by each process before exit...
Definition: DLB_interface.c:71
dlb_barrier_t * DLB_BarrierNamedGet(const char *barrier_name, dlb_barrier_flags_t flags)
Register, or obtain, a named barrier.
int DLB_BarrierDetach(void)
Detach process from the DLB Barrier team.
Definition: DLB_interface.c:396
int DLB_Borrow(void)
Borrow all the possible CPUs registered on DLB.
Definition: DLB_interface.c:279
int DLB_SetVariable(const char *variable, const char *value)
Change the value of a DLB internal variable.
Definition: DLB_interface.c:433
int DLB_ReturnCpuMask(const_dlb_cpu_set_t mask)
Return a set of CPUs if some of them have been reclaimed.
Definition: DLB_interface.c:345
int DLB_SetObserverRole(bool thread_is_observer)
Modify the current thread DLB role to either observer or particpant.
Definition: DLB_interface.c:472
int DLB_Return(void)
Return claimed CPUs of other processes.
Definition: DLB_interface.c:327
@ DLB_COLOR_AUTO
Definition: dlb_types.h:46
@ DLB_COLOR_ALWAYS
Definition: dlb_types.h:47
@ DLB_BARRIER_LEWI_ON
Definition: dlb_types.h:53
@ DLB_BARRIER_LEWI_RUNTIME
Definition: dlb_types.h:54
@ DLB_BARRIER_LEWI_OFF
Definition: dlb_types.h:52
!Copyright Barcelona Supercomputing Center !This file is part of the DLB library !DLB is free either version of the !but WITHOUT ANY WARRANTY
Definition: dlbf.h:12
!Copyright Barcelona Supercomputing Center !This file is part of the DLB library !DLB is free either version of the or(at your option) any later version. ! ! ! ! DLB is distributed in the hope that it will be useful
without even the implied warranty of !MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the !GNU Lesser General Public License for more details !You should have received a copy of the GNU Lesser General Public License !along with DLB If not
Definition: dlbf.h:17
!Copyright Barcelona Supercomputing Center !This file is part of the DLB library !DLB is free either version of the License
Definition: dlbf.h:8
!Copyright Barcelona Supercomputing Center !This file is part of the DLB library !DLB is free software
Definition: dlbf.h:8