ARGOBOTS
dce6e727ffc4ca5b3ffc04cb9517c6689be51ec5
|
Go to the documentation of this file.
20 void (*thread_func)(
void *),
void *arg,
27 #ifndef ABT_CONFIG_DISABLE_MIGRATION
103 #ifndef ABT_CONFIG_ENABLE_VER_20_API
120 int abt_errno =
ythread_create(p_global, p_local, p_pool, thread_func, arg,
267 void (*thread_func)(
void *),
void *arg,
273 #ifndef ABT_CONFIG_ENABLE_VER_20_API
292 int abt_errno =
ythread_create(p_global, p_local, p_pool, thread_func, arg,
353 void (**thread_func_list)(
void *),
void **arg_list,
368 if (newthread_list == NULL) {
369 for (i = 0; i < num_threads; i++) {
375 void (*thread_f)(
void *) = thread_func_list[i];
376 void *arg = arg_list ? arg_list[i] : NULL;
377 int abt_errno =
ythread_create(p_global, p_local, p_pool, thread_f,
384 for (i = 0; i < num_threads; i++) {
390 void (*thread_f)(
void *) = thread_func_list[i];
391 void *arg = arg_list ? arg_list[i] : NULL;
476 int abt_errno =
thread_revive(p_global, p_local, p_pool, thread_func, arg,
680 for (i = 0; i < num_threads; i++) {
784 for (i = 0; i < num_threads; i++) {
826 #ifndef ABT_CONFIG_ENABLE_VER_20_API
875 #ifdef ABT_CONFIG_DISABLE_CANCELLATION
928 #ifndef ABT_CONFIG_ENABLE_VER_20_API
980 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1192 *unit = p_thread->
unit;
1376 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1436 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1505 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1522 for (p = 0; p < p_sched->
num_pools; p++)
1593 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1609 for (p = 0; p < p_sched->
num_pools; p++)
1678 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1757 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1771 int i, num_xstreams, abt_errno;
1781 xstreams[i++] = p_xstream;
1782 p_xstream = p_xstream->
p_next;
1790 for (i = 0; i < num_xstreams; i++) {
1801 for (p = 0; p < p_sched->
num_pools; p++) {
1868 void (*cb_func)(
ABT_thread thread,
void *cb_arg),
1873 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1936 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1940 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1941 if (p_thread->
type &
1996 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2252 p_thread->
p_arg = arg;
2290 *arg = p_thread->
p_arg;
2463 #ifndef ABT_CONFIG_ENABLE_VER_20_API
2471 thread_attr.
p_stack = (
void *)(((
char *)p_stacktop) - stacksize);
2480 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2490 thread_attr.
f_cb = NULL;
2507 void (*thread_func)(
void *),
void *arg,
2512 int abt_errno =
thread_revive(p_global, p_local, p_pool, thread_func, arg,
2567 *pp_root_ythread = p_root_ythread;
2601 (
void (*)(
void *))p_sched->
run,
2654 *pp_mig_data = p_mig_data;
2702 if (p_thread == NULL) {
2703 fprintf(p_os,
"%*s== NULL thread ==\n", indent,
"");
2706 int xstream_rank = p_xstream ? p_xstream->
rank : 0;
2707 const char *type, *yieldable, *state, *named, *migratable;
2712 type =
"MAIN_SCHED";
2744 state =
"TERMINATED";
2753 void *p_migration_cb_arg =
2757 "%*s== Thread (%p) ==\n"
2758 "%*sid : %" PRIu64
"\n"
2760 "%*syieldable : %s\n"
2762 "%*slast_ES : %p (%d)\n"
2767 "%*smigratable : %s\n"
2768 "%*srequest : 0x%x\n"
2769 "%*smig_cb_arg : %p\n"
2770 "%*skeytable : %p\n",
2771 indent,
"", (
void *)p_thread, indent,
"",
2773 yieldable, indent,
"", state, indent,
"", (
void *)p_xstream,
2774 xstream_rank, indent,
"", (
void *)p_thread->p_parent, indent,
2775 "", p_thread->p_arg, indent,
"", (
void *)p_thread->p_pool,
2776 indent,
"", named, indent,
"", migratable, indent,
"",
2778 p_migration_cb_arg, indent,
"",
2784 "%*sstacktop : %p\n"
2785 "%*sstacksize : %zu\n",
2803 if (p_thread == NULL)
2809 return p_thread->
id;
2831 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2849 const size_t stacksize = p_attr->
stacksize;
2850 if (
ABTU_likely(stacksize == default_stacksize)) {
2856 }
else if (stacksize != 0) {
2866 NULL, &p_newthread);
2876 p_stacktop, &p_newthread);
2879 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2884 (
void **)&p_mig_data);
2890 p_mig_data->f_migration_cb = p_attr->
f_cb;
2891 p_mig_data->p_migration_cb_arg = p_attr->
p_cb_arg;
2894 (
void *)p_mig_data);
2967 *pp_newthread = p_newthread;
2973 void (*thread_func)(
void *),
void *arg,
2983 p_thread->
p_arg = arg;
3011 #ifndef ABT_CONFIG_DISABLE_MIGRATION
3094 #ifndef ABT_CONFIG_ACTIVE_WAIT_POLICY
3111 &dummy_ythread.
ctx);
3154 #ifdef ABT_CONFIG_ACTIVE_WAIT_POLICY
3162 ABTI_thread *p_self_thread = p_local_xstream->p_thread;
3166 #ifdef ABT_CONFIG_ACTIVE_WAIT_POLICY
3217 p_local_xstream->p_thread = &p_root_ythread->
thread;
3278 p_sched = p_new_sched;
static void ABTD_futex_single_init(ABTD_futex_single *p_futex)
@ ABT_THREAD_STATE_TERMINATED
int ABT_thread_migrate_to_xstream(ABT_thread thread, ABT_xstream xstream)
Request a migration of a work unit to a specific execution stream.
#define ABTI_CHECK_NULL_SCHED_PTR(p)
struct ABT_key_opaque * ABT_key
Work-unit-specific data key handle type.
#define ABT_ERR_INV_THREAD
Error code: invalid work unit.
static ABTI_sched * ABTI_sched_get_ptr(ABT_sched sched)
#define ABTI_event_thread_free(p_local, p_thread, p_caller)
int ABT_thread_get_arg(ABT_thread thread, void **arg)
Retrieve an argument for a work-unit function of a work unit.
int ABT_thread_resume(ABT_thread thread)
Resume a ULT.
void ABTI_ythread_free_root(ABTI_global *p_global, ABTI_local *p_local, ABTI_ythread *p_ythread)
void ABTI_thread_print(ABTI_thread *p_thread, FILE *p_os, int indent)
ABT_pool_remove_fn p_remove
int ABT_thread_is_primary(ABT_thread thread, ABT_bool *is_primary)
Check if a work unit is the primary ULT.
void(* f_migration_cb)(ABT_thread, void *)
void ABTD_futex_suspend(ABTD_futex_single *p_futex)
static void ABTI_mem_free_thread(ABTI_global *p_global, ABTI_local *p_local, ABTI_thread *p_thread)
int ABT_bool
Boolean type.
static void ABTD_atomic_release_store_ythread_context_ptr(ABTD_ythread_context_atomic_ptr *ptr, ABTD_ythread_context *p_ctx)
@ ABTI_XSTREAM_TYPE_PRIMARY
#define ABT_POOL_CONTEXT_OP_THREAD_CREATE
A flag that hints a push operation in a thread creation routine without a yield operation.
static void * ABTD_ythread_context_get_stacktop(ABTD_ythread_context *p_ctx)
#define ABTI_THREAD_TYPE_ROOT
#define ABTI_SETUP_LOCAL_XSTREAM(pp_local_xstream)
static void * ABTI_ktable_get(ABTD_atomic_ptr *pp_ktable, ABTI_key *p_key)
ABT_bool ABTI_sched_has_unit(ABTI_sched *p_sched)
static uint32_t ABTD_atomic_acquire_load_uint32(const ABTD_atomic_uint32 *ptr)
static void thread_main_sched_func(void *arg)
struct ABT_thread_attr_opaque * ABT_thread_attr
ULT attribute handle type.
struct ABT_thread_opaque * ABT_thread
Work unit handle type.
ABTD_atomic_ptr p_migration_pool
static ABTD_atomic_uint64 g_thread_id
int ABT_thread_join_many(int num_threads, ABT_thread *thread_list)
Wait for a set of work units to terminate.
static ABTI_key * ABTI_key_get_ptr(ABT_key key)
int ABT_thread_create_many(int num_threads, ABT_pool *pool_list, void(**thread_func_list)(void *), void **arg_list, ABT_thread_attr attr, ABT_thread *newthread_list)
Create a set of new ULTs.
#define ABTI_SETUP_GLOBAL(pp_global)
ABTD_spinlock xstream_list_lock
int ABT_thread_get_stacksize(ABT_thread thread, size_t *stacksize)
Get a stack size of a work unit.
static void ABTI_ythread_thread_yield_to(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_self, ABTI_ythread *p_target, ABT_sync_event_type sync_event_type, void *p_sync)
static ABTI_global * ABTI_global_get_global(void)
static ABTU_ret_err int thread_revive(ABTI_global *p_global, ABTI_local *p_local, ABTI_pool *p_pool, void(*thread_func)(void *), void *arg, thread_pool_op_kind pool_op, ABTI_thread *p_thread)
#define ABT_POOL_CONTEXT_OP_THREAD_REVIVE
A flag that hints a push operation in a thread revival routine without a yield operation.
int ABT_thread_set_migratable(ABT_thread thread, ABT_bool migratable)
Set the migratability in a work unit.
#define ABT_ERR_POOL
Error code: error related to a pool.
#define ABTI_THREAD_INIT_ID
#define ABTI_CHECK_ERROR(abt_errno)
@ ABTI_YTHREAD_YIELD_KIND_YIELD_LOOP
void ABTI_ythread_free_primary(ABTI_global *p_global, ABTI_local *p_local, ABTI_ythread *p_ythread)
static ABT_thread_attr ABTI_thread_attr_get_handle(ABTI_thread_attr *p_attr)
int ABT_thread_get_id(ABT_thread thread, ABT_unit_id *thread_id)
Get ID of a work unit.
static ABT_sched ABTI_sched_get_handle(ABTI_sched *p_sched)
#define ABTI_THREAD_TYPE_YIELDABLE
ABTD_atomic_uint32 request
static ABTU_ret_err int ythread_create(ABTI_global *p_global, ABTI_local *p_local, ABTI_pool *p_pool, void(*thread_func)(void *), void *arg, ABTI_thread_attr *p_attr, ABTI_thread_type thread_type, ABTI_sched *p_sched, thread_pool_op_kind pool_op, ABTI_ythread **pp_newthread)
static ABTI_ythread * ABTI_thread_get_ythread(ABTI_thread *p_thread)
ABTU_ret_err int ABTI_ythread_create_sched(ABTI_global *p_global, ABTI_local *p_local, ABTI_pool *p_pool, ABTI_sched *p_sched)
void ABTI_thread_handle_request_cancel(ABTI_global *p_global, ABTI_xstream *p_local_xstream, ABTI_thread *p_thread)
#define ABTI_event_thread_revive(p_local, p_thread, p_caller, p_pool)
static ABT_thread ABTI_thread_get_handle(ABTI_thread *p_thread)
static ABTU_ret_err int ABTI_thread_set_associated_pool(ABTI_global *p_global, ABTI_thread *p_thread, ABTI_pool *p_pool)
static ABTU_ret_err int ABTI_mem_alloc_ythread_mempool_desc_stack(ABTI_global *p_global, ABTI_local *p_local, size_t stacksize, ABTI_ythread **pp_ythread)
void ABTI_thread_reset_id(void)
#define ABTI_IS_ERROR_CHECK_ENABLED
#define ABTI_CHECK_YIELDABLE(p_thread, pp_ythread, abt_errno)
ABTD_ythread_context_atomic_ptr p_link
static ABTI_thread_attr * ABTI_thread_attr_get_ptr(ABT_thread_attr attr)
#define ABTI_KEY_STATIC_INITIALIZER(f_destructor, id)
int ABT_thread_get_state(ABT_thread thread, ABT_thread_state *state)
Get a state of a work unit.
#define ABTI_THREAD_TYPE_EXT
struct ABT_pool_opaque * ABT_pool
Pool handle type.
#define ABT_ERR_THREAD
Error code: error related to a work unit.
#define ABTU_likely(cond)
ABT_thread_state
State of a work unit.
int ABT_thread_free(ABT_thread *thread)
Free a work unit.
static ABT_thread ABTI_pool_pop(ABTI_pool *p_pool, ABT_pool_context context)
static ABTI_key g_thread_sched_key
struct ABT_sched_opaque * ABT_sched
Scheduler handle type.
static ABTU_ret_err int ABTI_ktable_set(ABTI_global *p_global, ABTI_local *p_local, ABTD_atomic_ptr *pp_ktable, ABTI_key *p_key, void *value)
#define ABTI_THREAD_TYPE_PRIMARY
int ABT_thread_migrate_to_sched(ABT_thread thread, ABT_sched sched)
Request a migration of a work unit to a specific scheduler.
int ABT_thread_exit(void)
Terminate a calling ULT.
static ABT_xstream ABTI_xstream_get_handle(ABTI_xstream *p_xstream)
static void ABTD_atomic_release_store_uint64(ABTD_atomic_uint64 *ptr, uint64_t val)
static void ABTI_thread_attr_init(ABTI_thread_attr *p_attr, void *p_stack, size_t stacksize, ABT_bool migratable)
@ ABT_THREAD_STATE_BLOCKED
#define ABTI_CHECK_NULL_THREAD_PTR(p)
#define ABTI_THREAD_REQ_MIGRATE
int ABT_thread_set_specific(ABT_thread thread, ABT_key key, void *value)
Set a value with a work-unit-specific data key in a work unit.
static void thread_free(ABTI_global *p_global, ABTI_local *p_local, ABTI_thread *p_thread, ABT_bool free_unit)
#define ABTI_SCHED_REQ_REPLACE
static void ABTD_atomic_relaxed_store_uint32(ABTD_atomic_uint32 *ptr, uint32_t val)
static void ABTI_sched_discard_and_free(ABTI_global *p_global, ABTI_local *p_local, ABTI_sched *p_sched, ABT_bool force_free)
static int ABTD_atomic_relaxed_load_int(const ABTD_atomic_int *ptr)
#define ABTI_KEY_ID_STACKABLE_SCHED
uint64_t ABT_unit_id
Work unit ID type.
#define ABTI_event_thread_join(p_local, p_thread, p_caller)
struct ABT_xstream_opaque * ABT_xstream
Execution stream handle type.
static ABTI_ythread * ABTI_thread_get_ythread_or_null(ABTI_thread *p_thread)
ABT_unit_is_in_pool_fn u_is_in_pool
static void ABTD_spinlock_acquire(ABTD_spinlock *p_lock)
int ABT_thread_yield(void)
Yield the calling ULT to its parent ULT.
static void ABTD_ythread_context_reinit(ABTD_ythread_context *p_ctx)
static void ABTI_ythread_resume_and_push(ABTI_local *p_local, ABTI_ythread *p_ythread)
int ABT_thread_get_last_pool(ABT_thread thread, ABT_pool *pool)
Get the last pool of a work unit.
#define ABTI_HANDLE_ERROR(n)
static void thread_key_destructor_migration(void *p_value)
static void ABTD_atomic_pause(void)
static ABTU_ret_err int ABTU_malloc(size_t size, void **p_ptr)
#define ABTI_THREAD_TYPE_MIGRATABLE
static ABTU_ret_err int ABTI_pool_remove(ABTI_pool *p_pool, ABT_unit unit)
void ABTI_thread_join(ABTI_local **pp_local, ABTI_thread *p_thread)
int ABT_thread_create_to(ABT_pool pool, void(*thread_func)(void *), void *arg, ABT_thread_attr attr, ABT_thread *newthread)
Create a new ULT and yield to it.
static void ABTD_atomic_relaxed_store_int(ABTD_atomic_int *ptr, int val)
int ABT_thread_set_associated_pool(ABT_thread thread, ABT_pool pool)
Set an associated pool for the target work unit.
int ABT_thread_join(ABT_thread thread)
Wait for a work unit to terminate.
#define ABTD_ATOMIC_UINT64_STATIC_INITIALIZER(val)
static void ABTI_ythread_suspend_join(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_self, ABTI_ythread *p_target, ABT_sync_event_type sync_event_type, void *p_sync)
static uint32_t ABTD_atomic_relaxed_load_uint32(const ABTD_atomic_uint32 *ptr)
ABTI_sched * p_main_sched
void * p_migration_cb_arg
#define ABT_ERR_INV_THREAD_ATTR
Error code: invalid ULT attribute.
ABTU_ret_err int ABTI_sched_get_migration_pool(ABTI_sched *, ABTI_pool *, ABTI_pool **)
void ABTI_thread_free(ABTI_global *p_global, ABTI_local *p_local, ABTI_thread *p_thread)
static void thread_root_func(void *arg)
struct ABT_unit_opaque * ABT_unit
Work unit handle type for scheduling.
static ABTU_ret_err int thread_migrate_to_pool(ABTI_global *p_global, ABTI_local *p_local, ABTI_thread *p_thread, ABTI_pool *p_pool)
static void thread_join(ABTI_local **pp_local, ABTI_thread *p_thread)
int ABT_thread_is_unnamed(ABT_thread thread, ABT_bool *is_unnamed)
Check if a work unit is unnamed.
#define ABTI_ASSERT(cond)
ABT_bool ABTI_initialized(void)
static ABTU_ret_err int ABTU_calloc(size_t num, size_t size, void **p_ptr)
#define ABT_ERR_MIGRATION_TARGET
Error code: error related to a migration target.
ABTI_sched * p_replace_sched
#define ABT_THREAD_ATTR_NULL
static ABTI_local * ABTI_local_get_local(void)
static ABTI_pool * ABTI_xstream_get_main_pool(ABTI_xstream *p_xstream)
#define ABTI_event_thread_cancel(p_local_xstream, p_thread)
#define ABTI_CHECK_NULL_YTHREAD_PTR(p)
ABTU_ret_err int ABTI_thread_revive(ABTI_global *p_global, ABTI_local *p_local, ABTI_pool *p_pool, void(*thread_func)(void *), void *arg, ABTI_thread *p_thread)
int ABT_thread_create_on_xstream(ABT_xstream xstream, void(*thread_func)(void *), void *arg, ABT_thread_attr attr, ABT_thread *newthread)
Create a new ULT associated with an execution stream.
static void thread_key_destructor_stackable_sched(void *p_value)
static ABTU_ret_err int ABTI_ktable_set_unsafe(ABTI_global *p_global, ABTI_local *p_local, ABTI_ktable **pp_ktable, ABTI_key *p_key, void *value)
int ABT_thread_set_arg(ABT_thread thread, void *arg)
Set an argument for a work-unit function of a work unit.
#define ABT_SUCCESS
Error code: the routine returns successfully.
#define ABTI_event_thread_create(p_local, p_thread, p_caller, p_pool)
static ABTI_local * ABTI_local_get_local_uninlined(void)
static ABT_unit_id thread_get_new_id(void)
static void ABTI_ythread_schedule(ABTI_global *p_global, ABTI_xstream **pp_local_xstream, ABTI_thread *p_thread)
int ABT_thread_get_last_xstream(ABT_thread thread, ABT_xstream *xstream)
Get an execution stream associated with a work unit.
#define ABTI_SETUP_LOCAL_YTHREAD(pp_local_xstream, pp_ythread)
ABTI_xstream * p_xstream_head
static int ABTD_atomic_acquire_load_int(const ABTD_atomic_int *ptr)
static void ABTI_ythread_yield(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_self, ABTI_ythread_yield_kind kind, ABT_sync_event_type sync_event_type, void *p_sync)
#define ABTI_THREAD_REQ_CANCEL
static ABTU_ret_err int ABTI_mem_alloc_ythread_malloc_desc_stack(ABTI_global *p_global, size_t stacksize, ABTI_ythread **pp_ythread)
static ABTU_ret_err int ABTI_mem_alloc_ythread_mempool_desc(ABTI_global *p_global, ABTI_local *p_local, size_t stacksize, void *p_stacktop, ABTI_ythread **pp_ythread)
int ABT_thread_migrate(ABT_thread thread)
Request a migration of a work unit to any available execution stream.
static ABTI_xstream * ABTI_local_get_xstream_or_null(ABTI_local *p_local)
ABTI_pool_deprecated_def deprecated_def
int ABT_thread_self_id(ABT_unit_id *id)
Get ID of the calling work unit.
#define ABTI_IS_EXT_THREAD_ENABLED
ABTU_ret_err int ABTI_thread_attr_dup(const ABTI_thread_attr *p_attr, ABTI_thread_attr **pp_dup_attr) ABTU_ret_err
int ABT_thread_self(ABT_thread *thread)
Get the calling work unit.
static ABTI_local * ABTI_xstream_get_local(ABTI_xstream *p_xstream)
uint32_t ABTI_thread_type
int ABT_thread_free_many(int num_threads, ABT_thread *thread_list)
Free a set of work units.
ABTU_ret_err int ABTI_ythread_create_main_sched(ABTI_global *p_global, ABTI_local *p_local, ABTI_xstream *p_xstream, ABTI_sched *p_sched)
#define ABTU_unlikely(cond)
#define ABT_TRUE
True constant for ABT_bool.
static ABTI_pool * ABTI_pool_get_ptr(ABT_pool pool)
ABTD_atomic_uint32 request
@ ABT_XSTREAM_STATE_RUNNING
static void ABTI_ythread_resume_joiner(ABTI_xstream *p_local_xstream, ABTI_ythread *p_ythread)
int ABT_thread_set_callback(ABT_thread thread, void(*cb_func)(ABT_thread thread, void *cb_arg), void *cb_arg)
Register a callback function in a work unit.
#define ABT_ERR_MIGRATION_NA
Error code: migration is not supported.
static ABTU_noreturn void ABTI_ythread_exit(ABTI_xstream *p_local_xstream, ABTI_ythread *p_self)
#define ABTI_KTABLE_LOCKED
int ABT_thread_get_thread_func(ABT_thread thread, void(**thread_func)(void *))
Retrieve a work-unit function of a work unit.
ABTI_ythread * p_root_ythread
#define ABT_FALSE
False constant for ABT_bool.
ABTU_ret_err int ABTI_ythread_create_primary(ABTI_global *p_global, ABTI_local *p_local, ABTI_xstream *p_xstream, ABTI_ythread **p_ythread)
int ABT_thread_is_migratable(ABT_thread thread, ABT_bool *is_migratable)
Get the migratability of a work unit.
#define ABTI_THREAD_TYPE_MAIN_SCHED
#define ABTI_UB_ASSERT(cond)
#define ABTI_CHECK_NULL_POOL_PTR(p)
@ ABTI_YTHREAD_YIELD_TO_KIND_REVIVE_TO
static uint64_t ABTD_atomic_fetch_add_uint64(ABTD_atomic_uint64 *ptr, uint64_t v)
#define ABTI_CHECK_NULL_XSTREAM_PTR(p)
int ABT_thread_create(ABT_pool pool, void(*thread_func)(void *), void *arg, ABT_thread_attr attr, ABT_thread *newthread)
Create a new ULT.
static void ABTU_free(void *ptr)
int ABT_thread_get_unit(ABT_thread thread, ABT_unit *unit)
Get a unit handle of the target work unit.
static uint32_t ABTD_atomic_fetch_or_uint32(ABTD_atomic_uint32 *ptr, uint32_t v)
static void ABTD_spinlock_release(ABTD_spinlock *p_lock)
@ ABTI_YTHREAD_YIELD_KIND_USER
#define ABTI_THREAD_TYPE_NAMED
static ABTU_noreturn void ABTI_ythread_exit_to_primary(ABTI_global *p_global, ABTI_xstream *p_local_xstream, ABTI_ythread *p_self)
ABTU_ret_err int ABTI_thread_get_mig_data(ABTI_global *p_global, ABTI_local *p_local, ABTI_thread *p_thread, ABTI_thread_mig_data **pp_mig_data)
static ABTI_xstream * ABTI_xstream_get_ptr(ABT_xstream xstream)
ABTI_xstream * p_last_xstream
int ABT_thread_revive_to(ABT_pool pool, void(*thread_func)(void *), void *arg, ABT_thread *thread)
Revive a terminated ULT and yield to it.
static void ABTI_pool_push(ABTI_pool *p_pool, ABT_unit unit, ABT_pool_context context)
void ABTI_sched_free(ABTI_global *p_global, ABTI_local *p_local, ABTI_sched *p_sched, ABT_bool force_free)
ABTD_atomic_ptr p_keytable
static void thread_join_futexwait(ABTI_thread *p_thread)
ABTU_ret_err int ABTI_thread_handle_request_migrate(ABTI_global *p_global, ABTI_local *p_local, ABTI_thread *p_thread)
static void ABTI_pool_inc_num_blocked(ABTI_pool *p_pool)
struct ABTI_local ABTI_local
static void thread_join_busywait(ABTI_thread *p_thread)
void(* f_cb)(ABT_thread, void *)
static void ABTI_thread_unset_associated_pool(ABTI_global *p_global, ABTI_thread *p_thread)
static void ABTI_ythread_yield_to(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_self, ABTI_ythread *p_target, ABTI_ythread_yield_to_kind kind, ABT_sync_event_type sync_event_type, void *p_sync)
#define ABT_POOL_CONTEXT_OWNER_PRIMARY
A flag that hints a primary ownership of a pool.
static void * ABTD_atomic_acquire_load_ptr(const ABTD_atomic_ptr *ptr)
#define ABTI_KEY_ID_MIGRATION
int ABT_thread_yield_to(ABT_thread thread)
Yield the calling ULT to another ULT.
static ABTI_key g_thread_mig_data_key
int ABT_thread_get_last_pool_id(ABT_thread thread, int *id)
Get the last pool's ID of a work unit.
#define ABTI_CHECK_TRUE(cond, abt_errno)
int ABT_thread_revive(ABT_pool pool, void(*thread_func)(void *), void *arg, ABT_thread *thread)
Revive a terminated work unit.
#define ABTI_CHECK_NULL_KEY_PTR(p)
static void ABTI_thread_unset_request(ABTI_thread *p_thread, uint32_t req)
int ABT_thread_equal(ABT_thread thread1, ABT_thread thread2, ABT_bool *result)
Compare two work unit handles for equality.
#define ABT_ERR_FEATURE_NA
Error code: unsupported feature.
@ ABT_THREAD_STATE_RUNNING
static void thread_join_yield_thread(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_self, ABTI_thread *p_thread)
static void ABTD_atomic_relaxed_store_ptr(ABTD_atomic_ptr *ptr, void *val)
void ABTI_ktable_free(ABTI_global *p_global, ABTI_local *p_local, ABTI_ktable *p_ktable)
@ ABTI_YTHREAD_YIELD_TO_KIND_CREATE_TO
int ABT_thread_get_specific(ABT_thread thread, ABT_key key, void **value)
Get a value associated with a work-unit-specific data key in a work unit.
int ABT_thread_migrate_to_pool(ABT_thread thread, ABT_pool pool)
Request a migration of a work unit to a specific pool.
static size_t ABTD_ythread_context_get_stacksize(ABTD_ythread_context *p_ctx)
static void ABTD_atomic_release_store_uint32(ABTD_atomic_uint32 *ptr, uint32_t val)
static ABTI_xstream * ABTI_local_get_xstream(ABTI_local *p_local)
static ABTU_ret_err int ABTI_thread_init_pool(ABTI_global *p_global, ABTI_thread *p_thread, ABTI_pool *p_pool)
ABTI_ythread * p_replace_waiter
static void ABTD_atomic_release_store_int(ABTD_atomic_int *ptr, int val)
ABT_unit_id ABTI_thread_get_id(ABTI_thread *p_thread)
int ABT_thread_cancel(ABT_thread thread)
Send a cancellation request to a work unit.
#define ABTI_SCHED_REQ_FINISH
static ABTI_thread * ABTI_thread_get_ptr(ABT_thread thread)
static ABT_pool ABTI_pool_get_handle(ABTI_pool *p_pool)
ABTU_ret_err int ABTI_ythread_create_root(ABTI_global *p_global, ABTI_local *p_local, ABTI_xstream *p_xstream, ABTI_ythread **pp_root_ythread)
@ ABT_XSTREAM_STATE_TERMINATED
static void ABTI_thread_terminate(ABTI_global *p_global, ABTI_xstream *p_local_xstream, ABTI_thread *p_thread)
static void ABTI_pool_dec_num_blocked(ABTI_pool *p_pool)
#define ABTI_UB_ASSERT_BOOL(bool_val)
static void * ABTD_atomic_relaxed_load_ptr(const ABTD_atomic_ptr *ptr)
static void ABTI_thread_set_request(ABTI_thread *p_thread, uint32_t req)
int ABT_thread_get_attr(ABT_thread thread, ABT_thread_attr *attr)
Get attributes of a work unit.
static ABTU_ret_err int ABTI_mem_alloc_ythread_default(ABTI_global *p_global, ABTI_local *p_local, ABTI_ythread **pp_ythread)
#define ABTI_THREAD_REQ_JOIN