fstarpu_mod.f90 154 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539
  1. ! StarPU --- Runtime system for heterogeneous multicore architectures.
  2. !
  3. ! Copyright (C) 2016-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
  4. !
  5. ! StarPU is free software; you can redistribute it and/or modify
  6. ! it under the terms of the GNU Lesser General Public License as published by
  7. ! the Free Software Foundation; either version 2.1 of the License, or (at
  8. ! your option) any later version.
  9. !
  10. ! StarPU is distributed in the hope that it will be useful, but
  11. ! WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. !
  14. ! See the GNU Lesser General Public License in COPYING.LGPL for more details.
  15. !
  16. module fstarpu_mod
  17. use iso_c_binding
  18. implicit none
  19. ! Note: Constants truly are intptr_t, but are declared as c_ptr to be
  20. ! readily usable in c_ptr arrays to mimic variadic functions.
  21. ! Note: Bitwise or operator is provided by the .ior. overloaded operator
  22. type(c_ptr), bind(C) :: FSTARPU_R
  23. type(c_ptr), bind(C) :: FSTARPU_W
  24. type(c_ptr), bind(C) :: FSTARPU_RW
  25. type(c_ptr), bind(C) :: FSTARPU_SCRATCH
  26. type(c_ptr), bind(C) :: FSTARPU_REDUX
  27. type(c_ptr), bind(C) :: FSTARPU_MPI_REDUX
  28. type(c_ptr), bind(C) :: FSTARPU_COMMUTE
  29. type(c_ptr), bind(C) :: FSTARPU_SSEND
  30. type(c_ptr), bind(C) :: FSTARPU_LOCALITY
  31. type(c_ptr), bind(C) :: FSTARPU_DATA_ARRAY
  32. type(c_ptr), bind(C) :: FSTARPU_DATA_MODE_ARRAY
  33. type(c_ptr), bind(C) :: FSTARPU_CL_ARGS
  34. type(c_ptr), bind(C) :: FSTARPU_CL_ARGS_NFREE
  35. type(c_ptr), bind(C) :: FSTARPU_TASK_DEPS_ARRAY
  36. type(c_ptr), bind(C) :: FSTARPU_CALLBACK
  37. type(c_ptr), bind(C) :: FSTARPU_CALLBACK_WITH_ARG
  38. type(c_ptr), bind(C) :: FSTARPU_CALLBACK_WITH_ARG_NFREE
  39. type(c_ptr), bind(C) :: FSTARPU_CALLBACK_ARG
  40. type(c_ptr), bind(C) :: FSTARPU_CALLBACK_ARG_NFREE
  41. type(c_ptr), bind(C) :: FSTARPU_PROLOGUE_CALLBACK
  42. type(c_ptr), bind(C) :: FSTARPU_PROLOGUE_CALLBACK_ARG
  43. type(c_ptr), bind(C) :: FSTARPU_PROLOGUE_CALLBACK_ARG_NFREE
  44. type(c_ptr), bind(C) :: FSTARPU_PROLOGUE_CALLBACK_POP
  45. type(c_ptr), bind(C) :: FSTARPU_PROLOGUE_CALLBACK_POP_ARG
  46. type(c_ptr), bind(C) :: FSTARPU_PROLOGUE_CALLBACK_POP_ARG_NFREE
  47. type(c_ptr), bind(C) :: FSTARPU_PRIORITY
  48. type(c_ptr), bind(C) :: FSTARPU_EXECUTE_ON_NODE
  49. type(c_ptr), bind(C) :: FSTARPU_EXECUTE_ON_DATA
  50. type(c_ptr), bind(C) :: FSTARPU_EXECUTE_ON_WORKER
  51. type(c_ptr), bind(C) :: FSTARPU_WORKER_ORDER
  52. type(c_ptr), bind(C) :: FSTARPU_EXECUTE_WHERE
  53. type(c_ptr), bind(C) :: FSTARPU_HYPERVISOR_TAG
  54. type(c_ptr), bind(C) :: FSTARPU_POSSIBLY_PARALLEL
  55. type(c_ptr), bind(C) :: FSTARPU_FLOPS
  56. type(c_ptr), bind(C) :: FSTARPU_TAG
  57. type(c_ptr), bind(C) :: FSTARPU_TAG_ONLY
  58. type(c_ptr), bind(C) :: FSTARPU_NAME
  59. type(c_ptr), bind(C) :: FSTARPU_TASK_COLOR
  60. type(c_ptr), bind(C) :: FSTARPU_TASK_SYNCHRONOUS
  61. type(c_ptr), bind(C) :: FSTARPU_HANDLES_SEQUENTIAL_CONSISTENCY
  62. type(c_ptr), bind(C) :: FSTARPU_TASK_END_DEP
  63. type(c_ptr), bind(C) :: FSTARPU_NODE_SELECTION_POLICY
  64. type(c_ptr), bind(C) :: FSTARPU_TASK_SCHED_DATA
  65. type(c_ptr), bind(C) :: FSTARPU_VALUE
  66. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX
  67. type(c_ptr), bind(C) :: FSTARPU_CPU_WORKER
  68. type(c_ptr), bind(C) :: FSTARPU_CUDA_WORKER
  69. type(c_ptr), bind(C) :: FSTARPU_OPENCL_WORKER
  70. type(c_ptr), bind(C) :: FSTARPU_ANY_WORKER
  71. integer(c_int), bind(C) :: FSTARPU_NMAXBUFS
  72. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_POLICY_NAME
  73. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_POLICY_STRUCT
  74. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_POLICY_MIN_PRIO
  75. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_POLICY_MAX_PRIO
  76. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_HIERARCHY_LEVEL
  77. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_NESTED
  78. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_AWAKE_WORKERS
  79. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_POLICY_INIT
  80. type(c_ptr), bind(C) :: FSTARPU_SCHED_CTX_USER_DATA
  81. type(c_ptr), bind(C) :: FSTARPU_NOWHERE
  82. type(c_ptr), bind(C) :: FSTARPU_CPU
  83. type(c_ptr), bind(C) :: FSTARPU_CUDA
  84. type(c_ptr), bind(C) :: FSTARPU_OPENCL
  85. type(c_ptr), bind(C) :: FSTARPU_CODELET_SIMGRID_EXECUTE
  86. type(c_ptr), bind(C) :: FSTARPU_CODELET_SIMGRID_EXECUTE_AND_INJECT
  87. type(c_ptr), bind(C) :: FSTARPU_CUDA_ASYNC
  88. type(c_ptr), bind(C) :: FSTARPU_OPENCL_ASYNC
  89. !type(c_ptr), bind(C) :: FSTARPU_PER_WORKER
  90. !type(c_ptr), bind(C) :: FSTARPU_PER_ARCH
  91. !type(c_ptr), bind(C) :: FSTARPU_PER_COMMON
  92. type(c_ptr), bind(C) :: FSTARPU_HISTORY_BASED
  93. type(c_ptr), bind(C) :: FSTARPU_REGRESSION_BASED
  94. type(c_ptr), bind(C) :: FSTARPU_NL_REGRESSION_BASED
  95. type(c_ptr), bind(C) :: FSTARPU_MULTIPLE_REGRESSION_BASED
  96. ! (some) portable iso_c_binding types
  97. type(c_ptr), bind(C) :: FSTARPU_SZ_C_DOUBLE
  98. type(c_ptr), bind(C) :: FSTARPU_SZ_C_FLOAT
  99. type(c_ptr), bind(C) :: FSTARPU_SZ_C_CHAR
  100. type(c_ptr), bind(C) :: FSTARPU_SZ_C_INT
  101. type(c_ptr), bind(C) :: FSTARPU_SZ_C_INTPTR_T
  102. type(c_ptr), bind(C) :: FSTARPU_SZ_C_PTR
  103. type(c_ptr), bind(C) :: FSTARPU_SZ_C_SIZE_T
  104. ! (some) native Fortran types
  105. type(c_ptr), bind(C) :: FSTARPU_SZ_CHARACTER
  106. type(c_ptr), bind(C) :: FSTARPU_SZ_INTEGER
  107. type(c_ptr), bind(C) :: FSTARPU_SZ_INT4
  108. type(c_ptr), bind(C) :: FSTARPU_SZ_INT8
  109. type(c_ptr), bind(C) :: FSTARPU_SZ_REAL
  110. type(c_ptr), bind(C) :: FSTARPU_SZ_REAL4
  111. type(c_ptr), bind(C) :: FSTARPU_SZ_REAL8
  112. type(c_ptr), bind(C) :: FSTARPU_SZ_DOUBLE_PRECISION
  113. type(c_ptr), bind(C) :: FSTARPU_SZ_COMPLEX
  114. type(c_ptr), bind(C) :: FSTARPU_SZ_COMPLEX4
  115. type(c_ptr), bind(C) :: FSTARPU_SZ_COMPLEX8
  116. interface operator (.ior.)
  117. procedure or_cptrs
  118. end interface operator (.ior.)
  119. interface
  120. ! == starpu.h ==
  121. ! void starpu_conf_init(struct starpu_conf *conf);
  122. subroutine fstarpu_conf_init (conf) bind(C,name="starpu_conf_init")
  123. use iso_c_binding, only: c_ptr
  124. type(c_ptr), value, intent(in) :: conf
  125. end subroutine fstarpu_conf_init
  126. function fstarpu_conf_allocate () bind(C)
  127. use iso_c_binding, only: c_ptr
  128. type(c_ptr) :: fstarpu_conf_allocate
  129. end function fstarpu_conf_allocate
  130. subroutine fstarpu_conf_free (conf) bind(C)
  131. use iso_c_binding, only: c_ptr
  132. type(c_ptr), value, intent(in) :: conf
  133. end subroutine fstarpu_conf_free
  134. subroutine fstarpu_conf_set_sched_policy_name (conf, policy_name) bind(C)
  135. use iso_c_binding, only: c_ptr, c_char
  136. type(c_ptr), value, intent(in) :: conf
  137. character(c_char), intent(in) :: policy_name
  138. end subroutine fstarpu_conf_set_sched_policy_name
  139. subroutine fstarpu_conf_set_min_prio (conf, min_prio) bind(C)
  140. use iso_c_binding, only: c_ptr, c_int
  141. type(c_ptr), value, intent(in) :: conf
  142. integer(c_int), value, intent(in) :: min_prio
  143. end subroutine fstarpu_conf_set_min_prio
  144. subroutine fstarpu_conf_set_max_prio (conf, max_prio) bind(C)
  145. use iso_c_binding, only: c_ptr, c_int
  146. type(c_ptr), value, intent(in) :: conf
  147. integer(c_int), value, intent(in) :: max_prio
  148. end subroutine fstarpu_conf_set_max_prio
  149. subroutine fstarpu_conf_set_ncpu (conf, ncpu) bind(C)
  150. use iso_c_binding, only: c_ptr, c_int
  151. type(c_ptr), value, intent(in) :: conf
  152. integer(c_int), value, intent(in) :: ncpu
  153. end subroutine fstarpu_conf_set_ncpu
  154. subroutine fstarpu_conf_set_ncuda (conf, ncuda) bind(C)
  155. use iso_c_binding, only: c_ptr, c_int
  156. type(c_ptr), value, intent(in) :: conf
  157. integer(c_int), value, intent(in) :: ncuda
  158. end subroutine fstarpu_conf_set_ncuda
  159. subroutine fstarpu_conf_set_nopencl (conf, nopencl) bind(C)
  160. use iso_c_binding, only: c_ptr, c_int
  161. type(c_ptr), value, intent(in) :: conf
  162. integer(c_int), value, intent(in) :: nopencl
  163. end subroutine fstarpu_conf_set_nopencl
  164. ! starpu_init: see fstarpu_init
  165. ! starpu_initialize: see fstarpu_init
  166. ! void starpu_pause(void);
  167. subroutine fstarpu_pause() bind(C,name="starpu_pause")
  168. end subroutine fstarpu_pause
  169. ! void starpu_resume(void);
  170. subroutine fstarpu_resume() bind(C,name="starpu_resume")
  171. end subroutine fstarpu_resume
  172. ! void starpu_shutdown(void);
  173. subroutine fstarpu_shutdown () bind(C,name="starpu_shutdown")
  174. end subroutine fstarpu_shutdown
  175. ! starpu_topology_print
  176. subroutine fstarpu_topology_print () bind(C)
  177. end subroutine fstarpu_topology_print
  178. ! int starpu_asynchronous_copy_disabled(void);
  179. function fstarpu_asynchronous_copy_disabled() bind(C,name="starpu_asynchronous_copy_disabled")
  180. use iso_c_binding, only: c_int
  181. integer(c_int) :: fstarpu_asynchronous_copy_disabled
  182. end function fstarpu_asynchronous_copy_disabled
  183. ! int starpu_asynchronous_cuda_copy_disabled(void);
  184. function fstarpu_asynchronous_cuda_copy_disabled() bind(C,name="starpu_asynchronous_cuda_copy_disabled")
  185. use iso_c_binding, only: c_int
  186. integer(c_int) :: fstarpu_asynchronous_cuda_copy_disabled
  187. end function fstarpu_asynchronous_cuda_copy_disabled
  188. ! int starpu_asynchronous_opencl_copy_disabled(void);
  189. function fstarpu_asynchronous_opencl_copy_disabled() bind(C,name="starpu_asynchronous_opencl_copy_disabled")
  190. use iso_c_binding, only: c_int
  191. integer(c_int) :: fstarpu_asynchronous_opencl_copy_disabled
  192. end function fstarpu_asynchronous_opencl_copy_disabled
  193. ! void starpu_display_stats();
  194. subroutine fstarpu_display_stats() bind(C,name="starpu_display_stats")
  195. end subroutine fstarpu_display_stats
  196. ! void starpu_get_version(int *major, int *minor, int *release);
  197. subroutine fstarpu_get_version(major,minor,release) bind(C,name="starpu_get_version")
  198. use iso_c_binding, only: c_int
  199. integer(c_int), intent(out) :: major,minor,release
  200. end subroutine fstarpu_get_version
  201. ! == starpu_worker.h ==
  202. ! unsigned starpu_worker_get_count(void);
  203. function fstarpu_worker_get_count() bind(C,name="starpu_worker_get_count")
  204. use iso_c_binding, only: c_int
  205. integer(c_int) :: fstarpu_worker_get_count
  206. end function fstarpu_worker_get_count
  207. ! unsigned starpu_combined_worker_get_count(void);
  208. function fstarpu_combined_worker_get_count() bind(C,name="starpu_combined_worker_get_count")
  209. use iso_c_binding, only: c_int
  210. integer(c_int) :: fstarpu_combined_worker_get_count
  211. end function fstarpu_combined_worker_get_count
  212. ! unsigned starpu_worker_is_combined_worker(int id);
  213. function fstarpu_worker_is_combined_worker(id) bind(C,name="starpu_worker_is_combined_worker")
  214. use iso_c_binding, only: c_int
  215. integer(c_int) :: fstarpu_worker_is_combined_worker
  216. integer(c_int), value, intent(in) :: id
  217. end function fstarpu_worker_is_combined_worker
  218. ! unsigned starpu_cpu_worker_get_count(void);
  219. function fstarpu_cpu_worker_get_count() bind(C,name="starpu_cpu_worker_get_count")
  220. use iso_c_binding, only: c_int
  221. integer(c_int) :: fstarpu_cpu_worker_get_count
  222. end function fstarpu_cpu_worker_get_count
  223. ! unsigned starpu_cuda_worker_get_count(void);
  224. function fstarpu_cuda_worker_get_count() bind(C,name="starpu_cuda_worker_get_count")
  225. use iso_c_binding, only: c_int
  226. integer(c_int) :: fstarpu_cuda_worker_get_count
  227. end function fstarpu_cuda_worker_get_count
  228. ! unsigned starpu_opencl_worker_get_count(void);
  229. function fstarpu_opencl_worker_get_count() bind(C,name="starpu_opencl_worker_get_count")
  230. use iso_c_binding, only: c_int
  231. integer(c_int) :: fstarpu_opencl_worker_get_count
  232. end function fstarpu_opencl_worker_get_count
  233. ! int starpu_worker_get_id(void);
  234. function fstarpu_worker_get_id() bind(C,name="starpu_worker_get_id")
  235. use iso_c_binding, only: c_int
  236. integer(c_int) :: fstarpu_worker_get_id
  237. end function fstarpu_worker_get_id
  238. ! _starpu_worker_get_id_check
  239. ! starpu_worker_get_id_check
  240. ! int starpu_worker_get_bindid(int workerid);
  241. function fstarpu_worker_get_bindid(id) bind(C,name="starpu_worker_get_bindid")
  242. use iso_c_binding, only: c_int
  243. integer(c_int) :: fstarpu_worker_get_bindid
  244. integer(c_int), value, intent(in) :: id
  245. end function fstarpu_worker_get_bindid
  246. ! int starpu_combined_worker_get_id(void);
  247. function fstarpu_combined_worker_get_id() bind(C,name="starpu_combined_worker_get_id")
  248. use iso_c_binding, only: c_int
  249. integer(c_int) :: fstarpu_combined_worker_get_id
  250. end function fstarpu_combined_worker_get_id
  251. ! int starpu_combined_worker_get_size(void);
  252. function fstarpu_combined_worker_get_size() bind(C,name="starpu_combined_worker_get_size")
  253. use iso_c_binding, only: c_int
  254. integer(c_int) :: fstarpu_combined_worker_get_size
  255. end function fstarpu_combined_worker_get_size
  256. ! int starpu_combined_worker_get_rank(void);
  257. function fstarpu_combined_worker_get_rank() bind(C,name="starpu_combined_worker_get_rank")
  258. use iso_c_binding, only: c_int
  259. integer(c_int) :: fstarpu_combined_worker_get_rank
  260. end function fstarpu_combined_worker_get_rank
  261. ! enum starpu_worker_archtype starpu_worker_get_type(int id);
  262. function fstarpu_worker_get_type(id) bind(C)
  263. use iso_c_binding, only: c_int, c_ptr
  264. type(c_ptr) :: fstarpu_worker_get_type ! C function returns c_intptr_t
  265. integer(c_int),value,intent(in) :: id
  266. end function fstarpu_worker_get_type
  267. ! int starpu_worker_get_count_by_type(enum starpu_worker_archtype type);
  268. function fstarpu_worker_get_count_by_type(typeid) bind(C)
  269. use iso_c_binding, only: c_int, c_ptr
  270. integer(c_int) :: fstarpu_worker_get_count_by_type
  271. type(c_ptr),value,intent(in) :: typeid ! c_intptr_t expected by C func
  272. end function fstarpu_worker_get_count_by_type
  273. ! int starpu_worker_get_ids_by_type(enum starpu_worker_archtype type, int *workerids, int maxsize);
  274. function fstarpu_worker_get_ids_by_type(typeid, workerids, maxsize) bind(C)
  275. use iso_c_binding, only: c_int, c_ptr
  276. integer(c_int) :: fstarpu_worker_get_ids_by_type
  277. type(c_ptr),value,intent(in) :: typeid ! c_intptr_t expected by C func
  278. integer(c_int),intent(out) :: workerids(*)
  279. integer(c_int),value,intent(in) :: maxsize
  280. end function fstarpu_worker_get_ids_by_type
  281. ! int starpu_worker_get_by_type(enum starpu_worker_archtype type, int num);
  282. function fstarpu_worker_get_by_type(typeid, num) bind(C)
  283. use iso_c_binding, only: c_int, c_ptr
  284. integer(c_int) :: fstarpu_worker_get_by_type
  285. type(c_ptr),value,intent(in) :: typeid ! c_intptr_t expected by C func
  286. integer(c_int),value,intent(in) :: num
  287. end function fstarpu_worker_get_by_type
  288. ! int starpu_worker_get_by_devid(enum starpu_worker_archtype type, int devid);
  289. function fstarpu_worker_get_by_devid(typeid, devid) bind(C)
  290. use iso_c_binding, only: c_int, c_ptr
  291. integer(c_int) :: fstarpu_worker_get_by_devid
  292. type(c_ptr),value,intent(in) :: typeid ! c_intptr_t expected by C func
  293. integer(c_int),value,intent(in) :: devid
  294. end function fstarpu_worker_get_by_devid
  295. ! void starpu_worker_get_name(int id, char *dst, size_t maxlen);
  296. subroutine fstarpu_worker_get_name(id, dst, maxlen) bind(C,name="starpu_worker_get_name")
  297. use iso_c_binding, only: c_int, c_char, c_size_t
  298. integer(c_int),value,intent(in) :: id
  299. character(c_char),intent(out) :: dst(*)
  300. integer(c_size_t),value,intent(in) :: maxlen
  301. end subroutine fstarpu_worker_get_name
  302. ! int starpu_worker_get_devid(int id);
  303. function fstarpu_worker_get_devid(id) bind(C,name="starpu_worker_get_devid")
  304. use iso_c_binding, only: c_int
  305. integer(c_int) :: fstarpu_worker_get_devid
  306. integer(c_int), value, intent(in) :: id
  307. end function fstarpu_worker_get_devid
  308. ! int starpu_worker_get_mp_nodeid(int id);
  309. function fstarpu_worker_get_mp_nodeid(id) bind(C,name="starpu_worker_get_mp_nodeid")
  310. use iso_c_binding, only: c_int
  311. integer(c_int) :: fstarpu_worker_get_mp_nodeid
  312. integer(c_int), value, intent(in) :: id
  313. end function fstarpu_worker_get_mp_nodeid
  314. ! struct starpu_tree* starpu_workers_get_tree(void);
  315. ! unsigned starpu_worker_get_sched_ctx_list(int worker, unsigned **sched_ctx);
  316. ! unsigned starpu_worker_is_blocked(int workerid);
  317. function fstarpu_worker_is_blocked(id) bind(C,name="starpu_worker_is_blocked")
  318. use iso_c_binding, only: c_int
  319. integer(c_int) :: fstarpu_worker_is_blocked
  320. integer(c_int), value, intent(in) :: id
  321. end function fstarpu_worker_is_blocked
  322. ! unsigned starpu_worker_is_slave_somewhere(int workerid);
  323. function fstarpu_worker_is_slave_somewhere(id) bind(C,name="starpu_worker_is_slave_somewhere")
  324. use iso_c_binding, only: c_int
  325. integer(c_int) :: fstarpu_worker_is_slave_somewhere
  326. integer(c_int), value, intent(in) :: id
  327. end function fstarpu_worker_is_slave_somewhere
  328. ! char *starpu_worker_get_type_as_string(enum starpu_worker_archtype type);
  329. subroutine fstarpu_worker_get_type_as_string(typeid,dst,maxlen) bind(C)
  330. use iso_c_binding, only: c_ptr, c_char, c_size_t
  331. type(c_ptr),value,intent(in) :: typeid ! c_intptr_t expected by C func
  332. character(c_char),intent(out) :: dst(*)
  333. integer(c_size_t),value,intent(in) :: maxlen
  334. end subroutine fstarpu_worker_get_type_as_string
  335. ! int starpu_bindid_get_workerids(int bindid, int **workerids);
  336. ! == starpu_task.h ==
  337. ! void starpu_tag_declare_deps(starpu_tag_t id, unsigned ndeps, ...);
  338. ! void starpu_tag_declare_deps_array(starpu_tag_t id, unsigned ndeps, starpu_tag_t *array);
  339. subroutine fstarpu_tag_declare_deps_array(id,ndeps,tag_array) bind(C,name="starpu_tag_declare_deps_array")
  340. use iso_c_binding, only: c_int, c_long_long
  341. integer(c_int), value, intent(in) :: id
  342. integer(c_int), value, intent(in) :: ndeps
  343. integer(c_long_long), intent(in) :: tag_array(*)
  344. end subroutine fstarpu_tag_declare_deps_array
  345. ! void starpu_task_declare_deps_array(struct starpu_task *task, unsigned ndeps, struct starpu_task *task_array[]);
  346. subroutine fstarpu_task_declare_deps_array(task,ndeps,task_array) bind(C,name="starpu_task_declare_deps_array")
  347. use iso_c_binding, only: c_int, c_ptr
  348. type(c_ptr), value, intent(in) :: task
  349. integer(c_int), value, intent(in) :: ndeps
  350. type(c_ptr), intent(in) :: task_array(*)
  351. end subroutine fstarpu_task_declare_deps_array
  352. ! int starpu_tag_wait(starpu_tag_t id);
  353. function fstarpu_tag_wait(id) bind(C,name="starpu_tag_wait")
  354. use iso_c_binding, only: c_int, c_long_long
  355. integer(c_int) :: fstarpu_tag_wait
  356. integer(c_long_long), value, intent(in) :: id
  357. end function fstarpu_tag_wait
  358. ! int starpu_tag_wait_array(unsigned ntags, starpu_tag_t *id);
  359. function fstarpu_tag_wait_array(ntags,tag_array) bind(C,name="starpu_tag_wait_array")
  360. use iso_c_binding, only: c_int, c_long_long
  361. integer(c_int) :: fstarpu_tag_wait_array
  362. integer(c_int), value, intent(in) :: ntags
  363. integer(c_long_long), intent(in) :: tag_array(*)
  364. end function fstarpu_tag_wait_array
  365. ! void starpu_tag_notify_from_apps(starpu_tag_t id);
  366. subroutine fstarpu_tag_notify_from_apps(id) bind(C,name="starpu_tag_notify_from_apps")
  367. use iso_c_binding, only: c_long_long
  368. integer(c_long_long), value, intent(in) :: id
  369. end subroutine fstarpu_tag_notify_from_apps
  370. ! void starpu_tag_restart(starpu_tag_t id);
  371. subroutine fstarpu_tag_restart(id) bind(C,name="starpu_tag_restart")
  372. use iso_c_binding, only: c_long_long
  373. integer(c_long_long), value, intent(in) :: id
  374. end subroutine fstarpu_tag_restart
  375. ! void starpu_tag_remove(starpu_tag_t id);
  376. subroutine fstarpu_tag_remove(id) bind(C,name="starpu_tag_remove")
  377. use iso_c_binding, only: c_long_long
  378. integer(c_long_long), value, intent(in) :: id
  379. end subroutine fstarpu_tag_remove
  380. ! struct starpu_task *starpu_tag_get_task(starpu_tag_t id);
  381. function fstarpu_tag_get_task(id) bind(C,name="starpu_tag_get_task")
  382. use iso_c_binding, only: c_ptr, c_long_long
  383. type(c_ptr) :: fstarpu_tag_get_task
  384. integer(c_long_long), value, intent(in) :: id
  385. end function fstarpu_tag_get_task
  386. ! void starpu_task_init(struct starpu_task *task);
  387. subroutine fstarpu_task_init (task) bind(C,name="starpu_task_init")
  388. use iso_c_binding, only: c_ptr
  389. type(c_ptr), value, intent(in) :: task
  390. end subroutine fstarpu_task_init
  391. ! void starpu_task_clean(struct starpu_task *task);
  392. subroutine fstarpu_task_clean (task) bind(C,name="starpu_task_clean")
  393. use iso_c_binding, only: c_ptr
  394. type(c_ptr), value, intent(in) :: task
  395. end subroutine fstarpu_task_clean
  396. ! struct starpu_task *starpu_task_create(void) STARPU_ATTRIBUTE_MALLOC;
  397. function fstarpu_task_create () bind(C,name="starpu_task_create")
  398. use iso_c_binding, only: c_ptr
  399. type(c_ptr) :: fstarpu_task_create
  400. end function fstarpu_task_create
  401. ! void starpu_task_destroy(struct starpu_task *task);
  402. subroutine fstarpu_task_destroy (task) bind(C,name="starpu_task_destroy")
  403. use iso_c_binding, only: c_ptr
  404. type(c_ptr), value, intent(in) :: task
  405. end subroutine fstarpu_task_destroy
  406. ! int starpu_task_submit(struct starpu_task *task) STARPU_WARN_UNUSED_RESULT;
  407. function fstarpu_task_submit (task) bind(C,name="starpu_task_submit")
  408. use iso_c_binding, only: c_int,c_ptr
  409. integer(c_int) :: fstarpu_task_submit
  410. type(c_ptr), value, intent(in) :: task
  411. end function fstarpu_task_submit
  412. ! int starpu_task_submit_to_ctx(struct starpu_task *task, unsigned sched_ctx_id);
  413. function fstarpu_task_submit_to_ctx (task,sched_ctx_id) bind(C,name="starpu_task_submit_to_ctx")
  414. use iso_c_binding, only: c_int,c_ptr
  415. integer(c_int) :: fstarpu_task_submit_to_ctx
  416. type(c_ptr), value, intent(in) :: task
  417. integer(c_int), value, intent(in) :: sched_ctx_id
  418. end function fstarpu_task_submit_to_ctx
  419. ! int starpu_task_finished(struct starpu_task *task) STARPU_WARN_UNUSED_RESULT;
  420. function fstarpu_task_finished (task) bind(C,name="starpu_task_finished")
  421. use iso_c_binding, only: c_int,c_ptr
  422. integer(c_int) :: fstarpu_task_finished
  423. type(c_ptr), value, intent(in) :: task
  424. end function fstarpu_task_finished
  425. ! int starpu_task_wait(struct starpu_task *task) STARPU_WARN_UNUSED_RESULT;
  426. function fstarpu_task_wait (task) bind(C,name="starpu_task_wait")
  427. use iso_c_binding, only: c_int,c_ptr
  428. integer(c_int) :: fstarpu_task_wait
  429. type(c_ptr), value, intent(in) :: task
  430. end function fstarpu_task_wait
  431. ! int starpu_task_wait_array(struct starpu_task **tasks, unsigned nb_tasks) STARPU_WARN_UNUSED_RESULT;
  432. function fstarpu_task_wait_array(task_array,ntasks) bind(C,name="starpu_task_wait_array")
  433. use iso_c_binding, only: c_int, c_ptr
  434. integer(c_int) :: fstarpu_task_wait_array
  435. integer(c_int), value, intent(in) :: ntasks
  436. type(c_ptr), intent(in) :: task_array
  437. end function fstarpu_task_wait_array
  438. ! int starpu_task_wait_for_all(void);
  439. subroutine fstarpu_task_wait_for_all () bind(C,name="starpu_task_wait_for_all")
  440. end subroutine fstarpu_task_wait_for_all
  441. ! int starpu_task_wait_for_n_submitted(unsigned n);
  442. subroutine fstarpu_task_wait_for_n_submitted (n) bind(C,name="starpu_task_wait_for_n_submitted")
  443. use iso_c_binding, only: c_int
  444. integer(c_int), value, intent(in) :: n
  445. end subroutine fstarpu_task_wait_for_n_submitted
  446. ! int starpu_task_wait_for_all_in_ctx(unsigned sched_ctx_id);
  447. subroutine fstarpu_task_wait_for_all_in_ctx (ctx) bind(C,name="starpu_task_wait_for_all_in_ctx")
  448. use iso_c_binding, only: c_int
  449. integer(c_int), value, intent(in) :: ctx
  450. end subroutine fstarpu_task_wait_for_all_in_ctx
  451. ! int starpu_task_wait_for_n_submitted_in_ctx(unsigned sched_ctx_id, unsigned n);
  452. subroutine fstarpu_task_wait_for_n_submitted_in_ctx (ctx,n) bind(C,name="starpu_task_wait_for_n_submitted_in_ctx")
  453. use iso_c_binding, only: c_int
  454. integer(c_int), value, intent(in) :: ctx
  455. integer(c_int), value, intent(in) :: n
  456. end subroutine fstarpu_task_wait_for_n_submitted_in_ctx
  457. ! int starpu_task_wait_for_no_ready(void);
  458. function fstarpu_task_wait_for_no_ready () bind(C,name="starpu_task_wait_for_no_ready")
  459. use iso_c_binding, only: c_int
  460. integer(c_int) :: fstarpu_task_wait_for_no_ready
  461. end function fstarpu_task_wait_for_no_ready
  462. ! int starpu_task_nready(void);
  463. function fstarpu_task_nready () bind(C,name="starpu_task_nready")
  464. use iso_c_binding, only: c_int
  465. integer(c_int) :: fstarpu_task_nready
  466. end function fstarpu_task_nready
  467. ! int starpu_task_nsubmitted(void);
  468. function fstarpu_task_nsubmitted () bind(C,name="starpu_task_nsubmitted")
  469. use iso_c_binding, only: c_int
  470. integer(c_int) :: fstarpu_task_nsubmitted
  471. end function fstarpu_task_nsubmitted
  472. ! void starpu_do_schedule(void);
  473. subroutine fstarpu_do_schedule () bind(C,name="starpu_do_schedule")
  474. end subroutine fstarpu_do_schedule
  475. ! starpu_codelet_init
  476. subroutine fstarpu_codelet_init (codelet) bind(C,name="starpu_codelet_init")
  477. use iso_c_binding, only: c_ptr
  478. type(c_ptr), value, intent(in) :: codelet
  479. end subroutine fstarpu_codelet_init
  480. ! starpu_codelet_display_stats
  481. subroutine fstarpu_codelet_display_stats (codelet) bind(C,name="starpu_codelet_display_stats")
  482. use iso_c_binding, only: c_ptr
  483. type(c_ptr), value, intent(in) :: codelet
  484. end subroutine fstarpu_codelet_display_stats
  485. ! struct starpu_task *starpu_task_get_current(void);
  486. function fstarpu_task_get_current () bind(C,name="starpu_task_get_current")
  487. use iso_c_binding, only: c_ptr
  488. type(c_ptr) :: fstarpu_task_get_current
  489. end function fstarpu_task_get_current
  490. ! void starpu_parallel_task_barrier_init(struct starpu_task *task, int workerid);
  491. subroutine fstarpu_parallel_task_barrier_init_init (task,id) &
  492. bind(C,name="starpu_parallel_task_barrier_init_init")
  493. use iso_c_binding, only: c_ptr, c_int
  494. type(c_ptr), value, intent(in) :: task
  495. integer(c_int), value, intent(in) :: id
  496. end subroutine fstarpu_parallel_task_barrier_init_init
  497. ! void starpu_parallel_task_barrier_init_n(struct starpu_task *task, int worker_size);
  498. subroutine fstarpu_parallel_task_barrier_init_n_init_n (task,sz) &
  499. bind(C,name="starpu_parallel_task_barrier_init_n_init_n")
  500. use iso_c_binding, only: c_ptr, c_int
  501. type(c_ptr), value, intent(in) :: task
  502. integer(c_int), value, intent(in) :: sz
  503. end subroutine fstarpu_parallel_task_barrier_init_n_init_n
  504. ! struct starpu_task *starpu_task_dup(struct starpu_task *task);
  505. function fstarpu_task_dup (task) bind(C,name="starpu_task_dup")
  506. use iso_c_binding, only: c_ptr
  507. type(c_ptr) :: fstarpu_task_dup
  508. type(c_ptr), value, intent(in) :: task
  509. end function fstarpu_task_dup
  510. ! void starpu_task_set_implementation(struct starpu_task *task, unsigned impl);
  511. subroutine fstarpu_task_set_implementation (task,impl) &
  512. bind(C,name="starpu_task_set_implementation")
  513. use iso_c_binding, only: c_ptr,c_int
  514. type(c_ptr), value, intent(in) :: task
  515. integer(c_int), value, intent(in) :: impl
  516. end subroutine fstarpu_task_set_implementation
  517. ! unsigned starpu_task_get_implementation(struct starpu_task *task);
  518. function fstarpu_task_get_implementation (task) &
  519. bind(C,name="starpu_task_get_implementation")
  520. use iso_c_binding, only: c_ptr,c_int
  521. type(c_ptr), value, intent(in) :: task
  522. integer(c_int) :: fstarpu_task_get_implementation
  523. end function fstarpu_task_get_implementation
  524. ! --
  525. function fstarpu_codelet_allocate () bind(C)
  526. use iso_c_binding, only: c_ptr
  527. type(c_ptr) :: fstarpu_codelet_allocate
  528. end function fstarpu_codelet_allocate
  529. subroutine fstarpu_codelet_free (cl) bind(C)
  530. use iso_c_binding, only: c_ptr
  531. type(c_ptr), value, intent(in) :: cl
  532. end subroutine fstarpu_codelet_free
  533. subroutine fstarpu_codelet_set_name (cl, cl_name) bind(C)
  534. use iso_c_binding, only: c_ptr, c_char
  535. type(c_ptr), value, intent(in) :: cl
  536. character(c_char), intent(in) :: cl_name
  537. end subroutine fstarpu_codelet_set_name
  538. subroutine fstarpu_codelet_set_model (cl, cl_perfmodel) bind(C)
  539. use iso_c_binding, only: c_ptr
  540. type(c_ptr), value, intent(in) :: cl
  541. type(c_ptr), value, intent(in) :: cl_perfmodel
  542. end subroutine fstarpu_codelet_set_model
  543. subroutine fstarpu_codelet_set_energy_model (cl, cl_perfmodel) bind(C)
  544. use iso_c_binding, only: c_ptr
  545. type(c_ptr), value, intent(in) :: cl
  546. type(c_ptr), value, intent(in) :: cl_perfmodel
  547. end subroutine fstarpu_codelet_set_energy_model
  548. subroutine fstarpu_codelet_add_cpu_func (cl, f_ptr) bind(C)
  549. use iso_c_binding, only: c_ptr, c_funptr
  550. type(c_ptr), value, intent(in) :: cl
  551. type(c_funptr), value, intent(in) :: f_ptr
  552. end subroutine fstarpu_codelet_add_cpu_func
  553. subroutine fstarpu_codelet_add_cuda_func (cl, f_ptr) bind(C)
  554. use iso_c_binding, only: c_ptr, c_funptr
  555. type(c_ptr), value, intent(in) :: cl
  556. type(c_funptr), value, intent(in) :: f_ptr
  557. end subroutine fstarpu_codelet_add_cuda_func
  558. subroutine fstarpu_codelet_add_cuda_flags (cl, flags) bind(C)
  559. use iso_c_binding, only: c_ptr
  560. type(c_ptr), value, intent(in) :: cl
  561. type(c_ptr), value, intent(in) :: flags ! C function expects an intptr_t
  562. end subroutine fstarpu_codelet_add_cuda_flags
  563. subroutine fstarpu_codelet_add_opencl_func (cl, f_ptr) bind(C)
  564. use iso_c_binding, only: c_ptr, c_funptr
  565. type(c_ptr), value, intent(in) :: cl
  566. type(c_funptr), value, intent(in) :: f_ptr
  567. end subroutine fstarpu_codelet_add_opencl_func
  568. subroutine fstarpu_codelet_add_opencl_flags (cl, flags) bind(C)
  569. use iso_c_binding, only: c_ptr
  570. type(c_ptr), value, intent(in) :: cl
  571. type(c_ptr), value, intent(in) :: flags ! C function expects an intptr_t
  572. end subroutine fstarpu_codelet_add_opencl_flags
  573. subroutine fstarpu_codelet_add_buffer (cl, mode) bind(C)
  574. use iso_c_binding, only: c_ptr
  575. type(c_ptr), value, intent(in) :: cl
  576. type(c_ptr), value, intent(in) :: mode ! C function expects an intptr_t
  577. end subroutine fstarpu_codelet_add_buffer
  578. subroutine fstarpu_codelet_set_variable_nbuffers (cl) bind(C)
  579. use iso_c_binding, only: c_ptr,c_int
  580. type(c_ptr), value, intent(in) :: cl
  581. end subroutine fstarpu_codelet_set_variable_nbuffers
  582. subroutine fstarpu_codelet_set_nbuffers (cl, nbuffers) bind(C)
  583. use iso_c_binding, only: c_ptr,c_int
  584. type(c_ptr), value, intent(in) :: cl
  585. integer(c_int), value, intent(in) :: nbuffers
  586. end subroutine fstarpu_codelet_set_nbuffers
  587. subroutine fstarpu_codelet_set_flags (cl, flags) bind(C)
  588. use iso_c_binding, only: c_ptr
  589. type(c_ptr), value, intent(in) :: cl
  590. type(c_ptr), value, intent(in) :: flags ! C function expects an intptr_t
  591. end subroutine fstarpu_codelet_set_flags
  592. subroutine fstarpu_codelet_set_where (cl, where) bind(C)
  593. use iso_c_binding, only: c_ptr
  594. type(c_ptr), value, intent(in) :: cl
  595. type(c_ptr), value, intent(in) :: where ! C function expects an intptr_t
  596. end subroutine fstarpu_codelet_set_where
  597. function fstarpu_perfmodel_allocate () bind(C)
  598. use iso_c_binding, only: c_ptr
  599. type(c_ptr) :: fstarpu_perfmodel_allocate
  600. end function fstarpu_perfmodel_allocate
  601. subroutine fstarpu_perfmodel_free (model) bind(C)
  602. use iso_c_binding, only: c_ptr
  603. type(c_ptr), value, intent(in) :: model
  604. end subroutine fstarpu_perfmodel_free
  605. subroutine fstarpu_perfmodel_set_symbol (model, model_symbol) bind(C)
  606. use iso_c_binding, only: c_ptr, c_char
  607. type(c_ptr), value, intent(in) :: model
  608. character(c_char), intent(in) :: model_symbol
  609. end subroutine fstarpu_perfmodel_set_symbol
  610. subroutine fstarpu_perfmodel_set_type (model, type) bind(C)
  611. use iso_c_binding, only: c_ptr
  612. type(c_ptr), value, intent(in) :: model
  613. type(c_ptr), value, intent(in) :: type ! C function expects an intptr_t
  614. end subroutine fstarpu_perfmodel_set_type
  615. ! == starpu_data_interface.h ==
  616. ! uintptr_t starpu_malloc_on_node_flags(unsigned dst_node, size_t size, int flags);
  617. ! uintptr_t starpu_malloc_on_node(unsigned dst_node, size_t size);
  618. function fstarpu_malloc_on_node(node,sz) bind(C,name="starpu_malloc_on_node")
  619. use iso_c_binding, only: c_int,c_intptr_t,c_size_t
  620. integer(c_intptr_t) :: fstarpu_malloc_on_node
  621. integer(c_int), value, intent(in) :: node
  622. integer(c_size_t), value, intent(in) :: sz
  623. end function fstarpu_malloc_on_node
  624. ! void starpu_free_on_node_flags(unsigned dst_node, uintptr_t addr, size_t size, int flags);
  625. ! void starpu_free_on_node(unsigned dst_node, uintptr_t addr, size_t size);
  626. subroutine fstarpu_free_on_node(node,addr,sz) bind(C,name="starpu_free_on_node")
  627. use iso_c_binding, only: c_int,c_intptr_t,c_size_t
  628. integer(c_int), value, intent(in) :: node
  629. integer(c_intptr_t), value, intent(in) :: addr
  630. integer(c_size_t), value, intent(in) :: sz
  631. end subroutine fstarpu_free_on_node
  632. ! void starpu_malloc_on_node_set_default_flags(unsigned node, int flags);
  633. ! int starpu_data_interface_get_next_id(void);
  634. ! void starpu_data_register(starpu_data_handle_t *handleptr, unsigned home_node, void *data_interface, struct starpu_data_interface_ops *ops);
  635. ! void starpu_data_ptr_register(starpu_data_handle_t handle, unsigned node);
  636. subroutine fstarpug_data_ptr_register (dh,node) bind(C,name="starpu_data_ptr_register")
  637. use iso_c_binding, only: c_ptr, c_int
  638. type(c_ptr), value, intent(in) :: dh
  639. integer(c_int), value, intent(in) :: node
  640. end subroutine fstarpug_data_ptr_register
  641. ! void starpu_data_register_same(starpu_data_handle_t *handledst, starpu_data_handle_t handlesrc);
  642. subroutine fstarpu_data_register_same (dh_dst,dh_src) bind(C,name="starpu_data_register_same")
  643. use iso_c_binding, only: c_ptr
  644. type(c_ptr), intent(out) :: dh_dst
  645. type(c_ptr), value, intent(in) :: dh_src
  646. end subroutine fstarpu_data_register_same
  647. ! void *starpu_data_handle_to_pointer(starpu_data_handle_t handle, unsigned node);
  648. function fstarpu_data_handle_to_pointer (dh,node) bind(C,name="starpu_data_handle_to_pointer")
  649. use iso_c_binding, only: c_ptr, c_int
  650. type(c_ptr) :: fstarpu_data_handle_to_pointer
  651. type(c_ptr), value, intent(in) :: dh
  652. integer(c_int), value, intent(in) :: node
  653. end function fstarpu_data_handle_to_pointer
  654. ! void *starpu_data_pointer_is_inside(starpu_data_handle_t handle, unsigned node, void *ptr);
  655. function fstarpu_data_pointer_is_inside (dh,node,ptr) bind(C,name="starpu_data_pointer_is_inside")
  656. use iso_c_binding, only: c_ptr, c_int, c_ptr
  657. integer(c_int) :: fstarpu_data_pointer_is_inside
  658. type(c_ptr), value, intent(in) :: dh
  659. integer(c_int), value, intent(in) :: node
  660. type(c_ptr), value, intent(in) :: ptr
  661. end function fstarpu_data_pointer_is_inside
  662. ! void *starpu_data_get_local_ptr(starpu_data_handle_t handle);
  663. function fstarpu_data_get_local_ptr (dh) bind(C,name="starpu_data_get_local_ptr")
  664. use iso_c_binding, only: c_ptr, c_int
  665. type(c_ptr) :: fstarpu_data_get_local_ptr
  666. type(c_ptr), value, intent(in) :: dh
  667. end function fstarpu_data_get_local_ptr
  668. ! void *starpu_data_get_interface_on_node(starpu_data_handle_t handle, unsigned memory_node);
  669. ! == starpu_data_interface.h: tensor ==
  670. ! void starpu_tensor_data_register(starpu_data_handle_t *handle, unsigned home_node, uintptr_t ptr, uint32_t ldy, uint32_t ldz, uint32_t ldt, uint32_t nx, uint32_t ny, uint32_t nz, uint32_t nt, size_t elemsize);
  671. subroutine fstarpu_tensor_data_register(dh, home_node, ptr, ldy, ldz, ldt, nx, ny, nz, nt, elt_size) &
  672. bind(C,name="starpu_tensor_data_register")
  673. use iso_c_binding, only: c_ptr, c_int, c_size_t
  674. type(c_ptr), intent(out) :: dh
  675. integer(c_int), value, intent(in) :: home_node
  676. type(c_ptr), value, intent(in) :: ptr
  677. integer(c_int), value, intent(in) :: ldy
  678. integer(c_int), value, intent(in) :: ldz
  679. integer(c_int), value, intent(in) :: ldt
  680. integer(c_int), value, intent(in) :: nx
  681. integer(c_int), value, intent(in) :: ny
  682. integer(c_int), value, intent(in) :: nz
  683. integer(c_int), value, intent(in) :: nt
  684. integer(c_size_t), value, intent(in) :: elt_size
  685. end subroutine fstarpu_tensor_data_register
  686. ! void starpu_tensor_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ldy, uint32_t ldz, uint32_t ldt);
  687. subroutine fstarpu_tensor_ptr_register(dh, node, ptr, dev_handle, offset, ldy, ldz, ldt) &
  688. bind(C,name="starpu_tensor_ptr_register")
  689. use iso_c_binding, only: c_ptr, c_int, c_size_t
  690. type(c_ptr), intent(out) :: dh
  691. integer(c_int), value, intent(in) :: node
  692. type(c_ptr), value, intent(in) :: ptr
  693. type(c_ptr), value, intent(in) :: dev_handle
  694. integer(c_size_t), value, intent(in) :: offset
  695. integer(c_int), value, intent(in) :: ldy
  696. integer(c_int), value, intent(in) :: ldz
  697. integer(c_int), value, intent(in) :: ldt
  698. end subroutine fstarpu_tensor_ptr_register
  699. function fstarpu_tensor_get_ptr(buffers, i) bind(C)
  700. use iso_c_binding, only: c_ptr, c_int
  701. type(c_ptr) :: fstarpu_tensor_get_ptr
  702. type(c_ptr), value, intent(in) :: buffers
  703. integer(c_int), value, intent(in) :: i
  704. end function fstarpu_tensor_get_ptr
  705. function fstarpu_tensor_get_ldy(buffers, i) bind(C)
  706. use iso_c_binding, only: c_ptr, c_int
  707. integer(c_int) :: fstarpu_tensor_get_ldy
  708. type(c_ptr), value, intent(in) :: buffers
  709. integer(c_int), value, intent(in) :: i
  710. end function fstarpu_tensor_get_ldy
  711. function fstarpu_tensor_get_ldz(buffers, i) bind(C)
  712. use iso_c_binding, only: c_ptr, c_int
  713. integer(c_int) :: fstarpu_tensor_get_ldz
  714. type(c_ptr), value, intent(in) :: buffers
  715. integer(c_int), value, intent(in) :: i
  716. end function fstarpu_tensor_get_ldz
  717. function fstarpu_tensor_get_ldt(buffers, i) bind(C)
  718. use iso_c_binding, only: c_ptr, c_int
  719. integer(c_int) :: fstarpu_tensor_get_ldt
  720. type(c_ptr), value, intent(in) :: buffers
  721. integer(c_int), value, intent(in) :: i
  722. end function fstarpu_tensor_get_ldt
  723. function fstarpu_tensor_get_nx(buffers, i) bind(C)
  724. use iso_c_binding, only: c_ptr, c_int
  725. integer(c_int) :: fstarpu_tensor_get_nx
  726. type(c_ptr), value, intent(in) :: buffers
  727. integer(c_int), value, intent(in) :: i
  728. end function fstarpu_tensor_get_nx
  729. function fstarpu_tensor_get_ny(buffers, i) bind(C)
  730. use iso_c_binding, only: c_ptr, c_int
  731. integer(c_int) :: fstarpu_tensor_get_ny
  732. type(c_ptr), value, intent(in) :: buffers
  733. integer(c_int), value, intent(in) :: i
  734. end function fstarpu_tensor_get_ny
  735. function fstarpu_tensor_get_nz(buffers, i) bind(C)
  736. use iso_c_binding, only: c_ptr, c_int
  737. integer(c_int) :: fstarpu_tensor_get_nz
  738. type(c_ptr), value, intent(in) :: buffers
  739. integer(c_int), value, intent(in) :: i
  740. end function fstarpu_tensor_get_nz
  741. function fstarpu_tensor_get_nt(buffers, i) bind(C)
  742. use iso_c_binding, only: c_ptr, c_int
  743. integer(c_int) :: fstarpu_tensor_get_nt
  744. type(c_ptr), value, intent(in) :: buffers
  745. integer(c_int), value, intent(in) :: i
  746. end function fstarpu_tensor_get_nt
  747. ! == starpu_data_interface.h: block ==
  748. ! void starpu_block_data_register(starpu_data_handle_t *handle, unsigned home_node, uintptr_t ptr, uint32_t ldy, uint32_t ldz, uint32_t nx, uint32_t ny, uint32_t nz, size_t elemsize);
  749. subroutine fstarpu_block_data_register(dh, home_node, ptr, ldy, ldz, nx, ny, nz, elt_size) &
  750. bind(C,name="starpu_block_data_register")
  751. use iso_c_binding, only: c_ptr, c_int, c_size_t
  752. type(c_ptr), intent(out) :: dh
  753. integer(c_int), value, intent(in) :: home_node
  754. type(c_ptr), value, intent(in) :: ptr
  755. integer(c_int), value, intent(in) :: ldy
  756. integer(c_int), value, intent(in) :: ldz
  757. integer(c_int), value, intent(in) :: nx
  758. integer(c_int), value, intent(in) :: ny
  759. integer(c_int), value, intent(in) :: nz
  760. integer(c_size_t), value, intent(in) :: elt_size
  761. end subroutine fstarpu_block_data_register
  762. ! void starpu_block_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ldy, uint32_t ldz);
  763. subroutine fstarpu_block_ptr_register(dh, node, ptr, dev_handle, offset, ldy, ldz) &
  764. bind(C,name="starpu_block_ptr_register")
  765. use iso_c_binding, only: c_ptr, c_int, c_size_t
  766. type(c_ptr), intent(out) :: dh
  767. integer(c_int), value, intent(in) :: node
  768. type(c_ptr), value, intent(in) :: ptr
  769. type(c_ptr), value, intent(in) :: dev_handle
  770. integer(c_size_t), value, intent(in) :: offset
  771. integer(c_int), value, intent(in) :: ldy
  772. integer(c_int), value, intent(in) :: ldz
  773. end subroutine fstarpu_block_ptr_register
  774. function fstarpu_block_get_ptr(buffers, i) bind(C)
  775. use iso_c_binding, only: c_ptr, c_int
  776. type(c_ptr) :: fstarpu_block_get_ptr
  777. type(c_ptr), value, intent(in) :: buffers
  778. integer(c_int), value, intent(in) :: i
  779. end function fstarpu_block_get_ptr
  780. function fstarpu_block_get_ldy(buffers, i) bind(C)
  781. use iso_c_binding, only: c_ptr, c_int
  782. integer(c_int) :: fstarpu_block_get_ldy
  783. type(c_ptr), value, intent(in) :: buffers
  784. integer(c_int), value, intent(in) :: i
  785. end function fstarpu_block_get_ldy
  786. function fstarpu_block_get_ldz(buffers, i) bind(C)
  787. use iso_c_binding, only: c_ptr, c_int
  788. integer(c_int) :: fstarpu_block_get_ldz
  789. type(c_ptr), value, intent(in) :: buffers
  790. integer(c_int), value, intent(in) :: i
  791. end function fstarpu_block_get_ldz
  792. function fstarpu_block_get_nx(buffers, i) bind(C)
  793. use iso_c_binding, only: c_ptr, c_int
  794. integer(c_int) :: fstarpu_block_get_nx
  795. type(c_ptr), value, intent(in) :: buffers
  796. integer(c_int), value, intent(in) :: i
  797. end function fstarpu_block_get_nx
  798. function fstarpu_block_get_ny(buffers, i) bind(C)
  799. use iso_c_binding, only: c_ptr, c_int
  800. integer(c_int) :: fstarpu_block_get_ny
  801. type(c_ptr), value, intent(in) :: buffers
  802. integer(c_int), value, intent(in) :: i
  803. end function fstarpu_block_get_ny
  804. function fstarpu_block_get_nz(buffers, i) bind(C)
  805. use iso_c_binding, only: c_ptr, c_int
  806. integer(c_int) :: fstarpu_block_get_nz
  807. type(c_ptr), value, intent(in) :: buffers
  808. integer(c_int), value, intent(in) :: i
  809. end function fstarpu_block_get_nz
  810. ! == starpu_data_interface.h: matrix ==
  811. ! void starpu_matrix_data_register(starpu_data_handle_t *handle, unsigned home_node, uintptr_t ptr, uint32_t ld, uint32_t nx, uint32_t ny, size_t elemsize);
  812. subroutine fstarpu_matrix_data_register(dh, home_node, ptr, ld, nx, ny, elt_size) &
  813. bind(C,name="starpu_matrix_data_register")
  814. use iso_c_binding, only: c_ptr, c_int, c_size_t
  815. type(c_ptr), intent(out) :: dh
  816. integer(c_int), value, intent(in) :: home_node
  817. type(c_ptr), value, intent(in) :: ptr
  818. integer(c_int), value, intent(in) :: ld
  819. integer(c_int), value, intent(in) :: nx
  820. integer(c_int), value, intent(in) :: ny
  821. integer(c_size_t), value, intent(in) :: elt_size
  822. end subroutine fstarpu_matrix_data_register
  823. ! void starpu_matrix_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ld);
  824. subroutine fstarpu_matrix_ptr_register(dh, node, ptr, dev_handle, offset, ld) &
  825. bind(C,name="starpu_matrix_ptr_register")
  826. use iso_c_binding, only: c_ptr, c_int, c_size_t
  827. type(c_ptr), intent(out) :: dh
  828. integer(c_int), value, intent(in) :: node
  829. type(c_ptr), value, intent(in) :: ptr
  830. type(c_ptr), value, intent(in) :: dev_handle
  831. integer(c_size_t), value, intent(in) :: offset
  832. integer(c_int), value, intent(in) :: ld
  833. end subroutine fstarpu_matrix_ptr_register
  834. function fstarpu_matrix_get_ptr(buffers, i) bind(C)
  835. use iso_c_binding, only: c_ptr, c_int
  836. type(c_ptr) :: fstarpu_matrix_get_ptr
  837. type(c_ptr), value, intent(in) :: buffers
  838. integer(c_int), value, intent(in) :: i
  839. end function fstarpu_matrix_get_ptr
  840. function fstarpu_matrix_get_ld(buffers, i) bind(C)
  841. use iso_c_binding, only: c_ptr, c_int
  842. integer(c_int) :: fstarpu_matrix_get_ld
  843. type(c_ptr), value, intent(in) :: buffers
  844. integer(c_int), value, intent(in) :: i
  845. end function fstarpu_matrix_get_ld
  846. function fstarpu_matrix_get_nx(buffers, i) bind(C)
  847. use iso_c_binding, only: c_ptr, c_int
  848. integer(c_int) :: fstarpu_matrix_get_nx
  849. type(c_ptr), value, intent(in) :: buffers
  850. integer(c_int), value, intent(in) :: i
  851. end function fstarpu_matrix_get_nx
  852. function fstarpu_matrix_get_ny(buffers, i) bind(C)
  853. use iso_c_binding, only: c_ptr, c_int
  854. integer(c_int) :: fstarpu_matrix_get_ny
  855. type(c_ptr), value, intent(in) :: buffers
  856. integer(c_int), value, intent(in) :: i
  857. end function fstarpu_matrix_get_ny
  858. ! == starpu_data_interface.h: vector ==
  859. ! void starpu_vector_data_register(starpu_data_handle_t *handle, unsigned home_node, uintptr_t ptr, uint32_t nx, size_t elemsize);
  860. subroutine fstarpu_vector_data_register(dh, home_node, ptr,nx, elt_size) &
  861. bind(C,name="starpu_vector_data_register")
  862. use iso_c_binding, only: c_ptr, c_int, c_size_t
  863. type(c_ptr), intent(out) :: dh
  864. integer(c_int), value, intent(in) :: home_node
  865. type(c_ptr), value, intent(in) :: ptr
  866. integer(c_int), value, intent(in) :: nx
  867. integer(c_size_t), value, intent(in) :: elt_size
  868. end subroutine fstarpu_vector_data_register
  869. ! void starpu_vector_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset);
  870. subroutine fstarpu_vector_ptr_register(dh, node, ptr, dev_handle, offset) &
  871. bind(C,name="starpu_vector_ptr_register")
  872. use iso_c_binding, only: c_ptr, c_int, c_size_t
  873. type(c_ptr), intent(out) :: dh
  874. integer(c_int), value, intent(in) :: node
  875. type(c_ptr), value, intent(in) :: ptr
  876. type(c_ptr), value, intent(in) :: dev_handle
  877. integer(c_size_t), value, intent(in) :: offset
  878. end subroutine fstarpu_vector_ptr_register
  879. function fstarpu_vector_get_ptr(buffers, i) bind(C)
  880. use iso_c_binding, only: c_ptr, c_int
  881. type(c_ptr) :: fstarpu_vector_get_ptr
  882. type(c_ptr), value, intent(in) :: buffers
  883. integer(c_int), value, intent(in) :: i
  884. end function fstarpu_vector_get_ptr
  885. function fstarpu_vector_get_nx(buffers, i) bind(C)
  886. use iso_c_binding, only: c_ptr, c_int
  887. integer(c_int) :: fstarpu_vector_get_nx
  888. type(c_ptr), value, intent(in) :: buffers
  889. integer(c_int), value, intent(in) :: i
  890. end function fstarpu_vector_get_nx
  891. ! == starpu_data_interface.h: variable ==
  892. ! void starpu_variable_data_register(starpu_data_handle_t *handle, unsigned home_node, uintptr_t ptr, size_t size);
  893. subroutine fstarpu_variable_data_register(dh, home_node, ptr, elt_size) &
  894. bind(C,name="starpu_variable_data_register")
  895. use iso_c_binding, only: c_ptr, c_int, c_size_t
  896. type(c_ptr), intent(out) :: dh
  897. integer(c_int), value, intent(in) :: home_node
  898. type(c_ptr), value, intent(in) :: ptr
  899. integer(c_size_t), value, intent(in) :: elt_size
  900. end subroutine fstarpu_variable_data_register
  901. ! void starpu_variable_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset);
  902. subroutine fstarpu_variable_ptr_register(dh, node, ptr, dev_handle, offset) &
  903. bind(C,name="starpu_variable_ptr_register")
  904. use iso_c_binding, only: c_ptr, c_int, c_size_t
  905. type(c_ptr), intent(out) :: dh
  906. integer(c_int), value, intent(in) :: node
  907. type(c_ptr), value, intent(in) :: ptr
  908. type(c_ptr), value, intent(in) :: dev_handle
  909. integer(c_size_t), value, intent(in) :: offset
  910. end subroutine fstarpu_variable_ptr_register
  911. function fstarpu_variable_get_ptr(buffers, i) bind(C)
  912. use iso_c_binding, only: c_ptr, c_int
  913. type(c_ptr) :: fstarpu_variable_get_ptr
  914. type(c_ptr), value, intent(in) :: buffers
  915. integer(c_int), value, intent(in) :: i
  916. end function fstarpu_variable_get_ptr
  917. ! == starpu_data_interface.h: void ==
  918. ! void starpu_void_data_register(starpu_data_handle_t *handle);
  919. subroutine fstarpu_void_data_register(dh) &
  920. bind(C,name="starpu_void_data_register")
  921. use iso_c_binding, only: c_ptr, c_int, c_size_t
  922. type(c_ptr), intent(out) :: dh
  923. end subroutine fstarpu_void_data_register
  924. ! == starpu_data_filter.h ==
  925. function fstarpu_data_filter_allocate () bind(C)
  926. use iso_c_binding, only: c_ptr
  927. type(c_ptr) :: fstarpu_data_filter_allocate
  928. end function fstarpu_data_filter_allocate
  929. subroutine fstarpu_data_filter_free (filter) bind(C)
  930. use iso_c_binding, only: c_ptr
  931. type(c_ptr), value, intent(in) :: filter
  932. end subroutine fstarpu_data_filter_free
  933. ! Note: use fstarpu_df_alloc_ prefix instead of fstarpu_data_filter_allocate_
  934. ! to fit within the Fortran id length limit */
  935. function fstarpu_df_alloc_bcsr_filter_canonical_block () bind(C)
  936. use iso_c_binding, only: c_ptr
  937. type(c_ptr) :: fstarpu_df_alloc_bcsr_filter_canonical_block
  938. end function fstarpu_df_alloc_bcsr_filter_canonical_block
  939. function fstarpu_df_alloc_csr_filter_vertical_block () bind(C)
  940. use iso_c_binding, only: c_ptr
  941. type(c_ptr) :: fstarpu_df_alloc_csr_filter_vertical_block
  942. end function fstarpu_df_alloc_csr_filter_vertical_block
  943. function fstarpu_df_alloc_matrix_filter_block () bind(C)
  944. use iso_c_binding, only: c_ptr
  945. type(c_ptr) :: fstarpu_df_alloc_matrix_filter_block
  946. end function fstarpu_df_alloc_matrix_filter_block
  947. function fstarpu_df_alloc_matrix_filter_block_shadow () bind(C)
  948. use iso_c_binding, only: c_ptr
  949. type(c_ptr) :: fstarpu_df_alloc_matrix_filter_block_shadow
  950. end function fstarpu_df_alloc_matrix_filter_block_shadow
  951. function fstarpu_df_alloc_matrix_filter_vertical_block () bind(C)
  952. use iso_c_binding, only: c_ptr
  953. type(c_ptr) :: fstarpu_df_alloc_matrix_filter_vertical_block
  954. end function fstarpu_df_alloc_matrix_filter_vertical_block
  955. function fstarpu_df_alloc_matrix_filter_vertical_block_shadow () bind(C)
  956. use iso_c_binding, only: c_ptr
  957. type(c_ptr) :: fstarpu_df_alloc_matrix_filter_vertical_block_shadow
  958. end function fstarpu_df_alloc_matrix_filter_vertical_block_shadow
  959. function fstarpu_df_alloc_vector_filter_block () bind(C)
  960. use iso_c_binding, only: c_ptr
  961. type(c_ptr) :: fstarpu_df_alloc_vector_filter_block
  962. end function fstarpu_df_alloc_vector_filter_block
  963. function fstarpu_df_alloc_vector_filter_block_shadow () bind(C)
  964. use iso_c_binding, only: c_ptr
  965. type(c_ptr) :: fstarpu_df_alloc_vector_filter_block_shadow
  966. end function fstarpu_df_alloc_vector_filter_block_shadow
  967. function fstarpu_df_alloc_vector_filter_list () bind(C)
  968. use iso_c_binding, only: c_ptr
  969. type(c_ptr) :: fstarpu_df_alloc_vector_filter_list
  970. end function fstarpu_df_alloc_vector_filter_list
  971. function fstarpu_df_alloc_vector_filter_divide_in_2 () bind(C)
  972. use iso_c_binding, only: c_ptr
  973. type(c_ptr) :: fstarpu_df_alloc_vector_filter_divide_in_2
  974. end function fstarpu_df_alloc_vector_filter_divide_in_2
  975. function fstarpu_df_alloc_block_filter_block () bind(C)
  976. use iso_c_binding, only: c_ptr
  977. type(c_ptr) :: fstarpu_df_alloc_block_filter_block
  978. end function fstarpu_df_alloc_block_filter_block
  979. function fstarpu_df_alloc_block_filter_block_shadow () bind(C)
  980. use iso_c_binding, only: c_ptr
  981. type(c_ptr) :: fstarpu_df_alloc_block_filter_block_shadow
  982. end function fstarpu_df_alloc_block_filter_block_shadow
  983. function fstarpu_df_alloc_block_filter_vertical_block () bind(C)
  984. use iso_c_binding, only: c_ptr
  985. type(c_ptr) :: fstarpu_df_alloc_block_filter_vertical_block
  986. end function fstarpu_df_alloc_block_filter_vertical_block
  987. function fstarpu_df_alloc_block_filter_vertical_block_shadow () bind(C)
  988. use iso_c_binding, only: c_ptr
  989. type(c_ptr) :: fstarpu_df_alloc_block_filter_vertical_block_shadow
  990. end function fstarpu_df_alloc_block_filter_vertical_block_shadow
  991. subroutine fstarpu_data_filter_set_filter_func (filter, f_ptr) bind(C)
  992. use iso_c_binding, only: c_ptr, c_funptr
  993. type(c_ptr), value, intent(in) :: filter
  994. type(c_funptr), value, intent(in) :: f_ptr
  995. end subroutine fstarpu_data_filter_set_filter_func
  996. subroutine fstarpu_data_filter_set_nchildren (filter, nchildren) bind(C)
  997. use iso_c_binding, only: c_ptr, c_int
  998. type(c_ptr), value, intent(in) :: filter
  999. integer(c_int), value, intent(in) :: nchildren
  1000. end subroutine fstarpu_data_filter_set_nchildren
  1001. subroutine fstarpu_data_filter_set_get_nchildren_func (filter, f_ptr) bind(C)
  1002. use iso_c_binding, only: c_ptr, c_funptr
  1003. type(c_ptr), value, intent(in) :: filter
  1004. type(c_funptr), value, intent(in) :: f_ptr
  1005. end subroutine fstarpu_data_filter_set_get_nchildren_func
  1006. subroutine fstarpu_data_filter_set_get_child_ops_func (filter, f_ptr) bind(C)
  1007. use iso_c_binding, only: c_ptr, c_funptr
  1008. type(c_ptr), value, intent(in) :: filter
  1009. type(c_funptr), value, intent(in) :: f_ptr
  1010. end subroutine fstarpu_data_filter_set_get_child_ops_func
  1011. subroutine fstarpu_data_filter_set_filter_arg (filter, filter_arg) bind(C)
  1012. use iso_c_binding, only: c_ptr, c_int
  1013. type(c_ptr), value, intent(in) :: filter
  1014. integer(c_int), value, intent(in) :: filter_arg
  1015. end subroutine fstarpu_data_filter_set_filter_arg
  1016. subroutine fstarpu_data_filter_set_filter_arg_ptr (filter, filter_arg_ptr) bind(C)
  1017. use iso_c_binding, only: c_ptr
  1018. type(c_ptr), value, intent(in) :: filter
  1019. type(c_ptr), value, intent(in) :: filter_arg_ptr
  1020. end subroutine fstarpu_data_filter_set_filter_arg_ptr
  1021. ! void starpu_data_partition(starpu_data_handle_t initial_handle, struct starpu_data_filter *f);
  1022. subroutine fstarpu_data_partition (dh,filter) bind(C,name="starpu_data_partition")
  1023. use iso_c_binding, only: c_ptr
  1024. type(c_ptr), value, intent(in) :: dh
  1025. type(c_ptr), value, intent(in) :: filter
  1026. end subroutine fstarpu_data_partition
  1027. ! void starpu_data_unpartition(starpu_data_handle_t root_data, unsigned gathering_node);
  1028. subroutine fstarpu_data_unpartition (root_dh,gathering_node) bind(C,name="starpu_data_unpartition")
  1029. use iso_c_binding, only: c_ptr, c_int
  1030. type(c_ptr), value, intent(in) :: root_dh
  1031. integer(c_int), value, intent(in) :: gathering_node
  1032. end subroutine fstarpu_data_unpartition
  1033. ! void starpu_data_partition_plan(starpu_data_handle_t initial_handle, struct starpu_data_filter *f, starpu_data_handle_t *children);
  1034. subroutine fstarpu_data_partition_plan (dh,filter,children) &
  1035. bind(C,name="starpu_data_partition_plan")
  1036. use iso_c_binding, only: c_ptr
  1037. type(c_ptr), value, intent(in) :: dh
  1038. type(c_ptr), value, intent(in) :: filter
  1039. type(c_ptr), intent(in) :: children(*)
  1040. end subroutine fstarpu_data_partition_plan
  1041. ! void starpu_data_partition_submit(starpu_data_handle_t initial_handle, unsigned nparts, starpu_data_handle_t *children);
  1042. subroutine fstarpu_data_partition_submit (dh,nparts,children) &
  1043. bind(C,name="starpu_data_partition_submit")
  1044. use iso_c_binding, only: c_ptr, c_int
  1045. type(c_ptr), value, intent(in) :: dh
  1046. integer(c_int), value, intent(in) :: nparts
  1047. type(c_ptr), intent(in) :: children(*)
  1048. end subroutine fstarpu_data_partition_submit
  1049. ! void starpu_data_partition_readonly_submit(starpu_data_handle_t initial_handle, unsigned nparts, starpu_data_handle_t *children);
  1050. subroutine fstarpu_data_partition_readonly_submit (dh,nparts,children) &
  1051. bind(C,name="starpu_data_partition_readonly_submit")
  1052. use iso_c_binding, only: c_ptr, c_int
  1053. type(c_ptr), value, intent(in) :: dh
  1054. integer(c_int), value, intent(in) :: nparts
  1055. type(c_ptr), intent(in) :: children(*)
  1056. end subroutine fstarpu_data_partition_readonly_submit
  1057. ! void starpu_data_partition_readwrite_upgrade_submit(starpu_data_handle_t initial_handle, unsigned nparts, starpu_data_handle_t *children);
  1058. subroutine fstarpu_data_partition_readwrite_upgrade_submit (dh,nparts,children) &
  1059. bind(C,name="starpu_data_partition_readwrite_upgrade_submit")
  1060. use iso_c_binding, only: c_ptr, c_int
  1061. type(c_ptr), value, intent(in) :: dh
  1062. integer(c_int), value, intent(in) :: nparts
  1063. type(c_ptr), intent(in) :: children(*)
  1064. end subroutine fstarpu_data_partition_readwrite_upgrade_submit
  1065. ! void starpu_data_unpartition_submit(starpu_data_handle_t initial_handle, unsigned nparts, starpu_data_handle_t *children, int gathering_node);
  1066. subroutine fstarpu_data_unpartition_submit (dh,nparts,children,gathering_node) &
  1067. bind(C,name="starpu_data_unpartition_submit")
  1068. use iso_c_binding, only: c_ptr, c_int
  1069. type(c_ptr), value, intent(in) :: dh
  1070. integer(c_int), value, intent(in) :: nparts
  1071. type(c_ptr), intent(in) :: children(*)
  1072. integer(c_int), value, intent(in) :: gathering_node
  1073. end subroutine fstarpu_data_unpartition_submit
  1074. ! void starpu_data_unpartition_readonly_submit(starpu_data_handle_t initial_handle, unsigned nparts, starpu_data_handle_t *children, int gathering_node);
  1075. subroutine fstarpu_data_unpartition_readonly_submit (dh,nparts,children,gathering_node) &
  1076. bind(C,name="starpu_data_unpartition_readonly_submit")
  1077. use iso_c_binding, only: c_ptr, c_int
  1078. type(c_ptr), value, intent(in) :: dh
  1079. integer(c_int), value, intent(in) :: nparts
  1080. type(c_ptr), intent(in) :: children(*)
  1081. integer(c_int), value, intent(in) :: gathering_node
  1082. end subroutine fstarpu_data_unpartition_readonly_submit
  1083. ! void starpu_data_partition_clean(starpu_data_handle_t root_data, unsigned nparts, starpu_data_handle_t *children);
  1084. subroutine fstarpu_data_partition_clean (dh,nparts,children) &
  1085. bind(C,name="starpu_data_partition_clean")
  1086. use iso_c_binding, only: c_ptr, c_int
  1087. type(c_ptr), value, intent(in) :: dh
  1088. integer(c_int), value, intent(in) :: nparts
  1089. type(c_ptr), intent(in) :: children(*)
  1090. end subroutine fstarpu_data_partition_clean
  1091. ! int starpu_data_get_nb_children(starpu_data_handle_t handle);
  1092. function fstarpu_data_get_nb_children(dh) bind(C,name="starpu_data_get_nb_children")
  1093. use iso_c_binding, only: c_ptr, c_int
  1094. integer(c_int) :: fstarpu_data_get_nb_children
  1095. type(c_ptr), value, intent(in) :: dh
  1096. end function fstarpu_data_get_nb_children
  1097. ! starpu_data_handle_t starpu_data_get_child(starpu_data_handle_t handle, unsigned i);
  1098. function fstarpu_data_get_child(dh,i) bind(C,name="starpu_data_get_child")
  1099. use iso_c_binding, only: c_ptr, c_int
  1100. type(c_ptr) :: fstarpu_data_get_child
  1101. type(c_ptr), value, intent(in) :: dh
  1102. integer(c_int), value, intent(in) :: i
  1103. end function fstarpu_data_get_child
  1104. ! starpu_data_handle_t starpu_data_get_sub_data(starpu_data_handle_t root_data, unsigned depth, ... );
  1105. ! . see: fstarpu_data_get_sub_data
  1106. ! starpu_data_handle_t starpu_data_vget_sub_data(starpu_data_handle_t root_data, unsigned depth, va_list pa);
  1107. ! . see: fstarpu_data_get_sub_data
  1108. ! note: defined in filters.c
  1109. function fstarpu_data_get_sub_data (root_dh,depth,indices) bind(C)
  1110. use iso_c_binding, only: c_ptr, c_int
  1111. type(c_ptr) :: fstarpu_data_get_sub_data
  1112. type(c_ptr), value, intent(in) :: root_dh
  1113. integer(c_int), value, intent(in) :: depth
  1114. integer(c_int), intent(in) :: indices(*)
  1115. end function fstarpu_data_get_sub_data
  1116. ! void starpu_data_map_filters(starpu_data_handle_t root_data, unsigned nfilters, ...);
  1117. ! . see fstarpu_data_map_filters
  1118. ! void starpu_data_vmap_filters(starpu_data_handle_t root_data, unsigned nfilters, va_list pa);
  1119. ! . see fstarpu_data_map_filters
  1120. ! note: defined in filters.c
  1121. subroutine fstarpu_data_map_filters (root_dh,nfilters,filters) bind(C)
  1122. use iso_c_binding, only: c_ptr, c_int
  1123. type(c_ptr), value, intent(in) :: root_dh
  1124. integer(c_int), value, intent(in) :: nfilters
  1125. type(c_ptr), intent(in) :: filters(*)
  1126. end subroutine fstarpu_data_map_filters
  1127. ! void starpu_matrix_filter_block(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1128. subroutine fstarpu_matrix_filter_block (father_interface,child_interface,filter,id,nparts) &
  1129. bind(C,name="starpu_matrix_filter_block")
  1130. use iso_c_binding, only: c_ptr
  1131. type(c_ptr), value, intent(in) :: father_interface
  1132. type(c_ptr), value, intent(in) :: child_interface
  1133. type(c_ptr), value, intent(in) :: filter
  1134. type(c_ptr), value, intent(in) :: id
  1135. type(c_ptr), value, intent(in) :: nparts
  1136. end subroutine fstarpu_matrix_filter_block
  1137. ! void starpu_matrix_filter_block_shadow(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1138. subroutine fstarpu_matrix_filter_block_shadow (father_interface,child_interface,filter,id,nparts) &
  1139. bind(C,name="starpu_matrix_filter_block_shadow")
  1140. use iso_c_binding, only: c_ptr
  1141. type(c_ptr), value, intent(in) :: father_interface
  1142. type(c_ptr), value, intent(in) :: child_interface
  1143. type(c_ptr), value, intent(in) :: filter
  1144. type(c_ptr), value, intent(in) :: id
  1145. type(c_ptr), value, intent(in) :: nparts
  1146. end subroutine fstarpu_matrix_filter_block_shadow
  1147. ! void starpu_matrix_filter_vertical_block(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1148. subroutine fstarpu_matrix_filter_vertical_block (father_interface,child_interface,filter,id,nparts) &
  1149. bind(C,name="starpu_matrix_filter_vertical_block")
  1150. use iso_c_binding, only: c_ptr
  1151. type(c_ptr), value, intent(in) :: father_interface
  1152. type(c_ptr), value, intent(in) :: child_interface
  1153. type(c_ptr), value, intent(in) :: filter
  1154. type(c_ptr), value, intent(in) :: id
  1155. type(c_ptr), value, intent(in) :: nparts
  1156. end subroutine fstarpu_matrix_filter_vertical_block
  1157. ! void starpu_matrix_filter_vertical_block_shadow(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1158. subroutine fstarpu_matrix_filter_vertical_block_shadow (father_interface,child_interface,filter,id,nparts) &
  1159. bind(C,name="starpu_matrix_filter_vertical_block_shadow")
  1160. use iso_c_binding, only: c_ptr
  1161. type(c_ptr), value, intent(in) :: father_interface
  1162. type(c_ptr), value, intent(in) :: child_interface
  1163. type(c_ptr), value, intent(in) :: filter
  1164. type(c_ptr), value, intent(in) :: id
  1165. type(c_ptr), value, intent(in) :: nparts
  1166. end subroutine fstarpu_matrix_filter_vertical_block_shadow
  1167. ! void starpu_vector_filter_block(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1168. subroutine fstarpu_vector_filter_block (father_interface,child_interface,filter,id,nparts) &
  1169. bind(C,name="starpu_vector_filter_block")
  1170. use iso_c_binding, only: c_ptr
  1171. type(c_ptr), value, intent(in) :: father_interface
  1172. type(c_ptr), value, intent(in) :: child_interface
  1173. type(c_ptr), value, intent(in) :: filter
  1174. type(c_ptr), value, intent(in) :: id
  1175. type(c_ptr), value, intent(in) :: nparts
  1176. end subroutine fstarpu_vector_filter_block
  1177. ! void starpu_vector_filter_block_shadow(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1178. subroutine fstarpu_vector_filter_block_shadow (father_interface,child_interface,filter,id,nparts) &
  1179. bind(C,name="starpu_vector_filter_block_shadow")
  1180. use iso_c_binding, only: c_ptr
  1181. type(c_ptr), value, intent(in) :: father_interface
  1182. type(c_ptr), value, intent(in) :: child_interface
  1183. type(c_ptr), value, intent(in) :: filter
  1184. type(c_ptr), value, intent(in) :: id
  1185. type(c_ptr), value, intent(in) :: nparts
  1186. end subroutine fstarpu_vector_filter_block_shadow
  1187. ! void starpu_vector_filter_list_long(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1188. subroutine fstarpu_vector_filter_list_long (father_interface,child_interface,filter,id,nparts) &
  1189. bind(C,name="starpu_vector_filter_list_long")
  1190. use iso_c_binding, only: c_ptr
  1191. type(c_ptr), value, intent(in) :: father_interface
  1192. type(c_ptr), value, intent(in) :: child_interface
  1193. type(c_ptr), value, intent(in) :: filter
  1194. type(c_ptr), value, intent(in) :: id
  1195. type(c_ptr), value, intent(in) :: nparts
  1196. end subroutine fstarpu_vector_filter_list_long
  1197. ! void starpu_vector_filter_list(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1198. subroutine fstarpu_vector_filter_list (father_interface,child_interface,filter,id,nparts) &
  1199. bind(C,name="starpu_vector_filter_list")
  1200. use iso_c_binding, only: c_ptr
  1201. type(c_ptr), value, intent(in) :: father_interface
  1202. type(c_ptr), value, intent(in) :: child_interface
  1203. type(c_ptr), value, intent(in) :: filter
  1204. type(c_ptr), value, intent(in) :: id
  1205. type(c_ptr), value, intent(in) :: nparts
  1206. end subroutine fstarpu_vector_filter_list
  1207. ! void starpu_vector_filter_divide_in_2(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1208. subroutine fstarpu_vector_divide_in_2 (father_interface,child_interface,filter,id,nparts) &
  1209. bind(C,name="starpu_vector_divide_in_2")
  1210. use iso_c_binding, only: c_ptr
  1211. type(c_ptr), value, intent(in) :: father_interface
  1212. type(c_ptr), value, intent(in) :: child_interface
  1213. type(c_ptr), value, intent(in) :: filter
  1214. type(c_ptr), value, intent(in) :: id
  1215. type(c_ptr), value, intent(in) :: nparts
  1216. end subroutine fstarpu_vector_divide_in_2
  1217. ! void starpu_block_filter_block(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1218. subroutine fstarpu_block_filter_block (father_interface,child_interface,filter,id,nparts) &
  1219. bind(C,name="starpu_block_filter_block")
  1220. use iso_c_binding, only: c_ptr
  1221. type(c_ptr), value, intent(in) :: father_interface
  1222. type(c_ptr), value, intent(in) :: child_interface
  1223. type(c_ptr), value, intent(in) :: filter
  1224. type(c_ptr), value, intent(in) :: id
  1225. type(c_ptr), value, intent(in) :: nparts
  1226. end subroutine fstarpu_block_filter_block
  1227. ! void starpu_block_filter_block_shadow(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1228. subroutine fstarpu_block_filter_block_shadow (father_interface,child_interface,filter,id,nparts) &
  1229. bind(C,name="starpu_block_filter_block_shadow")
  1230. use iso_c_binding, only: c_ptr
  1231. type(c_ptr), value, intent(in) :: father_interface
  1232. type(c_ptr), value, intent(in) :: child_interface
  1233. type(c_ptr), value, intent(in) :: filter
  1234. type(c_ptr), value, intent(in) :: id
  1235. type(c_ptr), value, intent(in) :: nparts
  1236. end subroutine fstarpu_block_filter_block_shadow
  1237. ! void starpu_block_filter_vertical_block(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1238. subroutine fstarpu_block_filter_vertical_block (father_interface,child_interface,filter,id,nparts) &
  1239. bind(C,name="starpu_block_filter_vertical_block")
  1240. use iso_c_binding, only: c_ptr
  1241. type(c_ptr), value, intent(in) :: father_interface
  1242. type(c_ptr), value, intent(in) :: child_interface
  1243. type(c_ptr), value, intent(in) :: filter
  1244. type(c_ptr), value, intent(in) :: id
  1245. type(c_ptr), value, intent(in) :: nparts
  1246. end subroutine fstarpu_block_filter_vertical_block
  1247. ! void starpu_block_filter_vertical_block_shadow(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1248. subroutine fstarpu_block_filter_vertical_block_shadow (father_interface,child_interface,filter,id,nparts) &
  1249. bind(C,name="starpu_block_filter_vertical_block_shadow")
  1250. use iso_c_binding, only: c_ptr
  1251. type(c_ptr), value, intent(in) :: father_interface
  1252. type(c_ptr), value, intent(in) :: child_interface
  1253. type(c_ptr), value, intent(in) :: filter
  1254. type(c_ptr), value, intent(in) :: id
  1255. type(c_ptr), value, intent(in) :: nparts
  1256. end subroutine fstarpu_block_filter_vertical_block_shadow
  1257. ! void starpu_block_filter_depth_block(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1258. subroutine fstarpu_block_filter_depth_block (father_interface,child_interface,filter,id,nparts) &
  1259. bind(C,name="starpu_block_filter_depth_block")
  1260. use iso_c_binding, only: c_ptr
  1261. type(c_ptr), value, intent(in) :: father_interface
  1262. type(c_ptr), value, intent(in) :: child_interface
  1263. type(c_ptr), value, intent(in) :: filter
  1264. type(c_ptr), value, intent(in) :: id
  1265. type(c_ptr), value, intent(in) :: nparts
  1266. end subroutine fstarpu_block_filter_depth_block
  1267. ! void starpu_block_filter_depth_block_shadow(void *father_interface, void *child_interface, struct starpu_data_filter *f, unsigned id, unsigned nparts);
  1268. subroutine fstarpu_block_filter_depth_block_shadow (father_interface,child_interface,filter,id,nparts) &
  1269. bind(C,name="starpu_block_filter_depth_block_shadow")
  1270. use iso_c_binding, only: c_ptr
  1271. type(c_ptr), value, intent(in) :: father_interface
  1272. type(c_ptr), value, intent(in) :: child_interface
  1273. type(c_ptr), value, intent(in) :: filter
  1274. type(c_ptr), value, intent(in) :: id
  1275. type(c_ptr), value, intent(in) :: nparts
  1276. end subroutine fstarpu_block_filter_depth_block_shadow
  1277. ! == starpu_data.h ==
  1278. ! void starpu_data_unregister(starpu_data_handle_t handle);
  1279. subroutine fstarpu_data_unregister (dh) bind(C,name="starpu_data_unregister")
  1280. use iso_c_binding, only: c_ptr
  1281. type(c_ptr), value, intent(in) :: dh
  1282. end subroutine fstarpu_data_unregister
  1283. ! void starpu_data_unregister_no_coherency(starpu_data_handle_t handle);
  1284. subroutine fstarpu_data_unregister_no_coherency (dh) bind(C,name="starpu_data_unregister_no_coherency")
  1285. use iso_c_binding, only: c_ptr
  1286. type(c_ptr), value, intent(in) :: dh
  1287. end subroutine fstarpu_data_unregister_no_coherency
  1288. ! void starpu_data_unregister_submit(starpu_data_handle_t handle);
  1289. subroutine fstarpu_data_unregister_submit (dh) bind(C,name="starpu_data_unregister_submit")
  1290. use iso_c_binding, only: c_ptr
  1291. type(c_ptr), value, intent(in) :: dh
  1292. end subroutine fstarpu_data_unregister_submit
  1293. ! void starpu_data_invalidate(starpu_data_handle_t handle);
  1294. subroutine fstarpu_data_invalidate (dh) bind(C,name="starpu_data_invalidate")
  1295. use iso_c_binding, only: c_ptr
  1296. type(c_ptr), value, intent(in) :: dh
  1297. end subroutine fstarpu_data_invalidate
  1298. ! void starpu_data_invalidate_submit(starpu_data_handle_t handle);
  1299. subroutine fstarpu_data_invalidate_submit (dh) bind(C,name="starpu_data_invalidate_submit")
  1300. use iso_c_binding, only: c_ptr
  1301. type(c_ptr), value, intent(in) :: dh
  1302. end subroutine fstarpu_data_invalidate_submit
  1303. ! void starpu_data_advise_as_important(starpu_data_handle_t handle, unsigned is_important);
  1304. subroutine fstarpu_data_advise_as_important (dh,is_important) bind(C,name="starpu_data_advise_as_important")
  1305. use iso_c_binding, only: c_ptr,c_int
  1306. type(c_ptr), value, intent(in) :: dh
  1307. integer(c_int), value, intent(in) :: is_important
  1308. end subroutine fstarpu_data_advise_as_important
  1309. ! starpu_data_acquire: see fstarpu_data_acquire
  1310. subroutine fstarpu_data_acquire (dh, mode) bind(C)
  1311. use iso_c_binding, only: c_ptr
  1312. type(c_ptr), value, intent(in) :: dh
  1313. type(c_ptr), value, intent(in) :: mode ! C function expects an intptr_t
  1314. end subroutine fstarpu_data_acquire
  1315. ! int starpu_data_acquire_on_node(starpu_data_handle_t handle, int node, enum starpu_data_access_mode mode);
  1316. ! int starpu_data_acquire_cb(starpu_data_handle_t handle, enum starpu_data_access_mode mode, void (*callback)(void *), void *arg);
  1317. ! int starpu_data_acquire_on_node_cb(starpu_data_handle_t handle, int node, enum starpu_data_access_mode mode, void (*callback)(void *), void *arg);
  1318. ! int starpu_data_acquire_cb_sequential_consistency(starpu_data_handle_t handle, enum starpu_data_access_mode mode, void (*callback)(void *), void *arg, int sequential_consistency);
  1319. ! int starpu_data_acquire_on_node_cb_sequential_consistency(starpu_data_handle_t handle, int node, enum starpu_data_access_mode mode, void (*callback)(void *), void *arg, int sequential_consistency);
  1320. ! void starpu_data_release(starpu_data_handle_t handle);
  1321. subroutine fstarpu_data_release (dh) bind(C,name="starpu_data_release")
  1322. use iso_c_binding, only: c_ptr
  1323. type(c_ptr), value, intent(in) :: dh
  1324. end subroutine fstarpu_data_release
  1325. ! void starpu_data_release_on_node(starpu_data_handle_t handle, int node);
  1326. subroutine fstarpu_data_release_on_node (dh, node) bind(C,name="starpu_data_release_on_node")
  1327. use iso_c_binding, only: c_ptr, c_int
  1328. type(c_ptr), value, intent(in) :: dh
  1329. integer(c_int), value, intent(in) :: node
  1330. end subroutine fstarpu_data_release_on_node
  1331. ! starpu_arbiter_t starpu_arbiter_create(void) STARPU_ATTRIBUTE_MALLOC;
  1332. function fstarpu_arbiter_create () bind(C,name="starpu_arbiter_create")
  1333. use iso_c_binding, only: c_ptr
  1334. type(c_ptr) :: fstarpu_arbiter_create
  1335. end function fstarpu_arbiter_create
  1336. ! void starpu_data_assign_arbiter(starpu_data_handle_t handle, starpu_arbiter_t arbiter);
  1337. subroutine fstarpu_data_assign_arbiter (dh,arbiter) bind(C,name="starpu_data_assign_arbiter")
  1338. use iso_c_binding, only: c_ptr
  1339. type(c_ptr), intent(out) :: dh
  1340. type(c_ptr), value, intent(in) :: arbiter
  1341. end subroutine fstarpu_data_assign_arbiter
  1342. ! void starpu_arbiter_destroy(starpu_arbiter_t arbiter);
  1343. subroutine fstarpu_data_arbiter_destroy (arbiter) bind(C,name="starpu_data_arbiter_destroy")
  1344. use iso_c_binding, only: c_ptr
  1345. type(c_ptr), value, intent(in) :: arbiter
  1346. end subroutine fstarpu_data_arbiter_destroy
  1347. ! void starpu_data_display_memory_stats();
  1348. subroutine fstarpu_display_memory_stats() bind(C,name="starpu_display_memory_stats")
  1349. end subroutine fstarpu_display_memory_stats
  1350. ! int starpu_data_request_allocation(starpu_data_handle_t handle, unsigned node);
  1351. subroutine fstarpu_data_request_allocation (dh, node) &
  1352. bind(C,name="starpu_data_request_allocation")
  1353. use iso_c_binding, only: c_ptr, c_int
  1354. type(c_ptr), value, intent(in) :: dh
  1355. integer(c_int), value, intent(in) :: node
  1356. end subroutine fstarpu_data_request_allocation
  1357. ! int starpu_data_fetch_on_node(starpu_data_handle_t handle, unsigned node, unsigned async);
  1358. subroutine fstarpu_data_fetch_on_node (dh, node, async) &
  1359. bind(C,name="starpu_data_fetch_on_node")
  1360. use iso_c_binding, only: c_ptr, c_int
  1361. type(c_ptr), value, intent(in) :: dh
  1362. integer(c_int), value, intent(in) :: node
  1363. integer(c_int), value, intent(in) :: async
  1364. end subroutine fstarpu_data_fetch_on_node
  1365. ! int starpu_data_prefetch_on_node(starpu_data_handle_t handle, unsigned node, unsigned async);
  1366. subroutine fstarpu_data_prefetch_on_node (dh, node, async) &
  1367. bind(C,name="starpu_data_prefetch_on_node")
  1368. use iso_c_binding, only: c_ptr, c_int
  1369. type(c_ptr), value, intent(in) :: dh
  1370. integer(c_int), value, intent(in) :: node
  1371. integer(c_int), value, intent(in) :: async
  1372. end subroutine fstarpu_data_prefetch_on_node
  1373. ! int starpu_data_prefetch_on_node_prio(starpu_data_handle_t handle, unsigned node, unsigned async, int prio);
  1374. subroutine fstarpu_data_prefetch_on_node_prio (dh, node, async, prio) &
  1375. bind(C,name="starpu_data_prefetch_on_node_prio")
  1376. use iso_c_binding, only: c_ptr, c_int
  1377. type(c_ptr), value, intent(in) :: dh
  1378. integer(c_int), value, intent(in) :: node
  1379. integer(c_int), value, intent(in) :: async
  1380. integer(c_int), value, intent(in) :: prio
  1381. end subroutine fstarpu_data_prefetch_on_node_prio
  1382. ! int starpu_data_idle_prefetch_on_node(starpu_data_handle_t handle, unsigned node, unsigned async);
  1383. subroutine fstarpu_data_idle_prefetch_on_node (dh, node, async) &
  1384. bind(C,name="starpu_data_idle_prefetch_on_node")
  1385. use iso_c_binding, only: c_ptr, c_int
  1386. type(c_ptr), value, intent(in) :: dh
  1387. integer(c_int), value, intent(in) :: node
  1388. integer(c_int), value, intent(in) :: async
  1389. end subroutine fstarpu_data_idle_prefetch_on_node
  1390. ! int starpu_data_idle_prefetch_on_node_prio(starpu_data_handle_t handle, unsigned node, unsigned async, int prio);
  1391. subroutine fstarpu_data_idle_prefetch_on_node_prio (dh, node, async, prio) &
  1392. bind(C,name="starpu_data_idle_prefetch_on_node_prio")
  1393. use iso_c_binding, only: c_ptr, c_int
  1394. type(c_ptr), value, intent(in) :: dh
  1395. integer(c_int), value, intent(in) :: node
  1396. integer(c_int), value, intent(in) :: async
  1397. integer(c_int), value, intent(in) :: prio
  1398. end subroutine fstarpu_data_idle_prefetch_on_node_prio
  1399. !unsigned starpu_data_is_on_node(starpu_data_handle_t handle, unsigned node);
  1400. function fstarpu_data_is_on_node(dh, node) &
  1401. bind(C,name="starpu_data_is_on_node")
  1402. use iso_c_binding, only: c_ptr, c_int
  1403. integer(c_int) :: fstarpu_data_is_on_node
  1404. type(c_ptr), value, intent(in) :: dh
  1405. integer(c_int), value, intent(in) :: node
  1406. end function fstarpu_data_is_on_node
  1407. ! void starpu_data_wont_use(starpu_data_handle_t handle);
  1408. subroutine fstarpu_data_wont_use (dh) bind(c,name="starpu_data_wont_use")
  1409. use iso_c_binding, only: c_ptr
  1410. type(c_ptr), value, intent(in) :: dh
  1411. end subroutine fstarpu_data_wont_use
  1412. ! unsigned starpu_worker_get_memory_node(unsigned workerid);
  1413. function fstarpu_worker_get_memory_node(id) bind(C,name="starpu_worker_get_memory_node")
  1414. use iso_c_binding, only: c_int
  1415. integer(c_int) :: fstarpu_worker_get_memory_node
  1416. integer(c_int), value, intent(in) :: id
  1417. end function fstarpu_worker_get_memory_node
  1418. ! unsigned starpu_memory_nodes_get_count(void);
  1419. function fstarpu_memory_nodes_get_count() bind(C,name="starpu_memory_nodes_get_count")
  1420. use iso_c_binding, only: c_int
  1421. integer(c_int) :: fstarpu_memory_nodes_get_count
  1422. end function fstarpu_memory_nodes_get_count
  1423. ! enum starpu_node_kind starpu_node_get_kind(unsigned node);
  1424. ! void starpu_data_set_wt_mask(starpu_data_handle_t handle, uint32_t wt_mask);
  1425. ! void starpu_data_set_sequential_consistency_flag(starpu_data_handle_t handle, unsigned flag);
  1426. ! unsigned starpu_data_get_sequential_consistency_flag(starpu_data_handle_t handle);
  1427. ! unsigned starpu_data_get_default_sequential_consistency_flag(void);
  1428. ! void starpu_data_set_default_sequential_consistency_flag(unsigned flag);
  1429. ! void starpu_data_query_status(starpu_data_handle_t handle, int memory_node, int *is_allocated, int *is_valid, int *is_requested);
  1430. ! void starpu_data_set_reduction_methods(starpu_data_handle_t handle, struct starpu_codelet *redux_cl, struct starpu_codelet *init_cl);
  1431. subroutine fstarpu_data_set_reduction_methods (dh,redux_cl,init_cl) bind(C,name="starpu_data_set_reduction_methods")
  1432. use iso_c_binding, only: c_ptr
  1433. type(c_ptr), value, intent(in) :: dh
  1434. type(c_ptr), value, intent(in) :: redux_cl
  1435. type(c_ptr), value, intent(in) :: init_cl
  1436. end subroutine fstarpu_data_set_reduction_methods
  1437. ! struct starpu_data_interface_ops* starpu_data_get_interface_ops(starpu_data_handle_t handle);
  1438. ! unsigned starpu_data_test_if_allocated_on_node(starpu_data_handle_t handle, unsigned memory_node);
  1439. function fstarpu_data_test_if_allocated_on_node(dh,mem_node) bind(C,name="starpu_data_test_if_allocated_on_node")
  1440. use iso_c_binding, only: c_ptr, c_int
  1441. integer(c_int) :: fstarpu_data_test_if_allocated_on_node
  1442. type(c_ptr), value, intent(in) :: dh
  1443. integer(c_int), value, intent(in) :: mem_node
  1444. end function fstarpu_data_test_if_allocated_on_node
  1445. ! void starpu_memchunk_tidy(unsigned memory_node);
  1446. subroutine fstarpu_memchunk_tidy (mem_node) bind(c,name="starpu_memchunk_tidy")
  1447. use iso_c_binding, only: c_int
  1448. integer(c_int), value, intent(in) :: mem_node
  1449. end subroutine fstarpu_memchunk_tidy
  1450. ! == starpu_task_util.h ==
  1451. ! starpu_data_handle_t *fstarpu_data_handle_array_alloc(int nb);
  1452. function fstarpu_data_handle_array_alloc (nb) bind(C)
  1453. use iso_c_binding, only: c_ptr, c_int
  1454. type(c_ptr) :: fstarpu_data_handle_array_alloc
  1455. integer(c_int), value, intent(in) :: nb
  1456. end function fstarpu_data_handle_array_alloc
  1457. ! void fstarpu_data_handle_array_free(starpu_data_handle_t *handles);
  1458. subroutine fstarpu_data_handle_array_free (handles) bind(C)
  1459. use iso_c_binding, only: c_ptr
  1460. type(c_ptr), value, intent(in) :: handles
  1461. end subroutine fstarpu_data_handle_array_free
  1462. ! void fstarpu_data_handle_array_set(starpu_data_handle_t *handles, int i, starpu_data_handle_t handle);
  1463. subroutine fstarpu_data_handle_array_set (handles, i, handle) bind(C)
  1464. use iso_c_binding, only: c_ptr, c_int
  1465. type(c_ptr), value, intent(in) :: handles
  1466. integer(c_int), value, intent(in) :: i
  1467. type(c_ptr), value, intent(in) :: handle
  1468. end subroutine fstarpu_data_handle_array_set
  1469. ! struct starpu_data_descr *fstarpu_data_descr_array_alloc(int nb);
  1470. function fstarpu_data_descr_array_alloc (nb) bind(C)
  1471. use iso_c_binding, only: c_ptr, c_int
  1472. type(c_ptr) :: fstarpu_data_descr_array_alloc
  1473. integer(c_int), value, intent(in) :: nb
  1474. end function fstarpu_data_descr_array_alloc
  1475. ! struct starpu_data_descr *fstarpu_data_descr_alloc(void);
  1476. function fstarpu_data_descr_alloc () bind(C)
  1477. use iso_c_binding, only: c_ptr
  1478. type(c_ptr) :: fstarpu_data_descr_alloc
  1479. end function fstarpu_data_descr_alloc
  1480. ! void fstarpu_data_descr_array_free(struct starpu_data_descr *descrs);
  1481. subroutine fstarpu_data_descr_array_free (descrs) bind(C)
  1482. use iso_c_binding, only: c_ptr
  1483. type(c_ptr), value, intent(in) :: descrs
  1484. end subroutine fstarpu_data_descr_array_free
  1485. ! void fstarpu_data_descr_free(struct starpu_data_descr *descr);
  1486. subroutine fstarpu_data_descrg_free (descr) bind(C)
  1487. use iso_c_binding, only: c_ptr
  1488. type(c_ptr), value, intent(in) :: descr
  1489. end subroutine fstarpu_data_descrg_free
  1490. ! void fstarpu_data_descr_array_set(struct starpu_data_descr *descrs, int i, starpu_data_handle_t handle, intptr_t mode);
  1491. subroutine fstarpu_data_descr_array_set (descrs, i, handle, mode) bind(C)
  1492. use iso_c_binding, only: c_ptr, c_int, c_intptr_t
  1493. type(c_ptr), value, intent(in) :: descrs
  1494. integer(c_int), value, intent(in) :: i
  1495. type(c_ptr), value, intent(in) :: handle
  1496. type(c_ptr), value, intent(in) :: mode ! C func expects c_intptr_t
  1497. end subroutine fstarpu_data_descr_array_set
  1498. ! void fstarpu_data_descr_set(struct starpu_data_descr *descr, starpu_data_handle_t handle, intptr_t mode);
  1499. subroutine fstarpu_data_descr_set (descr, handle, mode) bind(C)
  1500. use iso_c_binding, only: c_ptr, c_intptr_t
  1501. type(c_ptr), value, intent(in) :: descr
  1502. type(c_ptr), value, intent(in) :: handle
  1503. type(c_ptr), value, intent(in) :: mode ! C func expects c_intptr_t
  1504. end subroutine fstarpu_data_descr_set
  1505. subroutine fstarpu_task_insert(arglist) bind(C)
  1506. use iso_c_binding, only: c_ptr
  1507. type(c_ptr), dimension(*), intent(in) :: arglist
  1508. end subroutine fstarpu_task_insert
  1509. subroutine fstarpu_insert_task(arglist) bind(C,name="fstarpu_task_insert")
  1510. use iso_c_binding, only: c_ptr
  1511. type(c_ptr), dimension(*), intent(in) :: arglist
  1512. end subroutine fstarpu_insert_task
  1513. subroutine fstarpu_unpack_arg(cl_arg,bufferlist) bind(C)
  1514. use iso_c_binding, only: c_ptr
  1515. type(c_ptr), value, intent(in) :: cl_arg
  1516. type(c_ptr), dimension(*), intent(in) :: bufferlist
  1517. end subroutine fstarpu_unpack_arg
  1518. ! == starpu_sched_ctx.h ==
  1519. ! starpu_sched_ctx_create: see fstarpu_sched_ctx_create
  1520. function fstarpu_sched_ctx_create(workers_array,nworkers,ctx_name, arglist) bind(C)
  1521. use iso_c_binding, only: c_int, c_char, c_ptr
  1522. integer(c_int) :: fstarpu_sched_ctx_create
  1523. integer(c_int), intent(in) :: workers_array(*)
  1524. integer(c_int), value, intent(in) :: nworkers
  1525. character(c_char), intent(in) :: ctx_name
  1526. type(c_ptr), dimension(*), intent(in) :: arglist
  1527. end function fstarpu_sched_ctx_create
  1528. ! unsigned starpu_sched_ctx_create_inside_interval(const char *policy_name, const char *sched_ctx_name, int min_ncpus, int max_ncpus, int min_ngpus, int max_ngpus, unsigned allow_overlap);
  1529. function fstarpu_sched_ctx_create_inside_interval(policy_name, sched_ctx_name, &
  1530. min_ncpus, max_ncpus, min_ngpus, max_ngpus, allow_overlap) &
  1531. bind(C,name="starpu_sched_ctx_create_inside_interval")
  1532. use iso_c_binding, only: c_int, c_char
  1533. integer(c_int) :: fstarpu_sched_ctx_create_inside_interval
  1534. character(c_char), intent(in) :: policy_name
  1535. character(c_char), intent(in) :: sched_ctx_name
  1536. integer(c_int), value, intent(in) :: min_ncpus
  1537. integer(c_int), value, intent(in) :: max_ncpus
  1538. integer(c_int), value, intent(in) :: min_ngpus
  1539. integer(c_int), value, intent(in) :: max_ngpus
  1540. integer(c_int), value, intent(in) :: allow_overlap
  1541. end function fstarpu_sched_ctx_create_inside_interval
  1542. ! void starpu_sched_ctx_register_close_callback(unsigned sched_ctx_id, void (*close_callback)(unsigned sched_ctx_id, void* args), void *args);
  1543. subroutine fstarpu_sched_ctx_register_close_callback (sched_ctx_id, close_callback, args) &
  1544. bind(c,name="starpu_sched_ctx_register_close_callback")
  1545. use iso_c_binding, only: c_ptr, c_funptr, c_int
  1546. integer(c_int), value, intent(in) :: sched_ctx_id
  1547. type(c_funptr), value, intent(in) :: close_callback
  1548. type(c_ptr), value, intent(in) :: args
  1549. end subroutine fstarpu_sched_ctx_register_close_callback
  1550. ! void starpu_sched_ctx_add_workers(int *workerids_ctx, int nworkers_ctx, unsigned sched_ctx_id);
  1551. subroutine fstarpu_sched_ctx_add_workers(workerids,nworkers,ctx) bind(C,name="starpu_sched_ctx_add_workers")
  1552. use iso_c_binding, only: c_int
  1553. integer(c_int), intent(in) :: workerids (*)
  1554. integer(c_int), value, intent(in) :: nworkers
  1555. integer(c_int), value, intent(in) :: ctx
  1556. end subroutine fstarpu_sched_ctx_add_workers
  1557. ! void starpu_sched_ctx_remove_workers(int *workerids_ctx, int nworkers_ctx, unsigned sched_ctx_id);
  1558. subroutine fstarpu_sched_ctx_remove_workers(workerids,nworkers,ctx) bind(C,name="starpu_sched_ctx_remove_workers")
  1559. use iso_c_binding, only: c_int
  1560. integer(c_int), intent(in) :: workerids (*)
  1561. integer(c_int), value, intent(in) :: nworkers
  1562. integer(c_int), value, intent(in) :: ctx
  1563. end subroutine fstarpu_sched_ctx_remove_workers
  1564. ! starpu_sched_ctx_display_workers: see fstarpu_sched_ctx_display_workers
  1565. subroutine fstarpu_sched_ctx_display_workers (ctx) bind(C)
  1566. use iso_c_binding, only: c_int
  1567. integer(c_int), value, intent(in) :: ctx
  1568. end subroutine fstarpu_sched_ctx_display_workers
  1569. ! void starpu_sched_ctx_delete(unsigned sched_ctx_id);
  1570. subroutine fstarpu_sched_ctx_delete (ctx) bind(C,name="starpu_sched_ctx_delete")
  1571. use iso_c_binding, only: c_int
  1572. integer(c_int), value, intent(in) :: ctx
  1573. end subroutine fstarpu_sched_ctx_delete
  1574. ! void starpu_sched_ctx_set_inheritor(unsigned sched_ctx_id, unsigned inheritor);
  1575. subroutine fstarpu_sched_ctx_set_inheritor (ctx,inheritor) bind(C,name="starpu_sched_ctx_set_inheritor")
  1576. use iso_c_binding, only: c_int
  1577. integer(c_int), value, intent(in) :: ctx
  1578. integer(c_int), value, intent(in) :: inheritor
  1579. end subroutine fstarpu_sched_ctx_set_inheritor
  1580. ! unsigned starpu_sched_ctx_get_inheritor(unsigned sched_ctx_id);
  1581. function fstarpu_sched_ctx_get_inheritor (ctx) bind(C,name="starpu_sched_ctx_get_inheritor")
  1582. use iso_c_binding, only: c_int
  1583. integer(c_int) :: fstarpu_sched_ctx_get_inheritor
  1584. integer(c_int), value, intent(in) :: ctx
  1585. end function fstarpu_sched_ctx_get_inheritor
  1586. ! unsigned starpu_sched_ctx_get_hierarchy_level(unsigned sched_ctx_id);
  1587. function fstarpu_sched_ctx_get_hierarchy_level (ctx) bind(C,name="starpu_sched_ctx_get_hierarchy_level")
  1588. use iso_c_binding, only: c_int
  1589. integer(c_int) :: fstarpu_sched_ctx_get_hierarchy_level
  1590. integer(c_int), value, intent(in) :: ctx
  1591. end function fstarpu_sched_ctx_get_hierarchy_level
  1592. ! void starpu_sched_ctx_set_context(unsigned *sched_ctx_id);
  1593. subroutine fstarpu_sched_ctx_set_context (ctx_ptr) bind(C,name="starpu_sched_ctx_set_context")
  1594. use iso_c_binding, only: c_ptr
  1595. type(c_ptr), value, intent(in) :: ctx_ptr
  1596. end subroutine fstarpu_sched_ctx_set_context
  1597. ! unsigned starpu_sched_ctx_get_context(void);
  1598. function fstarpu_sched_ctx_get_context () bind(C,name="starpu_sched_ctx_get_context")
  1599. use iso_c_binding, only: c_int
  1600. integer(c_int) :: fstarpu_sched_ctx_get_context
  1601. end function fstarpu_sched_ctx_get_context
  1602. ! void starpu_sched_ctx_stop_task_submission(void);
  1603. subroutine fstarpu_sched_ctx_stop_task_submission () bind(c,name="starpu_sched_ctx_stop_task_submission")
  1604. use iso_c_binding
  1605. end subroutine fstarpu_sched_ctx_stop_task_submission
  1606. ! void starpu_sched_ctx_finished_submit(unsigned sched_ctx_id);
  1607. subroutine fstarpu_sched_ctx_finished_submit (sched_ctx_id) bind(c,name="starpu_sched_ctx_finished_submit")
  1608. use iso_c_binding, only: c_int
  1609. integer(c_int), value, intent(in) :: sched_ctx_id
  1610. end subroutine fstarpu_sched_ctx_finished_submit
  1611. ! unsigned starpu_sched_ctx_get_workers_list(unsigned sched_ctx_id, int **workerids);
  1612. ! unsigned starpu_sched_ctx_get_workers_list_raw(unsigned sched_ctx_id, int **workerids);
  1613. ! unsigned starpu_sched_ctx_get_nworkers(unsigned sched_ctx_id);
  1614. function fstarpu_sched_ctx_get_nworkers (sched_ctx_id) &
  1615. bind(c,name="starpu_sched_ctx_get_nworkers")
  1616. use iso_c_binding, only: c_int
  1617. integer(c_int) :: fstarpu_sched_ctx_get_nworkers
  1618. integer(c_int), value, intent(in) :: sched_ctx_id
  1619. end function fstarpu_sched_ctx_get_nworkers
  1620. ! unsigned starpu_sched_ctx_get_nshared_workers(unsigned sched_ctx_id, unsigned sched_ctx_id2);
  1621. function fstarpu_sched_ctx_get_nshared_workers (sched_ctx_id, sched_ctx_id2) &
  1622. bind(c,name="starpu_sched_ctx_get_nshared_workers")
  1623. use iso_c_binding, only: c_int
  1624. integer(c_int) :: fstarpu_sched_ctx_get_nshared_workers
  1625. integer(c_int), value, intent(in) :: sched_ctx_id
  1626. integer(c_int), value, intent(in) :: sched_ctx_id2
  1627. end function fstarpu_sched_ctx_get_nshared_workers
  1628. ! unsigned starpu_sched_ctx_contains_worker(int workerid, unsigned sched_ctx_id);
  1629. function fstarpu_sched_ctx_contains_worker (workerid, sched_ctx_id) &
  1630. bind(c,name="starpu_sched_ctx_contains_worker")
  1631. use iso_c_binding, only: c_int
  1632. integer(c_int) :: fstarpu_sched_ctx_contains_worker
  1633. integer(c_int), value, intent(in) :: workerid
  1634. integer(c_int), value, intent(in) :: sched_ctx_id
  1635. end function fstarpu_sched_ctx_contains_worker
  1636. ! unsigned starpu_sched_ctx_contains_type_of_worker(enum starpu_worker_archtype arch, unsigned sched_ctx_id);
  1637. function fstarpu_sched_ctx_contains_type_of_worker (arch, sched_ctx_id) &
  1638. bind(c,name="starpu_sched_ctx_contains_type_of_worker")
  1639. use iso_c_binding, only: c_int
  1640. integer(c_int) :: fstarpu_sched_ctx_contains_type_of_worker
  1641. integer(c_int), value, intent(in) :: arch
  1642. integer(c_int), value, intent(in) :: sched_ctx_id
  1643. end function fstarpu_sched_ctx_contains_type_of_worker
  1644. ! unsigned starpu_sched_ctx_worker_get_id(unsigned sched_ctx_id);
  1645. function fstarpu_sched_ctx_worker_get_id (sched_ctx_id) &
  1646. bind(c,name="starpu_sched_ctx_worker_get_id")
  1647. use iso_c_binding, only: c_int
  1648. integer(c_int) :: fstarpu_sched_ctx_worker_get_id
  1649. integer(c_int), value, intent(in) :: sched_ctx_id
  1650. end function fstarpu_sched_ctx_worker_get_id
  1651. ! unsigned starpu_sched_ctx_get_ctx_for_task(struct starpu_task *task);
  1652. function fstarpu_sched_ctx_get_ctx_for_task (task) &
  1653. bind(c,name="starpu_sched_ctx_get_ctx_for_task")
  1654. use iso_c_binding, only: c_int, c_ptr
  1655. integer(c_int) :: fstarpu_sched_ctx_get_ctx_for_task
  1656. type(c_ptr), value, intent(in) :: task
  1657. end function fstarpu_sched_ctx_get_ctx_for_task
  1658. ! unsigned starpu_sched_ctx_overlapping_ctxs_on_worker(int workerid);
  1659. function fstarpu_sched_ctx_overlapping_ctxs_on_worker (workerid) &
  1660. bind(c,name="starpu_sched_ctx_overlapping_ctxs_on_worker")
  1661. use iso_c_binding, only: c_int
  1662. integer(c_int) :: fstarpu_sched_ctx_overlapping_ctxs_on_worker
  1663. integer(c_int), value, intent(in) :: workerid
  1664. end function fstarpu_sched_ctx_overlapping_ctxs_on_worker
  1665. ! int starpu_sched_get_min_priority(void);
  1666. function fstarpu_sched_get_min_priority () &
  1667. bind(c,name="starpu_sched_get_min_priority")
  1668. use iso_c_binding, only: c_int
  1669. integer(c_int) :: fstarpu_sched_get_min_priority
  1670. end function fstarpu_sched_get_min_priority
  1671. ! int starpu_sched_get_max_priority(void);
  1672. function fstarpu_sched_get_max_priority () &
  1673. bind(c,name="starpu_sched_get_max_priority")
  1674. use iso_c_binding, only: c_int
  1675. integer(c_int) :: fstarpu_sched_get_max_priority
  1676. end function fstarpu_sched_get_max_priority
  1677. ! int starpu_sched_set_min_priority(int min_prio);
  1678. function fstarpu_sched_set_min_priority (min_prio) &
  1679. bind(c,name="starpu_sched_set_min_priority")
  1680. use iso_c_binding, only: c_int
  1681. integer(c_int) :: fstarpu_sched_set_min_priority
  1682. integer(c_int), value, intent(in) :: min_prio
  1683. end function fstarpu_sched_set_min_priority
  1684. ! int starpu_sched_set_max_priority(int max_prio);
  1685. function fstarpu_sched_set_max_priority (max_prio) &
  1686. bind(c,name="starpu_sched_set_max_priority")
  1687. use iso_c_binding, only: c_int
  1688. integer(c_int) :: fstarpu_sched_set_max_priority
  1689. integer(c_int), value, intent(in) :: max_prio
  1690. end function fstarpu_sched_set_max_priority
  1691. ! int starpu_sched_ctx_get_min_priority(unsigned sched_ctx_id);
  1692. function fstarpu_sched_ctx_get_min_priority (sched_ctx_id) &
  1693. bind(c,name="starpu_sched_ctx_get_min_priority")
  1694. use iso_c_binding, only: c_int
  1695. integer(c_int) :: fstarpu_sched_ctx_get_min_priority
  1696. integer(c_int), value, intent(in) :: sched_ctx_id
  1697. end function fstarpu_sched_ctx_get_min_priority
  1698. ! int starpu_sched_ctx_get_max_priority(unsigned sched_ctx_id);
  1699. function fstarpu_sched_ctx_get_max_priority (sched_ctx_id) &
  1700. bind(c,name="starpu_sched_ctx_get_max_priority")
  1701. use iso_c_binding, only: c_int
  1702. integer(c_int) :: fstarpu_sched_ctx_get_max_priority
  1703. integer(c_int), value, intent(in) :: sched_ctx_id
  1704. end function fstarpu_sched_ctx_get_max_priority
  1705. ! int starpu_sched_ctx_set_min_priority(unsigned sched_ctx_id, int min_prio);
  1706. function fstarpu_sched_ctx_set_min_priority (sched_ctx_id, min_prio) &
  1707. bind(c,name="starpu_sched_ctx_set_min_priority")
  1708. use iso_c_binding, only: c_int
  1709. integer(c_int) :: fstarpu_sched_ctx_set_min_priority
  1710. integer(c_int), value, intent(in) :: sched_ctx_id
  1711. integer(c_int), value, intent(in) :: min_prio
  1712. end function fstarpu_sched_ctx_set_min_priority
  1713. ! int starpu_sched_ctx_set_max_priority(unsigned sched_ctx_id, int max_prio);
  1714. function fstarpu_sched_ctx_set_max_priority (sched_ctx_id, max_prio) &
  1715. bind(c,name="starpu_sched_ctx_set_max_priority")
  1716. use iso_c_binding, only: c_int
  1717. integer(c_int) :: fstarpu_sched_ctx_set_max_priority
  1718. integer(c_int), value, intent(in) :: sched_ctx_id
  1719. integer(c_int), value, intent(in) :: max_prio
  1720. end function fstarpu_sched_ctx_set_max_priority
  1721. ! int starpu_sched_ctx_min_priority_is_set(unsigned sched_ctx_id);
  1722. function fstarpu_sched_ctx_min_priority_is_set (sched_ctx_id) &
  1723. bind(c,name="starpu_sched_ctx_min_priority_is_set")
  1724. use iso_c_binding, only: c_int
  1725. integer(c_int) :: fstarpu_sched_ctx_min_priority_is_set
  1726. integer(c_int), value, intent(in) :: sched_ctx_id
  1727. end function fstarpu_sched_ctx_min_priority_is_set
  1728. ! int starpu_sched_ctx_max_priority_is_set(unsigned sched_ctx_id);
  1729. function fstarpu_sched_ctx_max_priority_is_set (sched_ctx_id) &
  1730. bind(c,name="starpu_sched_ctx_max_priority_is_set")
  1731. use iso_c_binding, only: c_int
  1732. integer(c_int) :: fstarpu_sched_ctx_max_priority_is_set
  1733. integer(c_int), value, intent(in) :: sched_ctx_id
  1734. end function fstarpu_sched_ctx_max_priority_is_set
  1735. ! void *starpu_sched_ctx_get_user_data(unsigned sched_ctx_id);
  1736. function fstarpu_sched_ctx_get_user_data(sched_ctx_id) &
  1737. bind(c,name="starpu_sched_ctx_get_user_data")
  1738. use iso_c_binding, only: c_int, c_ptr
  1739. integer(c_int), value, intent(in) :: sched_ctx_id
  1740. type(c_ptr) :: fstarpu_sched_ctx_get_user_data
  1741. end function fstarpu_sched_ctx_get_user_data
  1742. ! struct starpu_worker_collection *starpu_sched_ctx_create_worker_collection(unsigned sched_ctx_id, enum starpu_worker_collection_type type) STARPU_ATTRIBUTE_MALLOC;
  1743. ! void starpu_sched_ctx_delete_worker_collection(unsigned sched_ctx_id);
  1744. subroutine fstarpu_sched_ctx_delete_worker_collection (sched_ctx_id) &
  1745. bind(c,name="starpu_sched_ctx_delete_worker_collection")
  1746. use iso_c_binding, only: c_int
  1747. integer(c_int), value, intent(in) :: sched_ctx_id
  1748. end subroutine fstarpu_sched_ctx_delete_worker_collection
  1749. ! struct starpu_worker_collection *starpu_sched_ctx_get_worker_collection(unsigned sched_ctx_id);
  1750. ! void starpu_sched_ctx_set_policy_data(unsigned sched_ctx_id, void *policy_data);
  1751. subroutine fstarpu_sched_ctx_set_policy_data (sched_ctx_id, policy_data) &
  1752. bind(c,name="starpu_sched_ctx_set_policy_data")
  1753. use iso_c_binding, only: c_int, c_ptr
  1754. integer(c_int), value, intent(in) :: sched_ctx_id
  1755. type(c_ptr), value, intent(in) :: policy_data
  1756. end subroutine fstarpu_sched_ctx_set_policy_data
  1757. ! void *starpu_sched_ctx_get_policy_data(unsigned sched_ctx_id);
  1758. function fstarpu_sched_ctx_get_policy_data (sched_ctx_id) &
  1759. bind(c,name="starpu_sched_ctx_get_policy_data")
  1760. use iso_c_binding, only: c_int, c_ptr
  1761. type(c_ptr) :: fstarpu_sched_ctx_get_policy_data
  1762. integer(c_int), value, intent(in) :: sched_ctx_id
  1763. end function fstarpu_sched_ctx_get_policy_data
  1764. ! void *starpu_sched_ctx_exec_parallel_code(void* (*func)(void*), void *param, unsigned sched_ctx_id);
  1765. function fstarpu_sched_ctx_exec_parallel_code (func, param, sched_ctx_id) &
  1766. bind(c,name="starpu_sched_ctx_exec_parallel_code")
  1767. use iso_c_binding, only: c_int, c_funptr, c_ptr
  1768. type(c_ptr) :: fstarpu_sched_ctx_exec_parallel_code
  1769. type(c_funptr), value, intent(in) :: func
  1770. type(c_ptr), value, intent(in) :: param
  1771. integer(c_int), value, intent(in) :: sched_ctx_id
  1772. end function fstarpu_sched_ctx_exec_parallel_code
  1773. ! int starpu_sched_ctx_get_nready_tasks(unsigned sched_ctx_id);
  1774. function fstarpu_sched_ctx_get_nready_tasks (sched_ctx_id) &
  1775. bind(c,name="starpu_sched_ctx_get_nready_tasks")
  1776. use iso_c_binding, only: c_int
  1777. integer(c_int) :: fstarpu_sched_ctx_get_nready_tasks
  1778. integer(c_int), value, intent(in) :: sched_ctx_id
  1779. end function fstarpu_sched_ctx_get_nready_tasks
  1780. ! double starpu_sched_ctx_get_nready_flops(unsigned sched_ctx_id);
  1781. function fstarpu_sched_ctx_get_nready_flops (sched_ctx_id) &
  1782. bind(c,name="starpu_sched_ctx_get_nready_flops")
  1783. use iso_c_binding, only: c_int, c_double
  1784. real(c_double) :: fstarpu_sched_ctx_get_nready_flops
  1785. integer(c_int), value, intent(in) :: sched_ctx_id
  1786. end function fstarpu_sched_ctx_get_nready_flops
  1787. ! void starpu_sched_ctx_list_task_counters_increment(unsigned sched_ctx_id, int workerid);
  1788. subroutine fstarpu_sched_ctx_list_task_counters_increment (sched_ctx_id, workerid) &
  1789. bind(c,name="starpu_sched_ctx_list_task_counters_increment")
  1790. use iso_c_binding, only: c_int
  1791. integer(c_int), value, intent(in) :: sched_ctx_id
  1792. integer(c_int), value, intent(in) :: workerid
  1793. end subroutine fstarpu_sched_ctx_list_task_counters_increment
  1794. ! void starpu_sched_ctx_list_task_counters_decrement(unsigned sched_ctx_id, int workerid);
  1795. subroutine fstarpu_sched_ctx_list_task_counters_decrement (sched_ctx_id, workerid) &
  1796. bind(c,name="starpu_sched_ctx_list_task_counters_decrement")
  1797. use iso_c_binding, only: c_int
  1798. integer(c_int), value, intent(in) :: sched_ctx_id
  1799. integer(c_int), value, intent(in) :: workerid
  1800. end subroutine fstarpu_sched_ctx_list_task_counters_decrement
  1801. ! void starpu_sched_ctx_list_task_counters_reset(unsigned sched_ctx_id, int workerid);
  1802. subroutine fstarpu_sched_ctx_list_task_counters_reset (sched_ctx_id, workerid) &
  1803. bind(c,name="starpu_sched_ctx_list_task_counters_reset")
  1804. use iso_c_binding, only: c_int
  1805. integer(c_int), value, intent(in) :: sched_ctx_id
  1806. integer(c_int), value, intent(in) :: workerid
  1807. end subroutine fstarpu_sched_ctx_list_task_counters_reset
  1808. ! void starpu_sched_ctx_list_task_counters_increment_all(struct starpu_task *task, unsigned sched_ctx_id);
  1809. subroutine fstarpu_sched_ctx_list_task_counters_increment_all (task, sched_ctx_id) &
  1810. bind(c,name="starpu_sched_ctx_list_task_counters_increment_all")
  1811. use iso_c_binding, only: c_ptr, c_int
  1812. type(c_ptr), value, intent(in) :: task
  1813. integer(c_int), value, intent(in) :: sched_ctx_id
  1814. end subroutine fstarpu_sched_ctx_list_task_counters_increment_all
  1815. ! void starpu_sched_ctx_list_task_counters_decrement_all(struct starpu_task *task, unsigned sched_ctx_id);
  1816. subroutine fstarpu_sched_ctx_list_task_counters_decrement_all (task, sched_ctx_id) &
  1817. bind(c,name="starpu_sched_ctx_list_task_counters_decrement_all")
  1818. use iso_c_binding, only: c_ptr, c_int
  1819. type(c_ptr), value, intent(in) :: task
  1820. integer(c_int), value, intent(in) :: sched_ctx_id
  1821. end subroutine fstarpu_sched_ctx_list_task_counters_decrement_all
  1822. ! void starpu_sched_ctx_list_task_counters_reset_all(struct starpu_task *task, unsigned sched_ctx_id);
  1823. subroutine fstarpu_sched_ctx_list_task_counters_reset_all (task, sched_ctx_id) &
  1824. bind(c,name="starpu_sched_ctx_list_task_counters_reset_all")
  1825. use iso_c_binding, only: c_ptr, c_int
  1826. type(c_ptr), value, intent(in) :: task
  1827. integer(c_int), value, intent(in) :: sched_ctx_id
  1828. end subroutine fstarpu_sched_ctx_list_task_counters_reset_all
  1829. ! unsigned starpu_sched_ctx_get_priority(int worker, unsigned sched_ctx_id);
  1830. function fstarpu_sched_ctx_get_priority (worker, sched_ctx_id) &
  1831. bind(c,name="starpu_sched_ctx_get_priority")
  1832. use iso_c_binding, only: c_int
  1833. integer(c_int) :: fstarpu_sched_ctx_get_priority
  1834. integer(c_int), value, intent(in) :: worker
  1835. integer(c_int), value, intent(in) :: sched_ctx_id
  1836. end function fstarpu_sched_ctx_get_priority
  1837. ! void starpu_sched_ctx_get_available_cpuids(unsigned sched_ctx_id, int **cpuids, int *ncpuids);
  1838. ! void starpu_sched_ctx_bind_current_thread_to_cpuid(unsigned cpuid);
  1839. subroutine fstarpu_sched_ctx_bind_current_thread_to_cpuid (cpuid) &
  1840. bind(c,name="starpu_sched_ctx_bind_current_thread_to_cpuid")
  1841. use iso_c_binding, only: c_int
  1842. integer(c_int), value, intent(in) :: cpuid
  1843. end subroutine fstarpu_sched_ctx_bind_current_thread_to_cpuid
  1844. ! int starpu_sched_ctx_book_workers_for_task(unsigned sched_ctx_id, int *workerids, int nworkers);
  1845. function fstarpu_sched_ctx_book_workers_for_task (sched_ctx_id, workerids, nworkers) &
  1846. bind(c,name="starpu_sched_ctx_book_workers_for_task")
  1847. use iso_c_binding, only: c_int
  1848. integer(c_int) :: fstarpu_sched_ctx_book_workers_for_task
  1849. integer(c_int), value, intent(in) :: sched_ctx_id
  1850. integer(c_int), intent(in) :: workerids(*)
  1851. integer(c_int), value, intent(in) :: nworkers
  1852. end function fstarpu_sched_ctx_book_workers_for_task
  1853. ! void starpu_sched_ctx_unbook_workers_for_task(unsigned sched_ctx_id, int master);
  1854. subroutine fstarpu_sched_ctx_unbook_workers_for_task (sched_ctx_id, master) &
  1855. bind(c,name="starpu_sched_ctx_unbook_workers_for_task")
  1856. use iso_c_binding, only: c_int
  1857. integer(c_int), value, intent(in) :: sched_ctx_id
  1858. integer(c_int), value, intent(in) :: master
  1859. end subroutine fstarpu_sched_ctx_unbook_workers_for_task
  1860. ! unsigned starpu_sched_ctx_worker_is_master_for_child_ctx(int workerid, unsigned sched_ctx_id);
  1861. function fstarpu_sched_ctx_worker_is_master_for_child_ctx (workerid, sched_ctx_id) &
  1862. bind(c,name="starpu_sched_ctx_worker_is_master_for_child_ctx")
  1863. use iso_c_binding, only: c_int
  1864. integer(c_int) :: fstarpu_sched_ctx_worker_is_master_for_child_ctx
  1865. integer(c_int), value, intent(in) :: workerid
  1866. integer(c_int), value, intent(in) :: sched_ctx_id
  1867. end function fstarpu_sched_ctx_worker_is_master_for_child_ctx
  1868. ! unsigned starpu_sched_ctx_master_get_context(int masterid);
  1869. function fstarpu_sched_ctx_master_get_context (masterid) &
  1870. bind(c,name="starpu_sched_ctx_master_get_context")
  1871. use iso_c_binding, only: c_int
  1872. integer(c_int) :: fstarpu_sched_ctx_master_get_context
  1873. integer(c_int), value, intent(in) :: masterid
  1874. end function fstarpu_sched_ctx_master_get_context
  1875. ! void starpu_sched_ctx_revert_task_counters(unsigned sched_ctx_id, double flops);
  1876. subroutine fstarpu_sched_ctx_revert_task_counters (sched_ctx_id, flops) &
  1877. bind(c,name="starpu_sched_ctx_revert_task_counters")
  1878. use iso_c_binding, only: c_int, c_double
  1879. integer(c_int), value, intent(in) :: sched_ctx_id
  1880. real(c_double), value, intent(in) :: flops
  1881. end subroutine fstarpu_sched_ctx_revert_task_counters
  1882. ! void starpu_sched_ctx_move_task_to_ctx(struct starpu_task *task, unsigned sched_ctx, unsigned manage_mutex);
  1883. subroutine fstarpu_sched_ctx_move_task_to_ctx (task, sched_ctx, manage_mutex) &
  1884. bind(c,name="starpu_sched_ctx_move_task_to_ctx")
  1885. use iso_c_binding, only: c_ptr, c_int
  1886. type(c_ptr), value, intent(in) :: task
  1887. integer(c_int), value, intent(in) :: sched_ctx
  1888. integer(c_int), value, intent(in) :: manage_mutex
  1889. end subroutine fstarpu_sched_ctx_move_task_to_ctx
  1890. ! int starpu_sched_ctx_get_worker_rank(unsigned sched_ctx_id);
  1891. function fstarpu_sched_ctx_get_worker_rank (sched_ctx_id) &
  1892. bind(c,name="starpu_sched_ctx_get_worker_rank")
  1893. use iso_c_binding, only: c_int
  1894. integer(c_int) :: fstarpu_sched_ctx_get_worker_rank
  1895. integer(c_int), value, intent(in) :: sched_ctx_id
  1896. end function fstarpu_sched_ctx_get_worker_rank
  1897. ! unsigned starpu_sched_ctx_has_starpu_scheduler(unsigned sched_ctx_id, unsigned *awake_workers);
  1898. ! void starpu_sched_ctx_call_pushed_task_cb(int workerid, unsigned sched_ctx_id);
  1899. subroutine fstarpu_sched_ctx_call_pushed_task_cb (workerid, sched_ctx_id) &
  1900. bind(c,name="starpu_sched_ctx_call_pushed_task_cb")
  1901. use iso_c_binding, only: c_int
  1902. integer(c_int), value, intent(in) :: workerid
  1903. integer(c_int), value, intent(in) :: sched_ctx_id
  1904. end subroutine fstarpu_sched_ctx_call_pushed_task_cb
  1905. ! == starpu_fxt.h ==
  1906. ! void starpu_fxt_options_init(struct starpu_fxt_options *options);
  1907. subroutine fstarpu_fxt_options_init (fxt_options) bind(C,name="starpu_fxt_options_init")
  1908. use iso_c_binding, only: c_ptr
  1909. type(c_ptr), value, intent(in) :: fxt_options
  1910. end subroutine fstarpu_fxt_options_init
  1911. ! void starpu_fxt_generate_trace(struct starpu_fxt_options *options);
  1912. subroutine fstarpu_fxt_generate_trace (fxt_options) bind(C,name="starpu_fxt_generate_trace")
  1913. use iso_c_binding, only: c_ptr
  1914. type(c_ptr), value, intent(in) :: fxt_options
  1915. end subroutine fstarpu_fxt_generate_trace
  1916. ! void starpu_fxt_autostart_profiling(int autostart);
  1917. subroutine fstarpu_fxt_autostart_profiling (autostart) bind(c,name="starpu_fxt_autostart_profiling")
  1918. use iso_c_binding, only: c_int
  1919. integer(c_int), value, intent(in) :: autostart
  1920. end subroutine fstarpu_fxt_autostart_profiling
  1921. ! void starpu_fxt_start_profiling(void);
  1922. subroutine fstarpu_fxt_start_profiling () bind(c,name="starpu_fxt_start_profiling")
  1923. use iso_c_binding
  1924. end subroutine fstarpu_fxt_start_profiling
  1925. ! void starpu_fxt_stop_profiling(void);
  1926. subroutine fstarpu_fxt_stop_profiling () bind(c,name="starpu_fxt_stop_profiling")
  1927. use iso_c_binding
  1928. end subroutine fstarpu_fxt_stop_profiling
  1929. ! void starpu_fxt_write_data_trace(char *filename_in);
  1930. subroutine fstarpu_fxt_write_data_trace (filename) bind(c,name="starpu_fxt_write_data_trace")
  1931. use iso_c_binding, only: c_char
  1932. character(c_char), intent(in) :: filename
  1933. end subroutine fstarpu_fxt_write_data_trace
  1934. ! void starpu_fxt_trace_user_event(unsigned long code);
  1935. subroutine fstarpu_trace_user_event (code) bind(c,name="starpu_trace_user_event")
  1936. use iso_c_binding, only: c_long
  1937. integer(c_long), value, intent(in) :: code
  1938. end subroutine fstarpu_trace_user_event
  1939. ! double starpu_timing_now(void)
  1940. function fstarpu_timing_now () bind(C,name="starpu_timing_now")
  1941. use iso_c_binding, only: c_double
  1942. real(c_double) :: fstarpu_timing_now
  1943. end function fstarpu_timing_now
  1944. end interface
  1945. contains
  1946. function or_cptrs(op1,op2)
  1947. type(c_ptr) :: or_cptrs
  1948. type(c_ptr),intent(in) :: op1,op2
  1949. integer(c_intptr_t) :: i_op1,i_op2
  1950. i_op1 = transfer(op1,0_c_intptr_t)
  1951. i_op2 = transfer(op2,0_c_intptr_t)
  1952. or_cptrs = transfer(ior(i_op1,i_op2), C_NULL_PTR)
  1953. end function
  1954. function ip_to_p(i) bind(C)
  1955. use iso_c_binding, only: c_ptr,c_intptr_t,C_NULL_PTR
  1956. type(c_ptr) :: ip_to_p
  1957. integer(c_intptr_t), value, intent(in) :: i
  1958. ip_to_p = transfer(i,C_NULL_PTR)
  1959. end function ip_to_p
  1960. function p_to_ip(p) bind(C)
  1961. use iso_c_binding, only: c_ptr,c_intptr_t
  1962. integer(c_intptr_t) :: p_to_ip
  1963. type(c_ptr), value, intent(in) :: p
  1964. p_to_ip = transfer(p,0_c_intptr_t)
  1965. end function p_to_ip
  1966. function sz_to_p(sz) bind(C)
  1967. use iso_c_binding, only: c_ptr,c_size_t,c_intptr_t
  1968. type(c_ptr) :: sz_to_p
  1969. integer(c_size_t), value, intent(in) :: sz
  1970. sz_to_p = ip_to_p(int(sz,kind=c_intptr_t))
  1971. end function sz_to_p
  1972. function fstarpu_init (conf) bind(C)
  1973. use iso_c_binding
  1974. integer(c_int) :: fstarpu_init
  1975. type(c_ptr), value, intent(in) :: conf
  1976. real(c_double) :: FSTARPU_SZ_C_DOUBLE_dummy
  1977. real(c_float) :: FSTARPU_SZ_C_FLOAT_dummy
  1978. character(c_char) :: FSTARPU_SZ_C_CHAR_dummy
  1979. integer(c_int) :: FSTARPU_SZ_C_INT_dummy
  1980. integer(c_intptr_t) :: FSTARPU_SZ_C_INTPTR_T_dummy
  1981. type(c_ptr) :: FSTARPU_SZ_C_PTR_dummy
  1982. integer(c_size_t) :: FSTARPU_SZ_C_SIZE_T_dummy
  1983. character :: FSTARPU_SZ_CHARACTER_dummy
  1984. integer :: FSTARPU_SZ_INTEGER_dummy
  1985. integer(4) :: FSTARPU_SZ_INT4_dummy
  1986. integer(8) :: FSTARPU_SZ_INT8_dummy
  1987. real :: FSTARPU_SZ_REAL_dummy
  1988. real(4) :: FSTARPU_SZ_REAL4_dummy
  1989. real(8) :: FSTARPU_SZ_REAL8_dummy
  1990. double precision :: FSTARPU_SZ_DOUBLE_PRECISION_dummy
  1991. complex :: FSTARPU_SZ_COMPLEX_dummy
  1992. complex(4) :: FSTARPU_SZ_COMPLEX4_dummy
  1993. complex(8) :: FSTARPU_SZ_COMPLEX8_dummy
  1994. ! Note: Referencing global C constants from Fortran has
  1995. ! been found unreliable on some architectures, notably
  1996. ! on Darwin. The get_integer/get_pointer_constant
  1997. ! scheme is a workaround to that issue.
  1998. interface
  1999. ! These functions are not exported to the end user
  2000. function fstarpu_get_constant(s) bind(C)
  2001. use iso_c_binding, only: c_ptr,c_char
  2002. type(c_ptr) :: fstarpu_get_constant ! C function returns an intptr_t
  2003. character(kind=c_char) :: s
  2004. end function fstarpu_get_constant
  2005. function fstarpu_init_internal (conf) bind(C,name="starpu_init")
  2006. use iso_c_binding, only: c_ptr,c_int
  2007. integer(c_int) :: fstarpu_init_internal
  2008. type(c_ptr), value :: conf
  2009. end function fstarpu_init_internal
  2010. end interface
  2011. ! Initialize Fortran constants from C peers
  2012. FSTARPU_R = fstarpu_get_constant(C_CHAR_"FSTARPU_R"//C_NULL_CHAR)
  2013. FSTARPU_W = fstarpu_get_constant(C_CHAR_"FSTARPU_W"//C_NULL_CHAR)
  2014. FSTARPU_RW = fstarpu_get_constant(C_CHAR_"FSTARPU_RW"//C_NULL_CHAR)
  2015. FSTARPU_SCRATCH = fstarpu_get_constant(C_CHAR_"FSTARPU_SCRATCH"//C_NULL_CHAR)
  2016. FSTARPU_REDUX = fstarpu_get_constant(C_CHAR_"FSTARPU_REDUX"//C_NULL_CHAR)
  2017. FSTARPU_MPI_REDUX = fstarpu_get_constant(C_CHAR_"FSTARPU_MPI_REDUX"//C_NULL_CHAR)
  2018. FSTARPU_COMMUTE = fstarpu_get_constant(C_CHAR_"FSTARPU_COMMUTE"//C_NULL_CHAR)
  2019. FSTARPU_SSEND = fstarpu_get_constant(C_CHAR_"FSTARPU_SSEND"//C_NULL_CHAR)
  2020. FSTARPU_LOCALITY = fstarpu_get_constant(C_CHAR_"FSTARPU_LOCALITY"//C_NULL_CHAR)
  2021. FSTARPU_DATA_ARRAY = fstarpu_get_constant(C_CHAR_"FSTARPU_DATA_ARRAY"//C_NULL_CHAR)
  2022. FSTARPU_DATA_MODE_ARRAY = fstarpu_get_constant(C_CHAR_"FSTARPU_DATA_MODE_ARRAY"//C_NULL_CHAR)
  2023. FSTARPU_CL_ARGS = fstarpu_get_constant(C_CHAR_"FSTARPU_CL_ARGS"//C_NULL_CHAR)
  2024. FSTARPU_CL_ARGS_NFREE = fstarpu_get_constant(C_CHAR_"FSTARPU_CL_ARGS_NFREE"//C_NULL_CHAR)
  2025. FSTARPU_TASK_DEPS_ARRAY = fstarpu_get_constant(C_CHAR_"FSTARPU_TASK_DEPS_ARRAY"//C_NULL_CHAR)
  2026. FSTARPU_CALLBACK = fstarpu_get_constant(C_CHAR_"FSTARPU_CALLBACK"//C_NULL_CHAR)
  2027. FSTARPU_CALLBACK_WITH_ARG = fstarpu_get_constant(C_CHAR_"FSTARPU_CALLBACK_WITH_ARG"//C_NULL_CHAR)
  2028. FSTARPU_CALLBACK_WITH_ARG_NFREE = &
  2029. fstarpu_get_constant(C_CHAR_"FSTARPU_CALLBACK_WITH_ARG_NFREE"//C_NULL_CHAR)
  2030. FSTARPU_CALLBACK_ARG = fstarpu_get_constant(C_CHAR_"FSTARPU_CALLBACK_ARG"//C_NULL_CHAR)
  2031. FSTARPU_CALLBACK_ARG_NFREE = fstarpu_get_constant(C_CHAR_"FSTARPU_CALLBACK_ARG_NFREE"//C_NULL_CHAR)
  2032. FSTARPU_PROLOGUE_CALLBACK = fstarpu_get_constant(C_CHAR_"FSTARPU_PROLOGUE_CALLBACK"//C_NULL_CHAR)
  2033. FSTARPU_PROLOGUE_CALLBACK_ARG = fstarpu_get_constant(C_CHAR_"FSTARPU_PROLOGUE_CALLBACK_ARG"//C_NULL_CHAR)
  2034. FSTARPU_PROLOGUE_CALLBACK_ARG_NFREE = &
  2035. fstarpu_get_constant(C_CHAR_"FSTARPU_PROLOGUE_CALLBACK_ARG_NFREE"//C_NULL_CHAR)
  2036. FSTARPU_PROLOGUE_CALLBACK_POP = fstarpu_get_constant(C_CHAR_"FSTARPU_PROLOGUE_CALLBACK_POP"//C_NULL_CHAR)
  2037. FSTARPU_PROLOGUE_CALLBACK_POP_ARG = &
  2038. fstarpu_get_constant(C_CHAR_"FSTARPU_PROLOGUE_CALLBACK_POP_ARG"//C_NULL_CHAR)
  2039. FSTARPU_PROLOGUE_CALLBACK_POP_ARG_NFREE = &
  2040. fstarpu_get_constant(C_CHAR_"FSTARPU_PROLOGUE_CALLBACK_POP_ARG_NFREE"//C_NULL_CHAR)
  2041. FSTARPU_PRIORITY = fstarpu_get_constant(C_CHAR_"FSTARPU_PRIORITY"//C_NULL_CHAR)
  2042. FSTARPU_EXECUTE_ON_NODE = fstarpu_get_constant(C_CHAR_"FSTARPU_EXECUTE_ON_NODE"//C_NULL_CHAR)
  2043. FSTARPU_EXECUTE_ON_DATA = fstarpu_get_constant(C_CHAR_"FSTARPU_EXECUTE_ON_DATA"//C_NULL_CHAR)
  2044. FSTARPU_EXECUTE_ON_WORKER = fstarpu_get_constant(C_CHAR_"FSTARPU_EXECUTE_ON_WORKER"//C_NULL_CHAR)
  2045. FSTARPU_WORKER_ORDER = fstarpu_get_constant(C_CHAR_"FSTARPU_WORKER_ORDER"//C_NULL_CHAR)
  2046. FSTARPU_EXECUTE_WHERE = fstarpu_get_constant(C_CHAR_"FSTARPU_EXECUTE_WHERE"//C_NULL_CHAR)
  2047. FSTARPU_HYPERVISOR_TAG = fstarpu_get_constant(C_CHAR_"FSTARPU_HYPERVISOR_TAG"//C_NULL_CHAR)
  2048. FSTARPU_POSSIBLY_PARALLEL = fstarpu_get_constant(C_CHAR_"FSTARPU_POSSIBLY_PARALLEL"//C_NULL_CHAR)
  2049. FSTARPU_FLOPS = fstarpu_get_constant(C_CHAR_"FSTARPU_FLOPS"//C_NULL_CHAR)
  2050. FSTARPU_TAG = fstarpu_get_constant(C_CHAR_"FSTARPU_TAG"//C_NULL_CHAR)
  2051. FSTARPU_TAG_ONLY = fstarpu_get_constant(C_CHAR_"FSTARPU_TAG_ONLY"//C_NULL_CHAR)
  2052. FSTARPU_NAME = fstarpu_get_constant(C_CHAR_"FSTARPU_NAME"//C_NULL_CHAR)
  2053. FSTARPU_NODE_SELECTION_POLICY = fstarpu_get_constant(C_CHAR_"FSTARPU_NODE_SELECTION_POLICY"//C_NULL_CHAR)
  2054. FSTARPU_TASK_SCHED_DATA = fstarpu_get_constant(C_CHAR_"FSTARPU_TASK_SCHED_DATA"//C_NULL_CHAR)
  2055. FSTARPU_VALUE = fstarpu_get_constant(C_CHAR_"FSTARPU_VALUE"//C_NULL_CHAR)
  2056. FSTARPU_SCHED_CTX = fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX"//C_NULL_CHAR)
  2057. FSTARPU_CPU_WORKER = fstarpu_get_constant(C_CHAR_"FSTARPU_CPU_WORKER"//C_NULL_CHAR)
  2058. FSTARPU_CUDA_WORKER = fstarpu_get_constant(C_CHAR_"FSTARPU_CUDA_WORKER"//C_NULL_CHAR)
  2059. FSTARPU_OPENCL_WORKER = fstarpu_get_constant(C_CHAR_"FSTARPU_OPENCL_WORKER"//C_NULL_CHAR)
  2060. FSTARPU_ANY_WORKER = fstarpu_get_constant(C_CHAR_"FSTARPU_ANY_WORKER"//C_NULL_CHAR)
  2061. FSTARPU_NMAXBUFS = int(p_to_ip(fstarpu_get_constant(C_CHAR_"FSTARPU_NMAXBUFS"//C_NULL_CHAR)),c_int)
  2062. FSTARPU_SCHED_CTX_POLICY_NAME = &
  2063. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_POLICY_NAME"//C_NULL_CHAR)
  2064. FSTARPU_SCHED_CTX_POLICY_STRUCT = &
  2065. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_POLICY_STRUCT"//C_NULL_CHAR)
  2066. FSTARPU_SCHED_CTX_POLICY_MIN_PRIO = &
  2067. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_POLICY_MIN_PRIO"//C_NULL_CHAR)
  2068. FSTARPU_SCHED_CTX_POLICY_MAX_PRIO = &
  2069. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_POLICY_MAX_PRIO"//C_NULL_CHAR)
  2070. FSTARPU_SCHED_CTX_HIERARCHY_LEVEL = &
  2071. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_HIERARCHY_LEVEL"//C_NULL_CHAR)
  2072. FSTARPU_SCHED_CTX_NESTED = &
  2073. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_NESTED"//C_NULL_CHAR)
  2074. FSTARPU_SCHED_CTX_AWAKE_WORKERS = &
  2075. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_AWAKE_WORKERS"//C_NULL_CHAR)
  2076. FSTARPU_SCHED_CTX_POLICY_INIT = &
  2077. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_POLICY_INIT"//C_NULL_CHAR)
  2078. FSTARPU_SCHED_CTX_USER_DATA = &
  2079. fstarpu_get_constant(C_CHAR_"FSTARPU_SCHED_CTX_USER_DATA"//C_NULL_CHAR)
  2080. FSTARPU_NOWHERE = &
  2081. fstarpu_get_constant(C_CHAR_"FSTARPU_NOWHERE"//C_NULL_CHAR)
  2082. FSTARPU_CPU = &
  2083. fstarpu_get_constant(C_CHAR_"FSTARPU_CPU"//C_NULL_CHAR)
  2084. FSTARPU_CUDA = &
  2085. fstarpu_get_constant(C_CHAR_"FSTARPU_CUDA"//C_NULL_CHAR)
  2086. FSTARPU_OPENCL = &
  2087. fstarpu_get_constant(C_CHAR_"FSTARPU_OPENCL"//C_NULL_CHAR)
  2088. FSTARPU_CODELET_SIMGRID_EXECUTE = &
  2089. fstarpu_get_constant(C_CHAR_"FSTARPU_CODELET_SIMGRID_EXECUTE"//C_NULL_CHAR)
  2090. FSTARPU_CODELET_SIMGRID_EXECUTE_AND_INJECT = &
  2091. fstarpu_get_constant(C_CHAR_"FSTARPU_CODELET_SIMGRID_EXECUTE_AND_INJECT"//C_NULL_CHAR)
  2092. FSTARPU_CUDA_ASYNC = &
  2093. fstarpu_get_constant(C_CHAR_"FSTARPU_CUDA_ASYNC"//C_NULL_CHAR)
  2094. FSTARPU_OPENCL_ASYNC = &
  2095. fstarpu_get_constant(C_CHAR_"FSTARPU_OPENCL_ASYNC"//C_NULL_CHAR)
  2096. !FSTARPU_PER_WORKER = &
  2097. ! fstarpu_get_constant(C_CHAR_"FSTARPU_PER_WORKER"//C_NULL_CHAR)
  2098. !FSTARPU_PER_ARCH = &
  2099. ! fstarpu_get_constant(C_CHAR_"FSTARPU_PER_ARCH"//C_NULL_CHAR)
  2100. !FSTARPU_PER_COMMON = &
  2101. ! fstarpu_get_constant(C_CHAR_"FSTARPU_PER_COMMON"//C_NULL_CHAR)
  2102. FSTARPU_HISTORY_BASED = &
  2103. fstarpu_get_constant(C_CHAR_"FSTARPU_HISTORY_BASED"//C_NULL_CHAR)
  2104. FSTARPU_REGRESSION_BASED = &
  2105. fstarpu_get_constant(C_CHAR_"FSTARPU_REGRESSION_BASED"//C_NULL_CHAR)
  2106. FSTARPU_NL_REGRESSION_BASED = &
  2107. fstarpu_get_constant(C_CHAR_"FSTARPU_NL_REGRESSION_BASED"//C_NULL_CHAR)
  2108. FSTARPU_MULTIPLE_REGRESSION_BASED = &
  2109. fstarpu_get_constant(C_CHAR_"FSTARPU_MULTIPLE_REGRESSION_BASED"//C_NULL_CHAR)
  2110. ! Initialize size constants as 'c_ptr'
  2111. FSTARPU_SZ_C_DOUBLE = sz_to_p(c_sizeof(FSTARPU_SZ_C_DOUBLE_dummy))
  2112. FSTARPU_SZ_C_FLOAT = sz_to_p(c_sizeof(FSTARPU_SZ_C_FLOAT_dummy))
  2113. FSTARPU_SZ_C_CHAR = sz_to_p(c_sizeof(FSTARPU_SZ_C_CHAR_dummy))
  2114. FSTARPU_SZ_C_INT = sz_to_p(c_sizeof(FSTARPU_SZ_C_INT_dummy))
  2115. FSTARPU_SZ_C_INTPTR_T = sz_to_p(c_sizeof(FSTARPU_SZ_C_INTPTR_T_dummy))
  2116. FSTARPU_SZ_C_PTR = sz_to_p(c_sizeof(FSTARPU_SZ_C_PTR_dummy))
  2117. FSTARPU_SZ_C_SIZE_T = sz_to_p(c_sizeof(FSTARPU_SZ_C_SIZE_T_dummy))
  2118. FSTARPU_SZ_CHARACTER = sz_to_p(c_sizeof(FSTARPU_SZ_CHARACTER_dummy))
  2119. FSTARPU_SZ_INTEGER = sz_to_p(c_sizeof(FSTARPU_SZ_INTEGER_dummy))
  2120. FSTARPU_SZ_INT4 = sz_to_p(c_sizeof(FSTARPU_SZ_INT4_dummy))
  2121. FSTARPU_SZ_INT8 = sz_to_p(c_sizeof(FSTARPU_SZ_INT8_dummy))
  2122. FSTARPU_SZ_REAL = sz_to_p(c_sizeof(FSTARPU_SZ_REAL_dummy))
  2123. FSTARPU_SZ_REAL4 = sz_to_p(c_sizeof(FSTARPU_SZ_REAL4_dummy))
  2124. FSTARPU_SZ_REAL8 = sz_to_p(c_sizeof(FSTARPU_SZ_REAL8_dummy))
  2125. FSTARPU_SZ_DOUBLE_PRECISION = sz_to_p(c_sizeof(FSTARPU_SZ_DOUBLE_PRECISION_dummy))
  2126. FSTARPU_SZ_COMPLEX = sz_to_p(c_sizeof(FSTARPU_SZ_COMPLEX_dummy))
  2127. FSTARPU_SZ_COMPLEX4 = sz_to_p(c_sizeof(FSTARPU_SZ_COMPLEX4_dummy))
  2128. FSTARPU_SZ_COMPLEX8 = sz_to_p(c_sizeof(FSTARPU_SZ_COMPLEX8_dummy))
  2129. ! Initialize StarPU
  2130. if (c_associated(conf)) then
  2131. fstarpu_init = fstarpu_init_internal(conf)
  2132. else
  2133. fstarpu_init = fstarpu_init_internal(C_NULL_PTR)
  2134. end if
  2135. end function fstarpu_init
  2136. function fstarpu_csizet_to_cptr(i) bind(C)
  2137. use iso_c_binding
  2138. type(c_ptr) :: fstarpu_csizet_to_cptr
  2139. integer(c_size_t) :: i
  2140. fstarpu_csizet_to_cptr = transfer(int(i,kind=c_intptr_t),C_NULL_PTR)
  2141. end function fstarpu_csizet_to_cptr
  2142. function fstarpu_int_to_cptr(i) bind(C)
  2143. use iso_c_binding
  2144. type(c_ptr) :: fstarpu_int_to_cptr
  2145. integer(c_int) :: i
  2146. fstarpu_int_to_cptr = transfer(int(i,kind=c_intptr_t),C_NULL_PTR)
  2147. end function fstarpu_int_to_cptr
  2148. function fstarpu_long_to_cptr(i) bind(C)
  2149. use iso_c_binding
  2150. type(c_ptr) :: fstarpu_long_to_cptr
  2151. integer(c_long) :: i
  2152. fstarpu_long_to_cptr = transfer(int(i,kind=c_intptr_t),C_NULL_PTR)
  2153. end function fstarpu_long_to_cptr
  2154. ! Note: do not add binding declarations here in 'CONTAINS'
  2155. ! section, because the compiler generates empty functions for
  2156. ! them.
  2157. ! Instead, put binding declarations in the 'INTERFACE' section
  2158. ! above.
  2159. end module fstarpu_mod