| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970 | /* * This file is part of the StarPU Handbook. * Copyright (C) 2014 INRIA * See the file version.doxy for copying conditions. *//*! \defgroup API_OpenMP_Runtime_Support OpenMP Runtime Support\brief This section describes the interface provided for implementing OpenMP runtimes on top of StarPU.\struct starpu_omp_lock_t\ingroup API_OpenMP_Runtime_SupportOpaque Simple Lock object (\ref SimpleLock) for inter-task synchronization operations.\sa starpu_omp_init_lock()\sa starpu_omp_destroy_lock()\sa starpu_omp_set_lock()\sa starpu_omp_unset_lock()\sa starpu_omp_test_lock()\var starpu_omp_lock_t::internalIs an opaque pointer for internal use.\struct starpu_omp_nest_lock_t\ingroup API_OpenMP_Runtime_SupportOpaque Nestable Lock object (\ref NestableLock) for inter-task synchronization operations.\sa starpu_omp_init_nest_lock()\sa starpu_omp_destroy_nest_lock()\sa starpu_omp_set_nest_lock()\sa starpu_omp_unset_nest_lock()\sa starpu_omp_test_nest_lock()\var starpu_omp_nest_lock_t::internalIs an opaque pointer for internal use.\enum starpu_omp_sched_value\ingroup API_OpenMP_Runtime_SupportSet of constants for selecting the for loop iteration scheduling algorithm(\ref OMPFor) as defined by the OpenMP specification.\var starpu_omp_sched_value::starpu_omp_sched_undefined\ingroup API_OpenMP_Runtime_SupportUndefined iteration scheduling algorithm.\var starpu_omp_sched_value::starpu_omp_sched_static\ingroup API_OpenMP_Runtime_Support\b Static iteration scheduling algorithm.\var starpu_omp_sched_value::starpu_omp_sched_dynamic\ingroup API_OpenMP_Runtime_Support\b Dynamic iteration scheduling algorithm.\var starpu_omp_sched_value::starpu_omp_sched_guided\ingroup API_OpenMP_Runtime_Support\b Guided iteration scheduling algorithm.\var starpu_omp_sched_value::starpu_omp_sched_auto\ingroup API_OpenMP_Runtime_Support\b Automatically choosen iteration scheduling algorithm.\var starpu_omp_sched_value::starpu_omp_sched_runtime\ingroup API_OpenMP_Runtime_SupportChoice of iteration scheduling algorithm deferred at \b runtime.\sa starpu_omp_for()\sa starpu_omp_for_inline_first()\sa starpu_omp_for_inline_next()\sa starpu_omp_for_alt()\sa starpu_omp_for_inline_first_alt()\sa starpu_omp_for_inline_next_alt()\enum starpu_omp_proc_bind_value\ingroup API_OpenMP_Runtime_SupportSet of constants for selecting the processor binding method, as defined in theOpenMP specification.\var starpu_omp_proc_bind_value::starpu_omp_proc_bind_undefined\ingroup API_OpenMP_Runtime_SupportUndefined processor binding method.\var starpu_omp_proc_bind_value::starpu_omp_proc_bind_false\ingroup API_OpenMP_Runtime_SupportTeam threads may be moved between places at any time.\var starpu_omp_proc_bind_value::starpu_omp_proc_bind_true\ingroup API_OpenMP_Runtime_SupportTeam threads may not be moved between places.\var starpu_omp_proc_bind_value::starpu_omp_proc_bind_master\ingroup API_OpenMP_Runtime_SupportAssign every thread in the team to the same place as the \b master thread.\var starpu_omp_proc_bind_value::starpu_omp_proc_bind_close\ingroup API_OpenMP_Runtime_SupportAssign every thread in the team to a place \b close to the parent thread.\var starpu_omp_proc_bind_value::starpu_omp_proc_bind_spread\ingroup API_OpenMP_Runtime_SupportAssign team threads as a sparse distribution over the selected places.\sa starpu_omp_get_proc_bind()\struct starpu_omp_parallel_region_attr\ingroup API_OpenMP_Runtime_SupportSet of attributes used for creating a new parallel region.\sa starpu_omp_parallel_region()\var struct starpu_codelet starpu_omp_parallel_region_attr::clIs a ::starpu_codelet (\ref API_Codelet_And_Tasks) to use for the parallel regionimplicit tasks. The codelet must provide a CPU implementation function.\var starpu_data_handle_t *starpu_omp_parallel_region_attr::handlesIs an array of zero or more ::starpu_data_handle_t data handle to be passed tothe parallel region implicit tasks.\var void *starpu_omp_parallel_region_attr::cl_argIs an optional pointer to an inline argument to be passed to the region implicit tasks.\var size_t starpu_omp_parallel_region_attr::cl_arg_sizeIs the size of the optional inline argument to be passed to the region implicit tasks, or 0 if unused.\var unsigned starpu_omp_parallel_region_attr::cl_arg_freeIs a boolean indicating whether the optional inline argument should be automatically freed (true), or not (false).\var int starpu_omp_parallel_region_attr::if_clauseIs a boolean indicating whether the \b if clause of the corresponding <c>pragmaomp parallel</c> is true or false.\var int starpu_omp_parallel_region_attr::num_threadsIs an integer indicating the requested number of threads in the team of thenewly created parallel region, or 0 to let the runtime choose the number ofthreads alone. This attribute may be ignored by the runtime system if therequested number of threads is higher than the number of threads that theruntime can create.\struct starpu_omp_task_region_attr\ingroup API_OpenMP_Runtime_SupportSet of attributes used for creating a new task region.\sa starpu_omp_task_region()\var struct starpu_codelet starpu_omp_task_region_attr::clIs a ::starpu_codelet (\ref API_Codelet_And_Tasks) to use for the task regionexplicit task. The codelet must provide a CPU implementation function or anaccelerator implementation for offloaded target regions.\var starpu_data_handle_t *starpu_omp_task_region_attr::handlesIs an array of zero or more ::starpu_data_handle_t data handle to be passed tothe task region explicit tasks.\var void *starpu_omp_task_region_attr::cl_argIs an optional pointer to an inline argument to be passed to the region implicit tasks.\var size_t starpu_omp_task_region_attr::cl_arg_sizeIs the size of the optional inline argument to be passed to the region implicittasks, or 0 if unused.\var unsigned starpu_omp_task_region_attr::cl_arg_freeIs a boolean indicating whether the optional inline argument should beautomatically freed (true), or not (false).\var int starpu_omp_task_region_attr::if_clauseIs a boolean indicating whether the \b if clause of the corresponding <c>pragmaomp task</c> is true or false.\var int starpu_omp_task_region_attr::final_clauseIs a boolean indicating whether the \b final clause of the corresponding <c>pragmaomp task</c> is true or false.\var int starpu_omp_task_region_attr::untied_clauseIs a boolean indicating whether the \b untied clause of the corresponding <c>pragmaomp task</c> is true or false.\var int starpu_omp_task_region_attr::mergeable_clauseIs a boolean indicating whether the \b mergeable clause of the corresponding <c>pragmaomp task</c> is true or false.@name Initialisation\ingroup API_OpenMP_Runtime_Support\def STARPU_OPENMP\ingroup API_OpenMP_Runtime_SupportThis macro is defined when StarPU has been installed with OpenMP Runtimesupport. It should be used in your code to detect the availability ofthe runtime support for OpenMP.\fn int starpu_omp_init(void)\ingroup API_OpenMP_Runtime_SupportInitializes StarPU and its OpenMP Runtime support.\fn void starpu_omp_shutdown(void)\ingroup API_OpenMP_Runtime_SupportShutdown StarPU and its OpenMP Runtime support.@name Parallel\anchor ORS_Parallel\ingroup API_OpenMP_Runtime_Support\fn void starpu_omp_parallel_region(const struct starpu_omp_parallel_region_attr *attr)\ingroup API_OpenMP_Runtime_SupportGenerates and launch an OpenMP parallel region and return after itscompletion. \p attr specifies the attributes for the generated parallel region.If this function is called from inside another, generating, parallel region, thegenerated parallel region is nested within the generating parallel region.This function can be used to implement <c>\#pragma omp parallel</c>.\fn void starpu_omp_master(void (*f)(void *arg), void *arg)\ingroup API_OpenMP_Runtime_SupportExecutes a function only on the master thread of the OpenMPparallel region it is called from. When called from a thread that is not themaster of the parallel region it is called from, this function does nothing. \pf is the function to be called. \p arg is an argument passed to function \p f.This function can be used to implement <c>\#pragma omp master</c>.\fn int starpu_omp_master_inline(void)\ingroup API_OpenMP_Runtime_SupportDetermines whether the calling thread is the master of the OpenMP parallel regionit is called from or not.This function can be used to implement <c>\#pragma omp master</c> without codeoutlining.\return <c>!0</c> if called by the region's master thread.\return <c>0</c> if not called by the region's master thread.@name Synchronization\anchor ORS_Synchronization\ingroup API_OpenMP_Runtime_Support\fn void starpu_omp_barrier(void)\ingroup API_OpenMP_Runtime_SupportWaits until each participating thread of the innermost OpenMP parallel regionhas reached the barrier and each explicit OpenMP task bound to this region hascompleted its execution.This function can be used to implement <c>\#pragma omp barrier</c>.\fn void starpu_omp_critical(void (*f)(void *arg), void *arg, const char *name)\ingroup API_OpenMP_Runtime_SupportWaits until no other thread is executing within the context of the selectedcritical section, then proceeds to the exclusive execution of a function withinthe critical section. \p f is the function to be executed in the criticalsection. \p arg is an argument passed to function \p f. \p name is the name ofthe selected critical section. If <c>name == NULL</c>, the selected criticalsection is the unique anonymous critical section.This function can be used to implement <c>\#pragma omp critical</c>.\fn void starpu_omp_critical_inline_begin(const char *name)\ingroup API_OpenMP_Runtime_SupportWaits until execution can proceed exclusively within the context of theselected critical section. \p name is the name of the selected criticalsection. If <c>name == NULL</c>, the selected critical section is the uniqueanonymous critical section.This function together with #starpu_omp_critical_inline_end can be used toimplement <c>\#pragma omp critical</c> without code outlining.\fn void starpu_omp_critical_inline_end(const char *name)\ingroup API_OpenMP_Runtime_SupportEnds the exclusive execution within the context of the selected criticalsection. \p name is the name of the selected critical section. If<c>name==NULL</c>, the selected critical section is the unique anonymouscritical section.This function together with #starpu_omp_critical_inline_begin can be used toimplement <c>\#pragma omp critical</c> without code outlining.@name Worksharing\anchor ORS_Worksharing\ingroup API_OpenMP_Runtime_Support\fn void starpu_omp_single(void (*f)(void *arg), void *arg, int nowait)\ingroup API_OpenMP_Runtime_SupportEnsures that a single participating thread of the innermost OpenMP parallelregion executes a function. \p f is the function to be executed by a singlethread. \p arg is an argument passed to function \p f. \p nowait is a flagindicating whether an implicit barrier is requested after the single section(<c>nowait==0</c>) or not (<c>nowait==!0</c>).This function can be used to implement <c>\#pragma omp single</c>.\fn int starpu_omp_single_inline(void)\ingroup API_OpenMP_Runtime_SupportDecides whether the current thread is elected to run the following singlesection among the participating threads of the innermost OpenMP parallelregion.This function can be used to implement <c>\#pragma omp single</c> without codeoutlining.\return <c>!0</c> if the calling thread has won the election.\return <c>0</c> if the calling thread has lost the election.\fn void starpu_omp_single_copyprivate(void (*f)(void *arg, void *data, unsigned long long data_size), void *arg, void *data, unsigned long long data_size)\ingroup API_OpenMP_Runtime_SupportThis function executes \p f on a single task of the current parallel regiontask, and then broadcast the contents of the memory block pointed by thecopyprivate pointer \p data and of size \p data_size to the corresponding \pdata pointed memory blocks of all the other participating region tasks. Thisfunction can be used to implement <c>\#pragma omp single</c> with a copyprivateclause.\sa starpu_omp_single_copyprivate_inline\sa starpu_omp_single_copyprivate_inline_begin\sa starpu_omp_single_copyprivate_inline_end\fn void *starpu_omp_single_copyprivate_inline_begin(void *data)\ingroup API_OpenMP_Runtime_SupportThis function elects one task among the tasks of the current parallel regiontask to execute the following single section, and then broadcast thecopyprivate pointer \p data to all the other participating region tasks. Thisfunction can be used to implement <c>\#pragma omp single</c> with a copyprivateclause without code outlining.\sa starpu_omp_single_copyprivate_inline\sa starpu_omp_single_copyprivate_inline_end\fn void starpu_omp_single_copyprivate_inline_end(void)\ingroup API_OpenMP_Runtime_SupportThis function completes the execution of a single section and returns thebroadcasted copyprivate pointer for tasks that lost the election and NULL forthe task that won the election. This function can be used to implement<c>\#pragma omp single</c> with a copyprivate clause without code outlining.\return the copyprivate pointer for tasks that lost the election and therefore did not execute the code of the single section.\return NULL for the task that won the election and executed the code of the single section.\sa starpu_omp_single_copyprivate_inline\sa starpu_omp_single_copyprivate_inline_begin\fn void starpu_omp_for(void (*f)(unsigned long long _first_i, unsigned long long _nb_i, void *arg), void *arg, unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, int nowait)\ingroup API_OpenMP_Runtime_SupportExecutes a parallel loop together with the other threads participating to theinnermost parallel region. \p f is the function to be executed iteratively. \parg is an argument passed to function \p f. \p nb_iterations is the number ofiterations to be performed by the parallel loop. \p chunk is the number ofconsecutive iterations that should be affected to the same thread whenscheduling the loop workshares, it follows the semantics of the \c modifierargument in OpenMP <c>\#pragma omp for</c> specification. \p schedule is thescheduling mode according to the OpenMP specification. \p ordered is a flagindicating whether the loop region may contain an ordered section(<c>ordered==!0</c>) or not (<c>ordered==0</c>). \p nowait is a flagindicating whether an implicit barrier is requested after the for section(<c>nowait==0</c>) or not (<c>nowait==!0</c>).The function \p f will be called with arguments \p _first_i, the first iterationto perform, \p _nb_i, the number of consecutive iterations to perform beforereturning, \p arg, the free \p arg argument.This function can be used to implement <c>\#pragma omp for</c>.\fn int starpu_omp_for_inline_first(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_first_i, unsigned long long *_nb_i)\ingroup API_OpenMP_Runtime_SupportDecides whether the current thread should start to execute a parallel loopsection. See #starpu_omp_for for the argument description.This function together with #starpu_omp_for_inline_next can be used toimplement <c>\#pragma omp for</c> without code outlining.\return <c>!0</c> if the calling thread participates to the loop region andshould execute a first chunk of iterations. In that case, \p *_first_i will beset to the first iteration of the chunk to perform and \p *_nb_i will be set tothe number of iterations of the chunk to perform.\return <c>0</c> if the calling thread does not participate to the loop regionbecause all the available iterations have been affected to the other threads ofthe parallel region.\sa starpu_omp_for\fn int starpu_omp_for_inline_next(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_first_i, unsigned long long *_nb_i)\ingroup API_OpenMP_Runtime_SupportDecides whether the current thread should continue to execute a parallel loopsection. See #starpu_omp_for for the argument description.This function together with #starpu_omp_for_inline_first can be used toimplement <c>\#pragma omp for</c> without code outlining.\return <c>!0</c> if the calling thread should execute a next chunk ofiterations. In that case, \p *_first_i will be set to the first iteration of thechunk to perform and \p *_nb_i will be set to the number of iterations of thechunk to perform.\return <c>0</c> if the calling thread does not participate anymore to the loopregion because all the available iterations have been affected to the otherthreads of the parallel region.\sa starpu_omp_for\fn void starpu_omp_for_alt(void (*f)(unsigned long long _begin_i, unsigned long long _end_i, void *arg), void *arg, unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, int nowait)\ingroup API_OpenMP_Runtime_SupportAlternative implementation of a parallel loop. This function differs from#starpu_omp_for in the expected arguments of the loop function \c f.The function \p f will be called with arguments \p _begin_i, the first iterationto perform, \p _end_i, the first iteration not to perform beforereturning, \p arg, the free \p arg argument.This function can be used to implement <c>\#pragma omp for</c>.\sa starpu_omp_for\fn int starpu_omp_for_inline_first_alt(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_begin_i, unsigned long long *_end_i)\ingroup API_OpenMP_Runtime_SupportInline version of the alternative implementation of a parallel loop.This function together with #starpu_omp_for_inline_next_alt can be used toimplement <c>\#pragma omp for</c> without code outlining.\sa starpu_omp_for\sa starpu_omp_for_alt\sa starpu_omp_for_inline_first\fn int starpu_omp_for_inline_next_alt(unsigned long long nb_iterations, unsigned long long chunk, int schedule, int ordered, unsigned long long *_begin_i, unsigned long long *_end_i)\ingroup API_OpenMP_Runtime_SupportInline version of the alternative implementation of a parallel loop.This function together with #starpu_omp_for_inline_first_alt can be used toimplement <c>\#pragma omp for</c> without code outlining.\sa starpu_omp_for\sa starpu_omp_for_alt\sa starpu_omp_for_inline_next\fn void starpu_omp_ordered(void (*f)(void *arg), void *arg)\ingroup API_OpenMP_Runtime_SupportEnsures that a function is sequentially executed once for each iteration inorder within a parallel loop, by the thread that own the iteration. \p f is thefunction to be executed by the thread that own the current iteration. \p arg isan argument passed to function \p f.This function can be used to implement <c>\#pragma omp ordered</c>.\fn void starpu_omp_ordered_inline_begin(void)\ingroup API_OpenMP_Runtime_SupportWaits until all the iterations of a parallel loop below the iteration owned bythe current thread have been executed.This function together with #starpu_omp_ordered_inline_end can be used toimplement <c>\#pragma omp ordered</c> without code code outlining.\fn void starpu_omp_ordered_inline_end(void)\ingroup API_OpenMP_Runtime_SupportNotifies that the ordered section for the current iteration has been completed.This function together with #starpu_omp_ordered_inline_begin can be used toimplement <c>\#pragma omp ordered</c> without code code outlining.\fn void starpu_omp_sections(unsigned long long nb_sections, void (**section_f)(void *arg), void **section_arg, int nowait)\ingroup API_OpenMP_Runtime_SupportEnsures that each function of a given array of functions is executed by one andonly one thread. \p nb_sections is the number of functions in the array \psection_f. \p section_f is the array of functions to be executed as sections. \psection_arg is an array of arguments to be passed to the corresponding function.\p nowait is a flag indicating whether an implicit barrier is requested afterthe execution of all the sections (<c>nowait==0</c>) or not (<c>nowait==!0</c>).This function can be used to implement <c>\#pragma omp sections</c> and <c>\#pragma omp section</c>.\fn void starpu_omp_sections_combined(unsigned long long nb_sections, void (*section_f)(unsigned long long section_num, void *arg), void *section_arg, int nowait)\ingroup API_OpenMP_Runtime_SupportAlternative implementation of sections. This function differs from#starpu_omp_sections in that all the sections are combined within a singlefunction in this version. \p section_f is the function implementing the combinedsections.The function \p section_f will be called with arguments \p section_num, thesection number to be executed, \p arg, the entry of \p section_arg correspondingto this section.This function can be used to implement <c>\#pragma omp sections</c> and <c>\#pragma omp section</c>.\sa starpu_omp_sections@name Task\anchor ORS_Task\ingroup API_OpenMP_Runtime_Support\fn void starpu_omp_task_region(const struct starpu_omp_task_region_attr *attr)\ingroup API_OpenMP_Runtime_SupportGenerates an explicit child task. The execution of the generated task isasynchronous with respect to the calling code unless specified otherwise.\p attr specifies the attributes for the generated task region.This function can be used to implement <c>\#pragma omp task</c>.\fn void starpu_omp_taskwait(void)\ingroup API_OpenMP_Runtime_SupportWaits for the completion of the tasks generated by the current task. Thisfunction does not wait for the descendants of the tasks generated by the currenttask.This function can be used to implement <c>\#pragma omp taskwait</c>.\fn void starpu_omp_taskgroup(void (*f)(void *arg), void *arg)\ingroup API_OpenMP_Runtime_SupportLaunches a function and wait for the completion of every descendant taskgenerated during the execution of the function.This function can be used to implement <c>\#pragma omp taskgroup</c>.\sa starpu_omp_taskgroup_inline_begin\sa starpu_omp_taskgroup_inline_end\fn void starpu_omp_taskgroup_inline_begin(void)\ingroup API_OpenMP_Runtime_SupportLaunches a function and gets ready to wait for the completion of every descendant taskgenerated during the dynamic scope of the taskgroup.This function can be used to implement <c>\#pragma omp taskgroup</c> without code outlining.\sa starpu_omp_taskgroup\sa starpu_omp_taskgroup_inline_end\fn void starpu_omp_taskgroup_inline_end(void)\ingroup API_OpenMP_Runtime_SupportWaits for the completion of every descendant taskgenerated during the dynamic scope of the taskgroup.This function can be used to implement <c>\#pragma omp taskgroup</c> without code outlining.\sa starpu_omp_taskgroup\sa starpu_omp_taskgroup_inline_begin@name API\anchor ORS_API\ingroup API_OpenMP_Runtime_Support\fn void starpu_omp_set_num_threads(int threads)\ingroup API_OpenMP_Runtime_SupportThis function sets ICVS nthreads_var for the parallel regions to be createdwith the current region.Note: The StarPU OpenMP runtime support currently ignoresthis setting for nested parallel regions.\sa starpu_omp_get_num_threads\sa starpu_omp_get_thread_num\sa starpu_omp_get_max_threads\sa starpu_omp_get_num_procs\fn int starpu_omp_get_num_threads()\ingroup API_OpenMP_Runtime_SupportThis function returns the number of threads of the current region.\return the number of threads of the current region.\sa starpu_omp_set_num_threads\sa starpu_omp_get_thread_num\sa starpu_omp_get_max_threads\sa starpu_omp_get_num_procs\fn int starpu_omp_get_thread_num()\ingroup API_OpenMP_Runtime_SupportThis function returns the rank of the current thread among the threadsof the current region.\return the rank of the current thread in the current region.\sa starpu_omp_set_num_threads\sa starpu_omp_get_num_threads\sa starpu_omp_get_max_threads\sa starpu_omp_get_num_procs\fn int starpu_omp_get_max_threads()\ingroup API_OpenMP_Runtime_SupportThis function returns the maximum number of threads that can be used tocreate a region from the current region.\return the maximum number of threads that can be used to create a region from the current region.\sa starpu_omp_set_num_threads\sa starpu_omp_get_num_threads\sa starpu_omp_get_thread_num\sa starpu_omp_get_num_procs\fn int starpu_omp_get_num_procs(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the number of StarPU CPU workers.\return the number of StarPU CPU workers.\sa starpu_omp_set_num_threads\sa starpu_omp_get_num_threads\sa starpu_omp_get_thread_num\sa starpu_omp_get_max_threads\fn int starpu_omp_in_parallel(void)\ingroup API_OpenMP_Runtime_SupportThis function returns whether it is called from the scope of a parallel region or not.\return <c>!0</c> if called from a parallel region scope.\return <c>0</c> otherwise.\fn void starpu_omp_set_dynamic(int dynamic_threads)\ingroup API_OpenMP_Runtime_SupportThis function enables (1) or disables (0) dynamically adjusting the number of parallel threads.Note: The StarPU OpenMP runtime support currently ignores the argument of this function.\sa starpu_omp_get_dynamic\fn int starpu_omp_get_dynamic(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the state of dynamic thread number adjustment.\return <c>!0</c> if dynamic thread number adjustment is enabled.\return <c>0</c> otherwise.\sa starpu_omp_set_dynamic\fn void starpu_omp_set_nested(int nested)\ingroup API_OpenMP_Runtime_SupportThis function enables (1) or disables (0) nested parallel regions.Note: The StarPU OpenMP runtime support currently ignores the argument of this function.\sa starpu_omp_get_nested\sa starpu_omp_get_max_active_levels\sa starpu_omp_set_max_active_levels\sa starpu_omp_get_level\sa starpu_omp_get_active_level\fn int starpu_omp_get_nested(void)\ingroup API_OpenMP_Runtime_SupportThis function returns whether nested parallel sections are enabled or not.\return <c>!0</c> if nested parallel sections are enabled.\return <c>0</c> otherwise.\sa starpu_omp_set_nested\sa starpu_omp_get_max_active_levels\sa starpu_omp_set_max_active_levels\sa starpu_omp_get_level\sa starpu_omp_get_active_level\fn int starpu_omp_get_cancellation(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the state of the cancel ICVS var.\fn void starpu_omp_set_schedule(enum starpu_omp_sched_value kind, int modifier)\ingroup API_OpenMP_Runtime_SupportThis function sets the default scheduling kind for upcoming loops within thecurrent parallel section. \p kind is the scheduler kind, \p modifiercomplements the scheduler kind with informations such as the chunk size,in accordance with the OpenMP specification.\sa starpu_omp_get_schedule\fn void starpu_omp_get_schedule(enum starpu_omp_sched_value *kind, int *modifier)\ingroup API_OpenMP_Runtime_SupportThis function returns the current selected default loop scheduler.\return the kind and the modifier of the current default loop scheduler.\sa starpu_omp_set_schedule\fn int starpu_omp_get_thread_limit(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the number of StarPU CPU workers.\return the number of StarPU CPU workers.\fn void starpu_omp_set_max_active_levels(int max_levels)\ingroup API_OpenMP_Runtime_SupportThis function sets the maximum number of allowed active parallel section levels.Note: The StarPU OpenMP runtime support currently ignores the argument of this function and assume \p max_levels equals <c>1</c> instead.\sa starpu_omp_set_nested\sa starpu_omp_get_nested\sa starpu_omp_get_max_active_levels\sa starpu_omp_get_level\sa starpu_omp_get_active_level\fn int starpu_omp_get_max_active_levels(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the current maximum number of allowed active parallel section levels\return the current maximum number of allowed active parallel section levels.\sa starpu_omp_set_nested\sa starpu_omp_get_nested\sa starpu_omp_set_max_active_levels\sa starpu_omp_get_level\sa starpu_omp_get_active_level\fn int starpu_omp_get_level(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the nesting level of the current parallel section.\return the nesting level of the current parallel section.\sa starpu_omp_set_nested\sa starpu_omp_get_nested\sa starpu_omp_get_max_active_levels\sa starpu_omp_set_max_active_levels\sa starpu_omp_get_active_level\fn int starpu_omp_get_ancestor_thread_num(int level)\ingroup API_OpenMP_Runtime_SupportThis function returns the number of the ancestor of the current parallel section.\return the number of the ancestor of the current parallel section.\fn int starpu_omp_get_team_size(int level)\ingroup API_OpenMP_Runtime_SupportThis function returns the size of the team of the current parallel section.\return the size of the team of the current parallel section.\fn int starpu_omp_get_active_level(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the nestinglevel of the current innermost active parallel section.\return the nestinglevel of the current innermost active parallel section.\sa starpu_omp_set_nested\sa starpu_omp_get_nested\sa starpu_omp_get_max_active_levels\sa starpu_omp_set_max_active_levels\sa starpu_omp_get_level\fn int starpu_omp_in_final(void)\ingroup API_OpenMP_Runtime_SupportThis function checks whether the current task is final or not.\return <c>!0</c> if called from a final task.\return <c>0</c> otherwise.\fn enum starpu_omp_proc_bind_value starpu_omp_get_proc_bind(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the proc_bind setting of the current parallel region.\return the proc_bind setting of the current parallel region.\fn void starpu_omp_set_default_device(int device_num)\ingroup API_OpenMP_Runtime_SupportThis function sets the number of the device to use as default.Note: The StarPU OpenMP runtime support currently ignores the argument of this function.\sa starpu_omp_get_default_device\sa starpu_omp_is_initial_device\fn int starpu_omp_get_default_device(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the number of the device used as default.\return the number of the device used as default.\sa starpu_omp_set_default_device\sa starpu_omp_is_initial_device\fn int starpu_omp_get_num_devices(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the number of the devices.\return the number of the devices.\fn int starpu_omp_get_num_teams(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the number of teams in the current teams region.\return the number of teams in the current teams region.\sa starpu_omp_get_num_teams\fn int starpu_omp_get_team_num(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the team number of the calling thread.\return the team number of the calling thread.\sa starpu_omp_get_num_teams\fn int starpu_omp_is_initial_device(void)\ingroup API_OpenMP_Runtime_SupportThis function checks whether the current device is the initial device or not.\fn int starpu_omp_get_max_task_priority\ingroup API_OpenMP_Runtime_SupportThe omp_get_max_task_priority routine returns the maximum value that can bespecified in the priority clause.\return <c>!0</c> if called from the host device.\return <c>0</c> otherwise.\sa starpu_omp_set_default_device\sa starpu_omp_get_default_device\fn void starpu_omp_init_lock(starpu_omp_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function initializes an opaque lock object.\sa starpu_omp_destroy_lock\sa starpu_omp_set_lock\sa starpu_omp_unset_lock\sa starpu_omp_test_lock\fn void starpu_omp_destroy_lock(starpu_omp_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function destroys an opaque lock object.\sa starpu_omp_init_lock\sa starpu_omp_set_lock\sa starpu_omp_unset_lock\sa starpu_omp_test_lock\fn void starpu_omp_set_lock(starpu_omp_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function locks an opaque lock object. If the lock is already locked, thefunction will block until it succeeds in exclusively acquiring the lock.\sa starpu_omp_init_lock\sa starpu_omp_destroy_lock\sa starpu_omp_unset_lock\sa starpu_omp_test_lock\fn void starpu_omp_unset_lock(starpu_omp_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function unlocks a previously locked lock object. The behaviour of thisfunction is unspecified if it is called on an unlocked lock object.\sa starpu_omp_init_lock\sa starpu_omp_destroy_lock\sa starpu_omp_set_lock\sa starpu_omp_test_lock\fn int starpu_omp_test_lock(starpu_omp_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function unblockingly attempts to lock a lock object and returns whetherit succeeded or not.\return <c>!0</c> if the function succeeded in acquiring the lock.\return <c>0</c> if the lock was already locked.\sa starpu_omp_init_lock\sa starpu_omp_destroy_lock\sa starpu_omp_set_lock\sa starpu_omp_unset_lock\fn void starpu_omp_init_nest_lock(starpu_omp_nest_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function initializes an opaque lock object supporting nested locking operations.\sa starpu_omp_destroy_nest_lock\sa starpu_omp_set_nest_lock\sa starpu_omp_unset_nest_lock\sa starpu_omp_test_nest_lock\fn void starpu_omp_destroy_nest_lock(starpu_omp_nest_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function destroys an opaque lock object supporting nested locking operations.\sa starpu_omp_init_nest_lock\sa starpu_omp_set_nest_lock\sa starpu_omp_unset_nest_lock\sa starpu_omp_test_nest_lock\fn void starpu_omp_set_nest_lock(starpu_omp_nest_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function locks an opaque lock object supporting nested locking operations.If the lock is already locked by another task, the function will block untilit succeeds in exclusively acquiring the lock. If the lock is already taken bythe current task, the function will increase the nested locking level of thelock object.\sa starpu_omp_init_nest_lock\sa starpu_omp_destroy_nest_lock\sa starpu_omp_unset_nest_lock\sa starpu_omp_test_nest_lock\fn void starpu_omp_unset_nest_lock(starpu_omp_nest_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function unlocks a previously locked lock object supporting nested lockingoperations. If the lock has been locked multiple times in nested fashion, thenested locking level is decreased and the lock remains locked. Otherwise, ifthe lock has only been locked once, it becomes unlocked. The behaviour of thisfunction is unspecified if it is called on an unlocked lock object. Thebehaviour of this function is unspecified if it is called from a different taskthan the one that locked the lock object.\sa starpu_omp_init_nest_lock\sa starpu_omp_destroy_nest_lock\sa starpu_omp_set_nest_lock\sa starpu_omp_test_nest_lock\fn int starpu_omp_test_nest_lock(starpu_omp_nest_lock_t *lock)\ingroup API_OpenMP_Runtime_SupportThis function unblocking attempts to lock an opaque lock object supportingnested locking operations and returns whether it succeeded or not. If the lockis already locked by another task, the function will return without havingacquired the lock. If the lock is already taken by the current task, thefunction will increase the nested locking level of the lock object.\return <c>!0</c> if the function succeeded in acquiring the lock.\return <c>0</c> if the lock was already locked.\sa starpu_omp_init_nest_lock\sa starpu_omp_destroy_nest_lock\sa starpu_omp_set_nest_lock\sa starpu_omp_unset_nest_lock\fn void starpu_omp_atomic_fallback_inline_begin(void)\ingroup API_OpenMP_Runtime_SupportThis function implements the entry point of a fallback global atomic region. Itblocks until it succeeds in acquiring exclusive access to the global atomicregion.\sa starpu_omp_atomic_fallback_inline_end\fn void starpu_omp_atomic_fallback_inline_end(void)\ingroup API_OpenMP_Runtime_SupportThis function implements the exit point of a fallback global atomic region. Itrelease the exclusive access to the global atomic region.\sa starpu_omp_atomic_fallback_inline_begin\fn double starpu_omp_get_wtime(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the elapsed wallclock time in seconds.\return the elapsed wallclock time in seconds.\sa starpu_omp_get_wtick\fn double starpu_omp_get_wtick(void)\ingroup API_OpenMP_Runtime_SupportThis function returns the precision of the time used by \p starpu_omp_get_wtime.\return the precision of the time used by \p starpu_omp_get_wtime.\sa starpu_omp_get_wtime\fn void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base)\ingroup API_OpenMP_Runtime_SupportThis function enables setting additional vector metadata needed by the OpenMP Runtime Support.\p handle is vector data handle.\p slice_base is the base of an array slice, expressed in number of vector elements from the array base.\sa STARPU_VECTOR_GET_SLICE_BASE*/
 |