StarPU Internal Handbook
Loading...
Searching...
No Matches
sched_ctx.h File Reference
#include <starpu.h>
#include <starpu_sched_ctx.h>
#include <starpu_sched_ctx_hypervisor.h>
#include <starpu_scheduler.h>
#include <common/config.h>
#include <common/barrier_counter.h>
#include <common/utils.h>
#include <profiling/profiling.h>
#include <semaphore.h>
#include <core/task.h>
#include "sched_ctx_list.h"
#include <hwloc.h>

Go to the source code of this file.

Data Structures

struct  _starpu_sched_ctx
 
struct  _starpu_ctx_change
 

Macros

#define NO_RESIZE
 
#define REQ_RESIZE
 
#define DO_RESIZE
 
#define STARPU_GLOBAL_SCHED_CTX
 
#define STARPU_NMAXSMS
 
#define _starpu_sched_ctx_get_sched_ctx_for_worker_and_job(w, j)
 
#define STARPU_SCHED_CTX_CHECK_LOCK(sched_ctx_id)
 

Functions

void _starpu_init_all_sched_ctxs (struct _starpu_machine_config *config)
 
struct _starpu_sched_ctx_starpu_create_sched_ctx (struct starpu_sched_policy *policy, int *workerid, int nworkerids, unsigned is_init_sched, const char *sched_name, int min_prio_set, int min_prio, int max_prio_set, int max_prio, unsigned awake_workers, void(*sched_policy_callback)(unsigned), void *user_data, int nsub_ctxs, int *sub_ctxs, int nsms)
 
void _starpu_delete_all_sched_ctxs ()
 
int _starpu_wait_for_all_tasks_of_sched_ctx (unsigned sched_ctx_id)
 
int _starpu_wait_for_n_submitted_tasks_of_sched_ctx (unsigned sched_ctx_id, unsigned n)
 
void _starpu_decrement_nsubmitted_tasks_of_sched_ctx (unsigned sched_ctx_id)
 
void _starpu_increment_nsubmitted_tasks_of_sched_ctx (unsigned sched_ctx_id)
 
int _starpu_get_nsubmitted_tasks_of_sched_ctx (unsigned sched_ctx_id)
 
int _starpu_check_nsubmitted_tasks_of_sched_ctx (unsigned sched_ctx_id)
 
void _starpu_decrement_nready_tasks_of_sched_ctx (unsigned sched_ctx_id, double ready_flops)
 
unsigned _starpu_increment_nready_tasks_of_sched_ctx (unsigned sched_ctx_id, double ready_flops, struct starpu_task *task)
 
int _starpu_wait_for_no_ready_of_sched_ctx (unsigned sched_ctx_id)
 
int _starpu_get_workers_of_sched_ctx (unsigned sched_ctx_id, int *pus, enum starpu_worker_archtype arch)
 
void _starpu_worker_gets_out_of_ctx (unsigned sched_ctx_id, struct _starpu_worker *worker)
 
unsigned _starpu_worker_belongs_to_a_sched_ctx (int workerid, unsigned sched_ctx_id)
 
unsigned _starpu_sched_ctx_last_worker_awake (struct _starpu_worker *worker)
 
unsigned _starpu_sched_ctx_get_current_context () STARPU_ATTRIBUTE_VISIBILITY_DEFAULT
 
int _starpu_workers_able_to_execute_task (struct starpu_task *task, struct _starpu_sched_ctx *sched_ctx)
 
unsigned _starpu_sched_ctx_allow_hypervisor (unsigned sched_ctx_id)
 
struct starpu_perfmodel_arch * _starpu_sched_ctx_get_perf_archtype (unsigned sched_ctx)
 
void _starpu_sched_ctx_post_exec_task_cb (int workerid, struct starpu_task *task, size_t data_size, uint32_t footprint)
 
void starpu_sched_ctx_add_combined_workers (int *combined_workers_to_add, unsigned n_combined_workers_to_add, unsigned sched_ctx_id)
 
struct _starpu_sched_ctx__starpu_sched_ctx_get_sched_ctx_for_worker_and_job (struct _starpu_worker *worker, struct _starpu_job *j)
 
static struct _starpu_sched_ctx_starpu_get_sched_ctx_struct (unsigned id)
 
static int _starpu_sched_ctx_check_write_locked (unsigned sched_ctx_id)
 
static void _starpu_sched_ctx_lock_write (unsigned sched_ctx_id)
 
static void _starpu_sched_ctx_unlock_write (unsigned sched_ctx_id)
 
static void _starpu_sched_ctx_lock_read (unsigned sched_ctx_id)
 
static void _starpu_sched_ctx_unlock_read (unsigned sched_ctx_id)
 
static unsigned _starpu_sched_ctx_worker_is_master_for_child_ctx (unsigned sched_ctx_id, unsigned workerid, struct starpu_task *task)
 
void _starpu_worker_apply_deferred_ctx_changes (void)
 

Data Structure Documentation

◆ _starpu_sched_ctx

struct _starpu_sched_ctx
Data Fields
unsigned id

id of the context used in user mode

unsigned do_schedule

boolean indicating whether the scheduling_ctx will be considered for scheduling (1) or not (0)

const char * name

name of context

struct starpu_sched_policy * sched_policy

policy of the context

void * policy_data

data necessary for the policy

void * user_data

pointer for application use

struct starpu_worker_collection * workers
unsigned is_initial_sched

we keep an initial sched which we never delete

struct _starpu_barrier_counter tasks_barrier

wait for the tasks submitted to the context to be executed

struct _starpu_barrier_counter ready_tasks_barrier

wait for the tasks ready of the context to be executed

double ready_flops

amount of ready flops in a context

long iterations[2]

Iteration number, as advertised by application

int iteration_level
struct starpu_task_list empty_ctx_tasks
struct starpu_task_list waiting_tasks
int min_ncpus

min CPUs to execute

int max_ncpus

max CPUs to execute

int min_ngpus

min GPUs to execute

int max_ngpus

max GPUs to execute

unsigned inheritor

in case we delete the context leave resources to the inheritor

unsigned finished_submit

indicates whether the application finished submitting tasks to this context

int min_priority

By default we have a binary type of priority: either a task is a priority task (level 1) or it is not (level 0).

int max_priority
int min_priority_is_set
int max_priority_is_set
hwloc_bitmap_t hwloc_workers_set

hwloc tree structure of workers

struct starpu_sched_ctx_performance_counters * perf_counters

a structure containing a series of performance counters determining the resize procedure

void(*)(unsigned sched_ctx_id, void *args) close_callback

callback called when the context finished executed its submitted tasks

void * close_args
unsigned hierarchy_level

value placing the contexts in their hierarchy

int main_master

if we execute non-StarPU code inside the context we have a single master worker that stays awake, if not master is -1

unsigned nesting_sched_ctx

ctx nesting the current ctx

struct starpu_perfmodel_arch perf_arch

perf model for the device comb of the ctx

unsigned parallel_view

For parallel workers, say whether it is viewed as sequential or not. This is a helper for the prologue code.

unsigned awake_workers

for ctxs without policy: flag to indicate that we want to get the threads to sleep in order to replace them with other threads or leave them awake & use them in the parallel code

void(*)(unsigned) callback_sched

callback function called when initializing the scheduler

int sub_ctxs[STARPU_NMAXWORKERS]
int nsub_ctxs
int nsms

nr of SMs assigned to this ctx if we partition gpus

int sms_start_idx
int sms_end_idx
int stream_worker
starpu_pthread_rwlock_t rwlock
starpu_pthread_t lock_write_owner

◆ _starpu_ctx_change

struct _starpu_ctx_change

per-worker list of deferred ctx_change ops

Data Fields
int sched_ctx_id
int op
int nworkers_to_notify
int * workerids_to_notify
int nworkers_to_change
int * workerids_to_change

Function Documentation

◆ _starpu_init_all_sched_ctxs()

void _starpu_init_all_sched_ctxs ( struct _starpu_machine_config * config)

init sched_ctx_id of all contextes

◆ _starpu_create_sched_ctx()

struct _starpu_sched_ctx * _starpu_create_sched_ctx ( struct starpu_sched_policy * policy,
int * workerid,
int nworkerids,
unsigned is_init_sched,
const char * sched_name,
int min_prio_set,
int min_prio,
int max_prio_set,
int max_prio,
unsigned awake_workers,
void(* sched_policy_callback )(unsigned),
void * user_data,
int nsub_ctxs,
int * sub_ctxs,
int nsms )

allocate all structures belonging to a context

◆ _starpu_delete_all_sched_ctxs()

void _starpu_delete_all_sched_ctxs ( )

delete all sched_ctx

◆ _starpu_wait_for_all_tasks_of_sched_ctx()

int _starpu_wait_for_all_tasks_of_sched_ctx ( unsigned sched_ctx_id)

This function waits until all the tasks that were already submitted to a specific context have been executed.

◆ _starpu_wait_for_n_submitted_tasks_of_sched_ctx()

int _starpu_wait_for_n_submitted_tasks_of_sched_ctx ( unsigned sched_ctx_id,
unsigned n )

This function waits until at most n tasks are still submitted.

◆ _starpu_decrement_nsubmitted_tasks_of_sched_ctx()

void _starpu_decrement_nsubmitted_tasks_of_sched_ctx ( unsigned sched_ctx_id)

In order to implement starpu_wait_for_all_tasks_of_ctx, we keep track of the number of task currently submitted to the context

◆ _starpu_get_workers_of_sched_ctx()

int _starpu_get_workers_of_sched_ctx ( unsigned sched_ctx_id,
int * pus,
enum starpu_worker_archtype arch )

Get workers belonging to a certain context, it returns the number of workers take care: no mutex taken, the list of workers might not be updated

◆ _starpu_worker_gets_out_of_ctx()

void _starpu_worker_gets_out_of_ctx ( unsigned sched_ctx_id,
struct _starpu_worker * worker )

Let the worker know it does not belong to the context and that it should stop poping from it

◆ _starpu_worker_belongs_to_a_sched_ctx()

unsigned _starpu_worker_belongs_to_a_sched_ctx ( int workerid,
unsigned sched_ctx_id )

Check if the worker belongs to another sched_ctx

◆ _starpu_sched_ctx_last_worker_awake()

unsigned _starpu_sched_ctx_last_worker_awake ( struct _starpu_worker * worker)

indicates whether this worker should go to sleep or not (if it is the last one awake in a context he should better keep awake)

◆ _starpu_sched_ctx_get_current_context()

unsigned _starpu_sched_ctx_get_current_context ( )

If starpu_sched_ctx_set_context() has been called, returns the context id set by its last call, or the id of the initial context

◆ _starpu_workers_able_to_execute_task()

int _starpu_workers_able_to_execute_task ( struct starpu_task * task,
struct _starpu_sched_ctx * sched_ctx )

verify that some worker can execute a certain task

◆ _starpu_sched_ctx_post_exec_task_cb()

void _starpu_sched_ctx_post_exec_task_cb ( int workerid,
struct starpu_task * task,
size_t data_size,
uint32_t footprint )

Notifies the hypervisor that a tasks was poped from the workers' list

◆ __starpu_sched_ctx_get_sched_ctx_for_worker_and_job()

struct _starpu_sched_ctx * __starpu_sched_ctx_get_sched_ctx_for_worker_and_job ( struct _starpu_worker * worker,
struct _starpu_job * j )

if the worker is the master of a parallel context, and the job is meant to be executed on this parallel context, return a pointer to the context

◆ _starpu_worker_apply_deferred_ctx_changes()

void _starpu_worker_apply_deferred_ctx_changes ( void )

Go through the list of deferred ctx changes of the current worker and apply any ctx change operation found until the list is empty