Selaa lähdekoodia

src/core/perfmodel/perfmodel_history.c: do not allocate per_arch object if already allocated

Nathalie Furmento 11 vuotta sitten
vanhempi
commit
3a634d01c2
1 muutettua tiedostoa jossa 15 lisäystä ja 5 poistoa
  1. 15 5
      src/core/perfmodel/perfmodel_history.c

+ 15 - 5
src/core/perfmodel/perfmodel_history.c

@@ -368,12 +368,22 @@ static void parse_arch(FILE *f, struct starpu_perfmodel *model, unsigned scan_hi
 		/* Parsing each implementation */
 		implmax = STARPU_MIN(nimpls, STARPU_MAXIMPLEMENTATIONS);
 		model->state->nimpls[comb] = implmax;
-		model->state->per_arch[comb] = (struct starpu_perfmodel_per_arch*)malloc(STARPU_MAXIMPLEMENTATIONS*sizeof(struct starpu_perfmodel_per_arch));
-		model->state->per_arch_is_set[comb] = (int *)malloc(STARPU_MAXIMPLEMENTATIONS*sizeof(int));
-		for(i = 0; i < STARPU_MAXIMPLEMENTATIONS; i++)
+		if (!model->state->per_arch[comb])
 		{
-			memset(&model->state->per_arch[comb][i], 0, sizeof(struct starpu_perfmodel_per_arch));
-			model->state->per_arch_is_set[comb][i] = 0;
+			model->state->per_arch[comb] = (struct starpu_perfmodel_per_arch*)malloc(STARPU_MAXIMPLEMENTATIONS*sizeof(struct starpu_perfmodel_per_arch));
+			for(i = 0; i < STARPU_MAXIMPLEMENTATIONS; i++)
+			{
+				memset(&model->state->per_arch[comb][i], 0, sizeof(struct starpu_perfmodel_per_arch));
+			}
+			fprintf(stderr, "[parse] allocating per_arch for model %p %s and comb %d --> %p\n", model, model->symbol, comb, model->state->per_arch[comb]);
+		}
+		if (!model->state->per_arch_is_set[comb])
+		{
+			model->state->per_arch_is_set[comb] = (int *)malloc(STARPU_MAXIMPLEMENTATIONS*sizeof(int));
+			for(i = 0; i < STARPU_MAXIMPLEMENTATIONS; i++)
+			{
+				model->state->per_arch_is_set[comb][i] = 0;
+			}
 		}
 
 		for (impl = 0; impl < implmax; impl++)