Просмотр исходного кода

Make failure to compute non-linear regression non-fatal, but warn about it

Samuel Thibault лет назад: 5
Родитель
Сommit
b1542ef46b
2 измененных файлов с 6 добавлено и 3 удалено
  1. 4 2
      src/core/perfmodel/perfmodel_history.c
  2. 2 1
      src/core/perfmodel/regression.c

+ 4 - 2
src/core/perfmodel/perfmodel_history.c

@@ -343,8 +343,10 @@ static void dump_reg_model(FILE *f, struct starpu_perfmodel *model, int comb, in
 
 	double a = nan(""), b = nan(""), c = nan("");
 
-	if (model->type == STARPU_NL_REGRESSION_BASED)
-		_starpu_regression_non_linear_power(per_arch_model->list, &a, &b, &c);
+	if (model->type == STARPU_NL_REGRESSION_BASED) {
+		if (_starpu_regression_non_linear_power(per_arch_model->list, &a, &b, &c) != 0)
+			_STARPU_DISP("Warning: could not compute a non-linear regression for model %s\n", model->symbol);
+	}
 
 	fprintf(f, "# a\t\tb\t\tc\n");
 	_starpu_write_double(f, "%-15e", a);

+ 2 - 1
src/core/perfmodel/regression.c

@@ -223,7 +223,8 @@ static void dump_list(size_t *x, double *y, unsigned *pop, struct starpu_perfmod
 int _starpu_regression_non_linear_power(struct starpu_perfmodel_history_list *ptr, double *a, double *b, double *c)
 {
 	unsigned n = find_list_size(ptr);
-	STARPU_ASSERT(n);
+	if (!n)
+		return -1;
 
 	size_t *x;
 	_STARPU_MALLOC(x, n*sizeof(size_t));