Skip to content

Commit

Permalink
parallel_worker: Avoid spurious allocation for request list
Browse files Browse the repository at this point in the history
We don't need the pointer, we can just check for the list being empty
  • Loading branch information
sthibaul committed May 1, 2024
1 parent 6f736be commit f566958
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 26 deletions.
29 changes: 14 additions & 15 deletions src/parallel_worker/starpu_parallel_worker_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ struct starpu_parallel_worker_config *_starpu_parallel_worker_init_varg(hwloc_ob
_starpu_parallel_worker_group_list_push_back(&machine->groups, group);
}
_starpu_parallel_worker_init(parallel_worker, group);
_starpu_parallel_worker_list_push_back(group->parallel_workers, parallel_worker);
_starpu_parallel_worker_list_push_back(&group->parallel_workers, parallel_worker);
machine->params = parallel_worker->params;
}
else if (arg_type == STARPU_PARALLEL_WORKER_NCORES)
Expand All @@ -215,7 +215,7 @@ struct starpu_parallel_worker_config *_starpu_parallel_worker_init_varg(hwloc_ob
_starpu_parallel_worker_group_init(group, machine);
_starpu_parallel_worker_group_list_push_back(&machine->groups, group);
}
struct _starpu_parallel_worker *parallel_worker =_starpu_parallel_worker_list_back(group->parallel_workers);
struct _starpu_parallel_worker *parallel_worker =_starpu_parallel_worker_list_back(&group->parallel_workers);
parallel_worker->ncores = va_arg(varg_list, unsigned);
}
else
Expand Down Expand Up @@ -301,8 +301,8 @@ int starpu_parallel_worker_print(struct starpu_parallel_worker_config *parallel_
group != _starpu_parallel_worker_group_list_end(&parallel_workers->groups);
group = _starpu_parallel_worker_group_list_next(group))
{
for (parallel_worker = _starpu_parallel_worker_list_begin(group->parallel_workers);
parallel_worker != _starpu_parallel_worker_list_end(group->parallel_workers);
for (parallel_worker = _starpu_parallel_worker_list_begin(&group->parallel_workers);
parallel_worker != _starpu_parallel_worker_list_end(&group->parallel_workers);
parallel_worker = _starpu_parallel_worker_list_next(parallel_worker))
{
printf("Parallel worker %d contains the following logical indexes:\n\t", cnt);
Expand Down Expand Up @@ -340,8 +340,8 @@ int _starpu_parallel_worker_create(struct _starpu_parallel_worker *parallel_work
int _starpu_parallel_worker_group_create(struct _starpu_parallel_worker_group *group)
{
struct _starpu_parallel_worker *c;
for (c = _starpu_parallel_worker_list_begin(group->parallel_workers) ;
c != _starpu_parallel_worker_list_end(group->parallel_workers) ;
for (c = _starpu_parallel_worker_list_begin(&group->parallel_workers) ;
c != _starpu_parallel_worker_list_end(&group->parallel_workers) ;
c = _starpu_parallel_worker_list_next(c))
{
if (c->ncores == 0)
Expand All @@ -364,8 +364,8 @@ void _starpu_parallel_workers_set_nesting(struct starpu_parallel_worker_config *
g != _starpu_parallel_worker_group_list_end(&m->groups) ;
g = _starpu_parallel_worker_group_list_next(g))
{
for (c = _starpu_parallel_worker_list_begin(g->parallel_workers) ;
c != _starpu_parallel_worker_list_end(g->parallel_workers) ;
for (c = _starpu_parallel_worker_list_begin(&g->parallel_workers) ;
c != _starpu_parallel_worker_list_end(&g->parallel_workers) ;
c = _starpu_parallel_worker_list_next(c))
_starpu_get_sched_ctx_struct(c->id)->nesting_sched_ctx = m->id;
}
Expand Down Expand Up @@ -398,7 +398,7 @@ void _starpu_parallel_worker_group_init(struct _starpu_parallel_worker_group *gr
{
group->id = 0;
group->nparallel_workers = 0;
group->parallel_workers = _starpu_parallel_worker_list_new();
_starpu_parallel_worker_list_init(&group->parallel_workers);
group->parent = parent;
_STARPU_MALLOC(group->params, sizeof(struct _starpu_parallel_worker_parameters));
_starpu_parallel_worker_copy_parameters(parent->params, group->params);
Expand Down Expand Up @@ -438,15 +438,14 @@ int _starpu_parallel_worker_remove(struct _starpu_parallel_worker_list *parallel

int _starpu_parallel_worker_group_remove(struct _starpu_parallel_worker_group_list *group_list, struct _starpu_parallel_worker_group *group)
{
struct _starpu_parallel_worker_list *parallel_worker_list = group->parallel_workers;
struct _starpu_parallel_worker_list *parallel_worker_list = &group->parallel_workers;
struct _starpu_parallel_worker *c = _starpu_parallel_worker_list_begin(parallel_worker_list);
while (c != _starpu_parallel_worker_list_end(parallel_worker_list))
{
struct _starpu_parallel_worker *tmp = c;
c = _starpu_parallel_worker_list_next(c);
_starpu_parallel_worker_remove(parallel_worker_list, tmp);
}
_starpu_parallel_worker_list_delete(parallel_worker_list);

free(group->params);
_starpu_parallel_worker_group_list_erase(group_list, group);
Expand Down Expand Up @@ -673,8 +672,8 @@ void _starpu_parallel_worker(struct _starpu_parallel_worker_group *group)

/* Preset parallel_workers */
avail_pus = npus;
for (parallel_worker=_starpu_parallel_worker_list_begin(group->parallel_workers);
parallel_worker!=_starpu_parallel_worker_list_end(group->parallel_workers);
for (parallel_worker=_starpu_parallel_worker_list_begin(&group->parallel_workers);
parallel_worker!=_starpu_parallel_worker_list_end(&group->parallel_workers);
parallel_worker=_starpu_parallel_worker_list_next(parallel_worker))
{
if (parallel_worker->ncores > avail_pus)
Expand All @@ -699,7 +698,7 @@ void _starpu_parallel_worker(struct _starpu_parallel_worker_group *group)
{
parallel_worker = _starpu_parallel_worker_new();
_starpu_parallel_worker_init(parallel_worker, group);
_starpu_parallel_worker_list_push_back(group->parallel_workers, parallel_worker);
_starpu_parallel_worker_list_push_back(&group->parallel_workers, parallel_worker);
}

if (parallel_worker->ncores != 0 && parallel_worker->ncores > avail_pus)
Expand All @@ -723,7 +722,7 @@ void _starpu_parallel_worker(struct _starpu_parallel_worker_group *group)
}
group->nparallel_workers += npreset;

parallel_worker = _starpu_parallel_worker_list_begin(group->parallel_workers);
parallel_worker = _starpu_parallel_worker_list_begin(&group->parallel_workers);
int count = 0;
static int starpu_parallel_worker_warned = 0;

Expand Down
22 changes: 11 additions & 11 deletions src/parallel_worker/starpu_parallel_worker_create.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,21 @@ extern

#pragma GCC visibility push(hidden)

LIST_TYPE(_starpu_parallel_worker,
unsigned id;
hwloc_cpuset_t cpuset;
int ncores;
int *cores;
int *workerids;
struct _starpu_parallel_worker_group *parent;
struct _starpu_parallel_worker_parameters *params;
)

LIST_TYPE(_starpu_parallel_worker_group,
unsigned id;
hwloc_obj_t group_obj;
int nparallel_workers;
struct _starpu_parallel_worker_list *parallel_workers;
struct _starpu_parallel_worker_list parallel_workers;
struct starpu_parallel_worker_config *parent;
struct _starpu_parallel_worker_parameters *params;
)
Expand Down Expand Up @@ -70,16 +80,6 @@ struct _starpu_parallel_worker_parameters
unsigned awake_workers;
};

LIST_TYPE(_starpu_parallel_worker,
unsigned id;
hwloc_cpuset_t cpuset;
int ncores;
int *cores;
int *workerids;
struct _starpu_parallel_worker_group *parent;
struct _starpu_parallel_worker_parameters *params;
)

/** Machine discovery and parallel_worker creation main functions */
int _starpu_parallel_worker_config(hwloc_obj_type_t parallel_worker_level, struct starpu_parallel_worker_config *machine);
int _starpu_parallel_worker_topology(hwloc_obj_type_t parallel_worker_level, struct starpu_parallel_worker_config *machine);
Expand Down

0 comments on commit f566958

Please sign in to comment.