Skip to content
Snippets Groups Projects
Commit 363dcbd5 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Revert "Follow advice from the optimization report in scheduler_set_unlocks()"

This reverts commit 004fd34d.
parent 733f2de2
No related branches found
No related tags found
1 merge request!576Gravity splittask (non-MPI)
......@@ -1066,20 +1066,13 @@ struct task *scheduler_addtask(struct scheduler *s, enum task_types type,
*/
void scheduler_set_unlocks(struct scheduler *s) {
/* Extract constant information and make non-volatile pointers */
const int nr_tasks = s->nr_tasks;
const int nr_unlocks = s->nr_unlocks;
int* unlock_ind = (int*) s->unlock_ind;
struct task **unlocks = (struct task **) s->unlocks;
/* Store the counts for each task. */
int *counts;
if (posix_memalign((void **) &counts, 64, sizeof(int) * nr_tasks) != 0)
short int *counts;
if ((counts = (short int *)malloc(sizeof(short int) * s->nr_tasks)) == NULL)
error("Failed to allocate temporary counts array.");
swift_align_information(int, counts, 64);
bzero(counts, sizeof(int) * nr_tasks);
for (int k = 0; k < nr_unlocks; k++) {
counts[unlock_ind[k]] += 1;
bzero(counts, sizeof(short int) * s->nr_tasks);
for (int k = 0; k < s->nr_unlocks; k++) {
counts[s->unlock_ind[k]] += 1;
#ifdef SWIFT_DEBUG_CHECKS
/* Check that we are not overflowing */
......@@ -1093,10 +1086,10 @@ void scheduler_set_unlocks(struct scheduler *s) {
/* Compute the offset for each unlock block. */
int *offsets;
if (posix_memalign((void **) &offsets, 64, sizeof(int) * (nr_tasks + 1)) != 0)
if ((offsets = (int *)malloc(sizeof(int) * (s->nr_tasks + 1))) == NULL)
error("Failed to allocate temporary offsets array.");
offsets[0] = 0;
for (int k = 0; k < nr_tasks; k++) {
for (int k = 0; k < s->nr_tasks; k++) {
offsets[k + 1] = offsets[k] + counts[k];
#ifdef SWIFT_DEBUG_CHECKS
......@@ -1106,31 +1099,30 @@ void scheduler_set_unlocks(struct scheduler *s) {
}
/* Create and fill a temporary array with the sorted unlocks. */
struct task **new_unlocks;
if (posix_memalign((void **) &new_unlocks, 64, sizeof(struct task *) * s->size_unlocks) != 0)
struct task **unlocks;
if ((unlocks = (struct task **)malloc(sizeof(struct task *) *
s->size_unlocks)) == NULL)
error("Failed to allocate temporary unlocks array.");
for (int k = 0; k < nr_unlocks; k++) {
const int ind = unlock_ind[k];
new_unlocks[offsets[ind]] = unlocks[k];
for (int k = 0; k < s->nr_unlocks; k++) {
const int ind = s->unlock_ind[k];
unlocks[offsets[ind]] = s->unlocks[k];
offsets[ind] += 1;
}
/* Swap the unlocks. */
free(s->unlocks);
s->unlocks = new_unlocks;
s->unlocks = unlocks;
/* Re-set the offsets. */
offsets[0] = 0;
for (int k = 1; k < nr_tasks; k++)
for (int k = 1; k < s->nr_tasks; k++)
offsets[k] = offsets[k - 1] + counts[k - 1];
/* Set the unlocks in the tasks. */
swift_align_information(int, counts, 64);
swift_align_information(int, offsets, 64);
for (int k = 0; k < nr_tasks; k++) {
for (int k = 0; k < s->nr_tasks; k++) {
struct task *t = &s->tasks[k];
t->nr_unlock_tasks = counts[k];
t->unlock_tasks = &new_unlocks[offsets[k]];
t->unlock_tasks = &s->unlocks[offsets[k]];
}
#ifdef SWIFT_DEBUG_CHECKS
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment