fstarpu_mod.f90 141 KB

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