|
ARGOBOTS
dce6e727ffc4ca5b3ffc04cb9517c6689be51ec5
|
A struct that defines a pool. More...
#include <abt.h>

Data Fields | |
| ABT_pool_access | access |
| Access type. More... | |
| ABT_unit_get_type_fn | u_get_type |
| Unused function. More... | |
| ABT_unit_get_thread_fn | u_get_thread |
| Unused function. More... | |
| ABT_unit_get_task_fn | u_get_task |
| Unused function. More... | |
| ABT_unit_is_in_pool_fn | u_is_in_pool |
| Function that returns whether a work unit is in its associated pool or not. More... | |
| ABT_unit_create_from_thread_fn | u_create_from_thread |
Function that creates an ABT_unit handle that is associated with an ABT_thread handle. More... | |
| ABT_unit_create_from_task_fn | u_create_from_task |
| Unused function. More... | |
| ABT_unit_free_fn | u_free |
| Function that frees a work unit. More... | |
| ABT_pool_init_fn | p_init |
| Function that frees a work unit. More... | |
| ABT_pool_get_size_fn | p_get_size |
| Function that returns a work unit. More... | |
| ABT_pool_push_fn | p_push |
| Function that pushes a work unit to a pool. More... | |
| ABT_pool_pop_fn | p_pop |
| Function that pops a work unit from a pool. More... | |
| ABT_pool_pop_timedwait_fn | p_pop_timedwait |
| Function that pops a work unit from a pool with wait. More... | |
| ABT_pool_remove_fn | p_remove |
| Function that removes a work unit from a pool. More... | |
| ABT_pool_free_fn | p_free |
| Function that frees a pool. More... | |
| ABT_pool_print_all_fn | p_print_all |
| Function that applies a user-given function to all work units in a pool. More... | |
| ABT_pool_access ABT_pool_def::access |
Access type.
This value is used to determine a value returned by ABT_pool_get_access(). Argobots assumes all pools can be accessed by any ULTs, tasklets, and external threads. It is the user's responsibility to manage the access to pools.
| int(* ABT_pool_def::p_free)(ABT_pool pool) |
| size_t(* ABT_pool_def::p_get_size)(ABT_pool pool) |
Function that returns a work unit.
p_get_size() returns the size of the pool pool. The Argobots assumes that the size is the number of work units in pool.
p_get_size() is not optional, so the user must implement this function.
The caller of p_get_size() is undefined, so a program that relies on the caller of p_get_size() is non-conforming.
| int(* ABT_pool_def::p_init)(ABT_pool pool, ABT_pool_config pool_config) |
Function that frees a work unit.
p_init() sets up the pool pool with the pool configuration pool_config. If p_init() does not return ABT_SUCCESS, the pool creation fails.
p_init() is optional, so the user may set p_init to NULL.
The caller of p_init() is undefined, so a program that relies on the caller of p_init() is non-conforming.
Function that pops a work unit from a pool.
p_pop() pops a work unit from the pool pool and returns it. If no work unit exists in pool, ABT_UNIT_NULL must be returned.
p_pop() is not optional, so the user must implement this function.
The caller of p_pop() is undefined, so a program that relies on the caller of p_pop() is non-conforming.
Function that pops a work unit from a pool with wait.
p_pop_timedwait() pops a work unit from the pool pool and returns it. If no work unit exists in pool, ABT_UNIT_NULL must be returned. abstime_secs hints at the system time that indicates how long the caller should wait on pool until a work unit is added to pool. The current system time is obtained via ABT_get_wtime().
p_pop_timedwait() is optional, so the user may set p_pop_timedwait to NULL.
The caller of p_pop_timedwait() is undefined, so a program that relies on the caller of p_pop_timedwait() is non-conforming.
p_pop_timedwait() is deprecated and replaced by p_pop_wait(). | int(* ABT_pool_def::p_print_all)(ABT_pool pool, void *arg, void(*print_f)(void *arg, ABT_unit unit)) |
Function that applies a user-given function to all work units in a pool.
p_print_all() applies print_f to all work units in the pool pool. print_f() is called with the user-given argument arg and the work unit handle. The caller guarantees that print_f() does not modify the states of pool and work units in pool.
p_print_all() is optional, so the user may set p_print_all to NULL.
The caller of p_print_all() is undefined, so a program that relies on the caller of p_print_all() is non-conforming.
Function that pushes a work unit to a pool.
p_push() pushes the work unit unit to the pool pool. unit must be stored in pool and able to be popped by its pop functions (e.g., p_pop()) later.
p_push() is not optional, so the user must implement this function.
The caller of p_push() is undefined, so a program that relies on the caller of p_push() is non-conforming.
Function that removes a work unit from a pool.
p_remove() removes the work unit unit from the pool pool. The caller of this function guarantees that unit exists in the pool. The return value of this function is ignored.
p_remove() is optional, so the user may set p_remove to NULL.
The caller of p_remove() is undefined, so a program that relies on the caller of p_remove() is non-conforming.
| ABT_unit_create_from_task_fn ABT_pool_def::u_create_from_task |
Unused function.
This function is not used.
ABT_unit is ABT_UNIT_TYPE_TASK if an encapsulated work unit is a tasklet. Such a unit is created by u_create_from_task(). ABT_unit is ABT_UNIT_TYPE_THERAD. Accordingly, u_create_from_thread() is called to create ABT_unit for both ULTs and tasklets. ABT_unit is either ABT_UNIT_TYPE_THREAD or ABT_UNIT_TYPE_TASK, which makes the implementation of a user-defined pool extremely tedious. Argobots 1.1 marks these functions as unused to ease the implementation. | ABT_unit(* ABT_pool_def::u_create_from_thread)(ABT_thread thread) |
Function that creates an ABT_unit handle that is associated with an ABT_thread handle.
u_create_from_thread() creates a user-defined ABT_unit handle that is associated with the work-unit thread and returns. thread is neither ABT_THREAD_NULL nor ABT_TASK_NULL. The returned value must point to a 4-byte aligned memory address that is unique in the system. For example, a pointer that points to a sufficiently large memory block allocated by malloc() or mmap() satisfies this requirement. This function may return ABT_UNIT_NULL if creation fails.
ABT_unit points to a 4-byte aligned memory block.u_create_from_thread() is not optional, so the user must implement this function.
The caller of u_create_from_thread() is undefined, so a program that relies on the caller of u_create_from_thread() is non-conforming.
ABT_unit is ABT_UNIT_TYPE_TASK if an encapsulated work unit is a tasklet. Such a unit is created by u_create_from_task(). ABT_unit is ABT_UNIT_TYPE_THERAD. Accordingly, u_create_from_thread() is called to create ABT_unit for both ULTs and tasklets. ABT_unit is either ABT_UNIT_TYPE_THREAD or ABT_UNIT_TYPE_TASK, which makes the implementation of a user-defined pool extremely tedious. Argobots 1.1 marks these functions as unused to ease the implementation. | void(* ABT_pool_def::u_free)(ABT_unit *unit) |
Function that frees a work unit.
u_free() frees the work unit unit that is created by u_create_from_thread(). Its associated entity (i.e., ABT_thread) is freed by the Argobots runtime. Neither NULL nor a pointer pointing to ABT_UNIT_NULL is passed as unit to this function. u_free() may modify the value pointed to by unit.
u_free() is not optional, so the user must implement this function.
The caller of u_free() is undefined, so a program that relies on the caller of u_free() is non-conforming.
| ABT_unit_get_task_fn ABT_pool_def::u_get_task |
| ABT_unit_get_thread_fn ABT_pool_def::u_get_thread |
| ABT_unit_get_type_fn ABT_pool_def::u_get_type |
Function that returns whether a work unit is in its associated pool or not.
u_is_in_pool() returns whether the work unit unit is in its associated pool or not. If unit is in its pool, this function returns ABT_TRUE. Otherwise, this function returns ABT_FALSE. unit is not ABT_UNIT_NULL.
u_is_in_pool() is optional, so the user may set u_is_in_pool to NULL. The Argobots does not call u_is_in_pool() if it is not supported.
The caller of u_is_in_pool() is undefined, so a program that relies on the caller of u_is_in_pool() is non-conforming.
1.8.17