StarPU Internal Handbook
|
#include <starpu.h>
#include <common/config.h>
#include <common/list.h>
#include <common/fxt.h>
#include <common/uthash.h>
Go to the source code of this file.
Macros | |
#define | ALLOC_WORKER_SET |
#define | DEVID_PER_WORKER |
#define | STARPU_NOWORKERID |
#define | STARPU_ACTIVETHREAD |
#define | STARPU_NONACTIVETHREAD |
Functions | |
int | _starpu_build_topology (struct _starpu_machine_config *config, int no_mp_config) |
void | _starpu_initialize_workers_deviceid (int *explicit_workers_gpuid, int *current, int *workers_gpuid, const char *varname, unsigned nhwgpus, enum starpu_worker_archtype type) |
int | _starpu_get_next_devid (struct _starpu_machine_topology *topology, struct _starpu_machine_config *config, enum starpu_worker_archtype arch) |
void | _starpu_topology_check_ndevices (int *ndevices, unsigned nhwdevices, int overflow, unsigned max, int reserved, const char *nname, const char *dname, const char *configurename) |
void | _starpu_topology_configure_workers (struct _starpu_machine_topology *topology, struct _starpu_machine_config *config, enum starpu_worker_archtype type, int devnum, int devid, int homogeneous, int worker_devid, unsigned nworker_per_device, unsigned ncores, struct _starpu_worker_set *worker_set, struct _starpu_worker_set *driver_worker_set) |
unsigned | _starpu_get_next_bindid (struct _starpu_machine_config *config, unsigned flags, unsigned *preferred_binding, unsigned npreferred) |
void | _starpu_destroy_machine_config (struct _starpu_machine_config *config, int no_mp_config) |
void | _starpu_destroy_topology (struct _starpu_machine_config *config) |
hwloc_obj_t | _starpu_numa_get_obj (hwloc_obj_t obj) |
unsigned | _starpu_topology_get_nhwcpu (struct _starpu_machine_config *config) |
unsigned | _starpu_topology_get_nhwpu (struct _starpu_machine_config *config) |
unsigned | _starpu_topology_get_nhwnumanodes (struct _starpu_machine_config *config) |
unsigned | _starpu_topology_get_nnumanodes (struct _starpu_machine_config *config) |
unsigned | _starpu_topology_get_numa_core_binding (struct _starpu_machine_config *config, const unsigned *numa_binding, unsigned nnuma, unsigned *binding, unsigned nbinding) |
int | starpu_memory_nodes_numa_hwloclogid_to_id (int logid) |
int | _starpu_get_logical_numa_node_worker (unsigned workerid) |
unsigned | _starpu_get_nhyperthreads () STARPU_ATTRIBUTE_VISIBILITY_DEFAULT |
void | _starpu_topology_filter (hwloc_topology_t topology) |
int | _starpu_bind_thread_on_cpu (int cpuid, int workerid, const char *name) |
void | _starpu_bind_thread_on_cpus (struct _starpu_combined_worker *combined_worker) |
struct _starpu_worker * | _starpu_get_worker_from_driver (struct starpu_driver *d) |
unsigned | starpu_memory_nodes_get_numa_count (void) STARPU_ATTRIBUTE_VISIBILITY_DEFAULT |
int | starpu_memory_nodes_numa_id_to_hwloclogid (unsigned id) |
int | _starpu_task_data_get_node_on_node (struct starpu_task *task, unsigned index, unsigned target_node) |
int | _starpu_task_data_get_node_on_worker (struct starpu_task *task, unsigned index, unsigned worker) |
Variables | |
unsigned | _starpu_may_bind_automatically [STARPU_NARCH] |
#define ALLOC_WORKER_SET |
Configures the topology according to the desired worker distribution on the device.
#define DEVID_PER_WORKER |
Request to set a different perfmodel devid per worker
int _starpu_build_topology | ( | struct _starpu_machine_config * | config, |
int | no_mp_config | ||
) |
Detect the number of memory nodes and where to bind the different workers.
void _starpu_initialize_workers_deviceid | ( | int * | explicit_workers_gpuid, |
int * | current, | ||
int * | workers_gpuid, | ||
const char * | varname, | ||
unsigned | nhwgpus, | ||
enum starpu_worker_archtype | type | ||
) |
Initialize a series of workers.
explicit_workers_gpuid
is non-null, it will be used as the list of device IDs of the actual hardware devices to be used.current
is non-null, it points to the next device ID to be usedworkers_gpuid
is filled with the set of device IDs actually used in the endvarname
is the name of the environment variable that users can use to override the set of device IDs to be used.nhwgpus
is the number of actual devices available on the system.type
is the type of devices. int _starpu_get_next_devid | ( | struct _starpu_machine_topology * | topology, |
struct _starpu_machine_config * | config, | ||
enum starpu_worker_archtype | arch | ||
) |
Get the next devid for architecture type
void _starpu_topology_check_ndevices | ( | int * | ndevices, |
unsigned | nhwdevices, | ||
int | overflow, | ||
unsigned | max, | ||
int | reserved, | ||
const char * | nname, | ||
const char * | dname, | ||
const char * | configurename | ||
) |
Check that *ndevices
is not larger than nhwdevices
(unless overflow
is 1), and is not larger than max
. Cap it otherwise, and advise using the configurename
./configure option in the max
case.
unsigned _starpu_get_next_bindid | ( | struct _starpu_machine_config * | config, |
unsigned | flags, | ||
unsigned * | preferred_binding, | ||
unsigned | npreferred | ||
) |
This function gets the identifier of the next core on which to bind a worker. In case a list of preferred cores was specified (logical indexes), we look for a an available core among the list if possible, otherwise a round-robin policy is used.
void _starpu_destroy_machine_config | ( | struct _starpu_machine_config * | config, |
int | no_mp_config | ||
) |
Should be called instead of _starpu_destroy_topology when _starpu_build_topology returns a non zero value.
void _starpu_destroy_topology | ( | struct _starpu_machine_config * | config | ) |
Destroy all resources used to store the topology of the machine.
hwloc_obj_t _starpu_numa_get_obj | ( | hwloc_obj_t | obj | ) |
Return the hwloc object of the NUMA node corresponding to the given hwloc object
unsigned _starpu_topology_get_nhwcpu | ( | struct _starpu_machine_config * | config | ) |
returns the number of physical cpus
unsigned _starpu_topology_get_nhwpu | ( | struct _starpu_machine_config * | config | ) |
returns the number of logical cpus
unsigned _starpu_topology_get_nhwnumanodes | ( | struct _starpu_machine_config * | config | ) |
returns the number of hardware NUMA nodes
unsigned _starpu_topology_get_nnumanodes | ( | struct _starpu_machine_config * | config | ) |
returns the number of NUMA nodes to be exposed by StarPU as memory nodes, can be just 1 when STARPU_USE_NUMA is 0
unsigned _starpu_topology_get_numa_core_binding | ( | struct _starpu_machine_config * | config, |
const unsigned * | numa_binding, | ||
unsigned | nnuma, | ||
unsigned * | binding, | ||
unsigned | nbinding | ||
) |
given a list of numa nodes (logical indexes) numa_binding
, fill binding
with the corresponding cores (logical indexes)
unsigned _starpu_get_nhyperthreads | ( | ) |
returns the number of hyperthreads per core
void _starpu_topology_filter | ( | hwloc_topology_t | topology | ) |
Small convenient function to filter hwloc topology depending on HWLOC API version
int _starpu_bind_thread_on_cpu | ( | int | cpuid, |
int | workerid, | ||
const char * | name | ||
) |
Bind the current thread on the CPU logically identified by "cpuid". The logical ordering of the processors is either that of hwloc (if available), or the ordering exposed by the OS.
void _starpu_bind_thread_on_cpus | ( | struct _starpu_combined_worker * | combined_worker | ) |
Bind the current thread on the set of CPUs for the given combined worker.
int _starpu_task_data_get_node_on_node | ( | struct starpu_task * | task, |
unsigned | index, | ||
unsigned | target_node | ||
) |
Get the memory node for data number i when task is to be executed on memory node target_node
. Returns -1 if the data does not need to be loaded.
int _starpu_task_data_get_node_on_worker | ( | struct starpu_task * | task, |
unsigned | index, | ||
unsigned | worker | ||
) |
Get the memory node for data number i when task is to be executed on worker worker
. Returns -1 if the data does not need to be loaded.