Dynamic Load Balance 3.6.1+32-59d1
dlbf.h
Go to the documentation of this file.
1!-------------------------------------------------------------------------------!
2! Copyright 2009-2021 Barcelona Supercomputing Center !
3! !
4! This file is part of the DLB library. !
5! !
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. !
10! !
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. !
15! !
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!-------------------------------------------------------------------------------!
19
20 include 'dlbf-errors.h'
26
27 interface
28 function dlb_init(ncpus, mask, dlb_args) result (ierr) &
29 & bind(c, name='DLB_Init')
30 use iso_c_binding
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(*)
35 end function dlb_init
36
37 function dlb_finalize() result (ierr) &
38 & bind(c, name='DLB_Finalize')
39 use iso_c_binding
40 integer(kind=c_int) :: ierr
41 end function dlb_finalize
42
43 function dlb_enable() result (ierr) &
44 & bind(c, name='DLB_Enable')
45 use iso_c_binding
46 integer(kind=c_int) :: ierr
47 end function dlb_enable
48
49 function dlb_disable() result (ierr) &
50 & bind(c, name='DLB_Disable')
51 use iso_c_binding
52 integer(kind=c_int) :: ierr
53 end function dlb_disable
54
55 function dlb_setmaxparallelism(maxp) result (ierr) &
56 & bind(c, name='DLB_SetMaxParallelism')
57 use iso_c_binding
58 integer(kind=c_int) :: ierr
59 integer(kind=c_int), value, intent(in) :: maxp
60 end function dlb_setmaxparallelism
61
62 function dlb_unsetmaxparallelism() result (ierr) &
63 & bind(c, name='DLB_UnsetMaxParallelism')
64 use iso_c_binding
65 integer(kind=c_int) :: ierr
66 end function dlb_unsetmaxparallelism
67
68 function dlb_callbackset(which, callback) result (ierr) &
69 & bind(c, name='DLB_CallbackSet')
70 use iso_c_binding
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
75
76 function dlb_callbackget(which, callback) result (ierr) &
77 & bind(c, name='DLB_CallbackGet')
78 use iso_c_binding
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
83
84 function dlb_lend() result (ierr) &
85 & bind(c, name='DLB_Lend')
86 use iso_c_binding
87 integer(kind=c_int) :: ierr
88 end function dlb_lend
89
90 function dlb_lendcpu(cpuid) result (ierr) &
91 & bind(c, name='DLB_LendCpu')
92 use iso_c_binding
93 integer(kind=c_int) :: ierr
94 integer(kind=c_int), value, intent(in) :: cpuid
95 end function dlb_lendcpu
96
97 function dlb_lendcpus(ncpus) result (ierr) &
98 & bind(c, name='DLB_LendCpus')
99 use iso_c_binding
100 integer(kind=c_int) :: ierr
101 integer(kind=c_int), value, intent(in) :: ncpus
102 end function dlb_lendcpus
103
104 function dlb_lendcpumask(mask) result (ierr) &
105 & bind(c, name='DLB_LendCpuMask')
106 use iso_c_binding
107 integer(kind=c_int) :: ierr
108 type(c_ptr), value, intent(in) :: mask
109 end function dlb_lendcpumask
110
111 function dlb_reclaim() result (ierr) &
112 & bind(c, name='DLB_Reclaim')
113 use iso_c_binding
114 integer(kind=c_int) :: ierr
115 end function dlb_reclaim
116
117 function dlb_reclaimcpu(cpuid) result (ierr) &
118 & bind(c, name='DLB_ReclaimCpu')
119 use iso_c_binding
120 integer(kind=c_int) :: ierr
121 integer(kind=c_int), value, intent(in) :: cpuid
122 end function dlb_reclaimcpu
123
124 function dlb_reclaimcpus(ncpus) result (ierr) &
125 & bind(c, name='DLB_ReclaimCpus')
126 use iso_c_binding
127 integer(kind=c_int) :: ierr
128 integer(kind=c_int), value, intent(in) :: ncpus
129 end function dlb_reclaimcpus
130
131 function dlb_reclaimcpumask(mask) result (ierr) &
132 & bind(c, name='DLB_ReclaimCpuMask')
133 use iso_c_binding
134 integer(kind=c_int) :: ierr
135 type(c_ptr), value, intent(in) :: mask
136 end function dlb_reclaimcpumask
137
138 function dlb_acquirecpu(cpuid) result (ierr) &
139 & bind(c, name='DLB_AcquireCpu')
140 use iso_c_binding
141 integer(kind=c_int) :: ierr
142 integer(kind=c_int), value, intent(in) :: cpuid
143 end function dlb_acquirecpu
144
145 function dlb_acquirecpus(ncpus) result (ierr) &
146 & bind(c, name='DLB_AcquireCpus')
147 use iso_c_binding
148 integer(kind=c_int) :: ierr
149 integer(kind=c_int), value, intent(in) :: ncpus
150 end function dlb_acquirecpus
151
152 function dlb_acquirecpumask(mask) result (ierr) &
153 & bind(c, name='DLB_AcquireCpuMask')
154 use iso_c_binding
155 integer(kind=c_int) :: ierr
156 type(c_ptr), value, intent(in) :: mask
157 end function dlb_acquirecpumask
158
159 function dlb_acquirecpusinmask(ncpus, mask) result (ierr) &
160 & bind(c, name='DLB_AcquireCpusInMask')
161 use iso_c_binding
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
166
167 function dlb_borrow() result (ierr) &
168 & bind(c, name='DLB_Borrow')
169 use iso_c_binding
170 integer(kind=c_int) :: ierr
171 end function dlb_borrow
172
173 function dlb_borrowcpu(cpuid) result (ierr) &
174 & bind(c, name='DLB_BorrowCpu')
175 use iso_c_binding
176 integer(kind=c_int) :: ierr
177 integer(kind=c_int), value, intent(in) :: cpuid
178 end function dlb_borrowcpu
179
180 function dlb_borrowcpus(ncpus) result (ierr) &
181 & bind(c, name='DLB_BorrowCpus')
182 use iso_c_binding
183 integer(kind=c_int) :: ierr
184 integer(kind=c_int), value, intent(in) :: ncpus
185 end function dlb_borrowcpus
186
187 function dlb_borrowcpumask(mask) result (ierr) &
188 & bind(c, name='DLB_BorrowCpuMask')
189 use iso_c_binding
190 integer(kind=c_int) :: ierr
191 type(c_ptr), value, intent(in) :: mask
192 end function dlb_borrowcpumask
193
194 function dlb_borrowcpusinmask(ncpus, mask) result (ierr) &
195 & bind(c, name='DLB_BorrowCpusInMask')
196 use iso_c_binding
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
201
202 function dlb_return() result (ierr) &
203 & bind(c, name='DLB_Return')
204 use iso_c_binding
205 integer(kind=c_int) :: ierr
206 end function dlb_return
207
208 function dlb_returncpu(cpuid) result (ierr) &
209 & bind(c, name='DLB_ReturnCpu')
210 use iso_c_binding
211 integer(kind=c_int) :: ierr
212 integer(kind=c_int), value, intent(in) :: cpuid
213 end function dlb_returncpu
214
215 function dlb_returncpumask(mask) result (ierr) &
216 & bind(c, name='DLB_ReturnCpuMask')
217 use iso_c_binding
218 integer(kind=c_int) :: ierr
219 type(c_ptr), value, intent(in) :: mask
220 end function dlb_returncpumask
221
222 function dlb_polldrom(ncpus, mask) result (ierr) &
223 & bind(c, name='DLB_PollDROM')
224 use iso_c_binding
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
229
230 function dlb_polldrom_update() result (ierr) &
231 & bind(c, name='DLB_PollDROM_Update')
232 use iso_c_binding
233 integer(kind=c_int) :: ierr
234 end function dlb_polldrom_update
235
236 function dlb_checkcpuavailability(cpuid) result(ierr) &
237 & bind(c, name='DLB_CheckCpuAvailability')
238 use iso_c_binding
239 integer(kind=c_int) :: ierr
240 integer(kind=c_int), value, intent(in) :: cpuid
241 end function dlb_checkcpuavailability
242
243 function dlb_barrier() result (ierr) &
244 & bind(c, name='DLB_Barrier')
245 use iso_c_binding
246 integer(kind=c_int) :: ierr
247 end function dlb_barrier
248
249 function dlb_barrierattach() result (ierr) &
250 & bind(c, name='DLB_BarrierAttach')
251 use iso_c_binding
252 integer(kind=c_int) :: ierr
253 end function dlb_barrierattach
254
255 function dlb_barrierdetach() result (ierr) &
256 & bind(c, name='DLB_BarrierDetach')
257 use iso_c_binding
258 integer(kind=c_int) :: ierr
259 end function dlb_barrierdetach
260
261 function dlb_barriernamedregister(barrier_name, flags) &
262 & result (handle) &
263 & bind(c, name='DLB_BarrierNamedRegister')
264 use iso_c_binding
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
269
270 function dlb_barriernamedget(barrier_name, flags) &
271 & result (handle) &
272 & bind(c, name='DLB_BarrierNamedGet')
273 use iso_c_binding
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
278
279 function dlb_barriernamed(handle) &
280 & result (ierr) bind(c, name='DLB_BarrierNamed')
281 use iso_c_binding
282 integer(kind=c_int) :: ierr
283 type(c_ptr), value, intent(in) :: handle
284 end function dlb_barriernamed
285
286 function dlb_barriernamedattach(handle) &
287 & result (ierr) bind(c, name='DLB_BarrierNamedAttach')
288 use iso_c_binding
289 integer(kind=c_int) :: ierr
290 type(c_ptr), value, intent(in) :: handle
291 end function dlb_barriernamedattach
292
293 function dlb_barriernameddetach(handle) &
294 & result (ierr) bind(c, name='DLB_BarrierNamedDetach')
295 use iso_c_binding
296 integer(kind=c_int) :: ierr
297 type(c_ptr), value, intent(in) :: handle
298 end function dlb_barriernameddetach
299
300 function dlb_setvariable(variable, val) result (ierr) &
301 & bind(c, name='DLB_SetVariable')
302 use iso_c_binding
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
307
308 function dlb_getvariable(variable, val) result (ierr) &
309 & bind(c, name='DLB_GetVariable')
310 use iso_c_binding
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
315
316 function dlb_printvariables() result (ierr) &
317 & bind(c, name='DLB_PrintVariables')
318 use iso_c_binding
319 integer(kind=c_int) :: ierr
320 end function dlb_printvariables
321
322 function dlb_printshmem(num_columns, flags) result (ierr) &
323 & bind(c, name='DLB_PrintShmem')
324 use iso_c_binding
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
329
330 function dlb_strerror(errnum) result(str) &
331 & bind(c, name='DLB_Strerror')
332 use iso_c_binding
333 type(c_ptr) :: str
334 integer(kind=c_int), value, intent(in) :: errnum
335 end function dlb_strerror
336
337 function dlb_setobserverrole(thread_is_observer) result (ierr) &
338 & bind(c, name='DLB_SetObserverRole')
339 use iso_c_binding
340 integer(kind=c_int) :: ierr
341 logical(kind=c_bool) :: thread_is_observer
342 end function dlb_setobserverrole
343
344 function dlb_getversion(major, minor, patch) result (ierr) &
345 & bind(c, name='DLB_GetVersion')
346 use iso_c_binding
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
352
353 end interface
354
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