diff --git a/src/cell.c b/src/cell.c index 7edee4d9ae1c02311af295bb6eba5c846a94259c..7572ffa661755ef3e51dc895f576c85b07779e16 100644 --- a/src/cell.c +++ b/src/cell.c @@ -1889,6 +1889,13 @@ void cell_set_super(struct cell *c, struct cell *super) { if (c->progeny[k] != NULL) cell_set_super(c->progeny[k], super); } +void cell_set_super_mapper(void *map_data, int num_elements, void *extra_data) { + for (int ind = 0; ind < num_elements; ind++) { + struct cell *c = &((struct cell *)map_data)[ind]; + cell_set_super(c, NULL); + } +} + /** * @brief Recursively drifts the #part in a cell hierarchy. * diff --git a/src/cell.h b/src/cell.h index ef887d10e6867ec3db58b694e0c62949d19e9e7e..320e226a7f6c536bf0f051fc2ec56338d87525fc 100644 --- a/src/cell.h +++ b/src/cell.h @@ -404,6 +404,7 @@ void cell_activate_subcell_tasks(struct cell *ci, struct cell *cj, void cell_activate_drift_part(struct cell *c, struct scheduler *s); void cell_activate_sorts(struct cell *c, int sid, struct scheduler *s); void cell_clear_drift_flags(struct cell *c, void *data); +void cell_set_super_mapper(void *map_data, int num_elements, void *extra_data); /* Inlined functions (for speed). */ diff --git a/src/engine.c b/src/engine.c index 5cd1857c560b51b0b5c85fb05e45d85a24bfbf1d..287498f8ab5017a200c9b6665e4e4a43dcaf70fe 100644 --- a/src/engine.c +++ b/src/engine.c @@ -2506,7 +2506,8 @@ void engine_maketasks(struct engine *e) { /* Now that the self/pair tasks are at the right level, set the super * pointers. */ - for (int k = 0; k < nr_cells; k++) cell_set_super(&cells[k], NULL); + threadpool_map(&e->threadpool, cell_set_super_mapper, cells, nr_cells, + sizeof(struct cell), 0, NULL); /* Append hierarchical tasks to each cell. */ for (int k = 0; k < nr_cells; k++)