fstarpu_mod.f90 155 KB

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