Explorar o código

add starpu_get_env_float_default helper and take benefit from it

Samuel Thibault %!s(int64=10) %!d(string=hai) anos
pai
achega
612a88a40b

+ 28 - 0
include/starpu_util.h

@@ -263,6 +263,34 @@ static __starpu_inline int starpu_get_env_number_default(const char *str, int de
 	return ret;
 }
 
+static __starpu_inline float starpu_get_env_float_default(const char *str, float defval)
+{
+	char *strval;
+
+	strval = getenv(str);
+	if (strval)
+	{
+		/* the env variable was actually set */
+		float val;
+		char *check;
+
+		val = strtof(strval, &check);
+		if (*check) {
+			fprintf(stderr,"The %s environment variable must contain an integer\n", str);
+			STARPU_ABORT();
+		}
+
+		/* fprintf(stderr, "ENV %s WAS %f\n", str, val); */
+		return val;
+	}
+	else
+	{
+		/* there is no such env variable */
+		/* fprintf("There was no %s ENV\n", str); */
+		return defval;
+	}
+}
+
 void starpu_execute_on_each_worker(void (*func)(void *), void *arg, uint32_t where);
 
 void starpu_execute_on_each_worker_ex(void (*func)(void *), void *arg, uint32_t where, const char *name);

+ 4 - 19
src/sched_policies/deque_modeling_policy_data_aware.c

@@ -853,10 +853,6 @@ static void initialize_dmda_policy(unsigned sched_ctx_id)
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 
 	struct _starpu_dmda_data *dt = (struct _starpu_dmda_data*)malloc(sizeof(struct _starpu_dmda_data));
-	dt->alpha = _STARPU_SCHED_ALPHA_DEFAULT;
-	dt->beta = _STARPU_SCHED_BETA_DEFAULT;
-	dt->_gamma = _STARPU_SCHED_GAMMA_DEFAULT;
-	dt->idle_power = 0.0;
 
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)dt);
 
@@ -866,21 +862,10 @@ static void initialize_dmda_policy(unsigned sched_ctx_id)
 	for(i = 0; i < STARPU_NMAXWORKERS; i++)
 		dt->queue_array[i] = NULL;
 
-	const char *strval_alpha = getenv("STARPU_SCHED_ALPHA");
-	if (strval_alpha)
-		dt->alpha = atof(strval_alpha);
-
-	const char *strval_beta = getenv("STARPU_SCHED_BETA");
-	if (strval_beta)
-		dt->beta = atof(strval_beta);
-
-	const char *strval_gamma = getenv("STARPU_SCHED_GAMMA");
-	if (strval_gamma)
-		dt->_gamma = atof(strval_gamma);
-
-	const char *strval_idle_power = getenv("STARPU_IDLE_POWER");
-	if (strval_idle_power)
-		dt->idle_power = atof(strval_idle_power);
+	dt->alpha = starpu_get_env_float_default("STARPU_SCHED_ALPHA", _STARPU_SCHED_ALPHA_DEFAULT);
+	dt->beta = starpu_get_env_float_default("STARPU_SCHED_BETA", _STARPU_SCHED_BETA_DEFAULT);
+	dt->_gamma = starpu_get_env_float_default("STARPU_SCHED_GAMMA", _STARPU_SCHED_GAMMA_DEFAULT);
+	dt->idle_power = starpu_get_env_float_default("STARPU_IDLE_POWER", 0.0);
 
 #ifdef STARPU_USE_TOP
 	/* FIXME: broken, needs to access context variable */

+ 9 - 30
src/sched_policies/helper_mct.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2013  Université de Bordeaux 1
+ * Copyright (C) 2013-2014  Université de Bordeaux 1
  * Copyright (C) 2013  INRIA
  * Copyright (C) 2013  Simon Archipoff
  *
@@ -55,36 +55,15 @@ struct _starpu_mct_data *starpu_mct_init_parameters(struct starpu_sched_componen
 	{
 		data->alpha = params->alpha;
 		data->beta = params->beta;
-		data->gamma = params->gamma;
+		data->_gamma = params->_gamma;
 		data->idle_power = params->idle_power;
 	}
 	else
 	{
-		double alpha = _STARPU_SCHED_ALPHA_DEFAULT,
-		       beta = _STARPU_SCHED_BETA_DEFAULT,
-		       _gamma = _STARPU_SCHED_GAMMA_DEFAULT,
-		       idle_power = 0.0;
-
-		const char *strval_alpha = getenv("STARPU_SCHED_ALPHA");
-		if (strval_alpha)
-			alpha = atof(strval_alpha);
-
-		const char *strval_beta = getenv("STARPU_SCHED_BETA");
-		if (strval_beta)
-			beta = atof(strval_beta);
-
-		const char *strval_gamma = getenv("STARPU_SCHED_GAMMA");
-		if (strval_gamma)
-			_gamma = atof(strval_gamma);
-
-		const char *strval_idle_power = getenv("STARPU_IDLE_POWER");
-		if (strval_idle_power)
-			idle_power = atof(strval_idle_power);
-
-		data->alpha = alpha;
-		data->beta = beta;
-		data->gamma = _gamma;
-		data->idle_power = idle_power;
+		data->alpha = starpu_get_env_float_default("STARPU_SCHED_ALPHA", _STARPU_SCHED_ALPHA_DEFAULT);
+		data->beta = starpu_get_env_float_default("STARPU_SCHED_BETA", _STARPU_SCHED_BETA_DEFAULT);
+		data->_gamma = starpu_get_env_float_default("STARPU_SCHED_GAMMA", _STARPU_SCHED_GAMMA_DEFAULT);
+		data->idle_power = starpu_get_env_float_default("STARPU_IDLE_POWER", 0.0);
 	}
 
 #ifdef STARPU_USE_TOP
@@ -92,7 +71,7 @@ struct _starpu_mct_data *starpu_mct_init_parameters(struct starpu_sched_componen
 					    alpha_minimum, alpha_maximum, param_modified);
 	starpu_top_register_parameter_float("MCT_BETA", &data->beta,
 					    beta_minimum, beta_maximum, param_modified);
-	starpu_top_register_parameter_float("MCT_GAMMA", &data->gamma,
+	starpu_top_register_parameter_float("MCT_GAMMA", &data->_gamma,
 					    gamma_minimum, gamma_maximum, param_modified);
 	starpu_top_register_parameter_float("MCT_IDLE_POWER", &data->idle_power,
 					    idle_power_minimum, idle_power_maximum, param_modified);
@@ -134,8 +113,8 @@ double starpu_mct_compute_fitness(struct _starpu_mct_data * d, double exp_end, d
 
 	return d->alpha * (exp_end - min_exp_end)
 		+ d->beta * transfer_len
-		+ d->gamma * local_power
-		+ d->gamma * d->idle_power * (exp_end - max_exp_end);
+		+ d->_gamma * local_power
+		+ d->_gamma * d->idle_power * (exp_end - max_exp_end);
 }
 
 int starpu_mct_compute_expected_times(struct starpu_sched_component *component, struct starpu_task *task,

+ 2 - 2
src/sched_policies/helper_mct.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2013  Université de Bordeaux 1
+ * Copyright (C) 2013-2014  Université de Bordeaux 1
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -18,7 +18,7 @@ struct _starpu_mct_data
 {
 	double alpha;
 	double beta;
-	double gamma;
+	double _gamma;
 	double idle_power;
 };
 

+ 2 - 13
src/sched_policies/modular_eager_prefetching.c

@@ -23,19 +23,8 @@
 
 static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id)
 {
-	unsigned ntasks_threshold = _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT;
-	double exp_len_threshold = _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT;
-
 	_STARPU_DISP("Warning: you are running the default modular-eager-prefetching scheduler, which is not very smart. Make sure to read the StarPU documentation about adding performance models in order to be able to use the modular-heft scheduler instead.\n");
 
-	const char *strval_ntasks_threshold = getenv("STARPU_NTASKS_THRESHOLD");
-	if (strval_ntasks_threshold)
-		ntasks_threshold = atof(strval_ntasks_threshold);
-
-	const char *strval_exp_len_threshold = getenv("STARPU_EXP_LEN_THRESHOLD");
-	if (strval_exp_len_threshold)
-		exp_len_threshold = atof(strval_exp_len_threshold);
-
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct starpu_sched_tree *t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
@@ -45,8 +34,8 @@ static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id)
 
 	struct starpu_sched_component_fifo_data fifo_data =
 		{
-			.ntasks_threshold = ntasks_threshold,
-			.exp_len_threshold = exp_len_threshold,
+			.ntasks_threshold = starpu_get_env_number_default("STARPU_NTASKS_THRESHOLD", _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT),
+			.exp_len_threshold = starpu_get_env_float_default("STARPU_EXP_LEN_THRESHOLD", _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT),
 		};
 
 	unsigned i;

+ 2 - 14
src/sched_policies/modular_heft.c

@@ -41,18 +41,6 @@ static void initialize_heft_center_policy(unsigned sched_ctx_id)
 	if (starpu_sched_ctx_max_priority_is_set(sched_ctx_id) == 0)
 		starpu_sched_ctx_set_max_priority(sched_ctx_id, INT_MAX);
 
-	unsigned ntasks_threshold = _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT;
-	double exp_len_threshold = _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT;
-
-	const char *strval_ntasks_threshold = getenv("STARPU_NTASKS_THRESHOLD");
-	if (strval_ntasks_threshold)
-		ntasks_threshold = atof(strval_ntasks_threshold);
-
-	const char *strval_exp_len_threshold = getenv("STARPU_EXP_LEN_THRESHOLD");
-	if (strval_exp_len_threshold)
-		exp_len_threshold = atof(strval_exp_len_threshold);
-
-
 /* The scheduling strategy look like this :
  *
  *                                    |
@@ -108,8 +96,8 @@ static void initialize_heft_center_policy(unsigned sched_ctx_id)
 
 	struct starpu_sched_component_prio_data prio_data =
 		{
-			.ntasks_threshold = ntasks_threshold,
-			.exp_len_threshold = exp_len_threshold,
+			.ntasks_threshold = starpu_get_env_number_default("STARPU_NTASKS_THRESHOLD", _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT),
+			.exp_len_threshold = starpu_get_env_float_default("STARPU_EXP_LEN_THRESHOLD", _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT),
 		};
 
 	unsigned i;

+ 2 - 14
src/sched_policies/modular_heft2.c

@@ -41,18 +41,6 @@ static void initialize_heft2_center_policy(unsigned sched_ctx_id)
 	if (starpu_sched_ctx_max_priority_is_set(sched_ctx_id) == 0)
 		starpu_sched_ctx_set_max_priority(sched_ctx_id, INT_MAX);
 
-	unsigned ntasks_threshold = _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT;
-	double exp_len_threshold = _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT;
-
-	const char *strval_ntasks_threshold = getenv("STARPU_NTASKS_THRESHOLD");
-	if (strval_ntasks_threshold)
-		ntasks_threshold = atof(strval_ntasks_threshold);
-
-	const char *strval_exp_len_threshold = getenv("STARPU_EXP_LEN_THRESHOLD");
-	if (strval_exp_len_threshold)
-		exp_len_threshold = atof(strval_exp_len_threshold);
-
-
 	struct starpu_sched_tree * t = starpu_sched_tree_create(sched_ctx_id);
 
 	struct starpu_sched_component * window_component = starpu_sched_component_prio_create(t, NULL);
@@ -82,8 +70,8 @@ static void initialize_heft2_center_policy(unsigned sched_ctx_id)
 
 	struct starpu_sched_component_prio_data prio_data =
 		{
-			.ntasks_threshold = ntasks_threshold,
-			.exp_len_threshold = exp_len_threshold,
+			.ntasks_threshold = starpu_get_env_number_default("STARPU_NTASKS_THRESHOLD", _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT),
+			.exp_len_threshold = starpu_get_env_float_default("STARPU_EXP_LEN_THRESHOLD", _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT),
 		};
 
 	unsigned i;

+ 2 - 14
src/sched_policies/modular_prio_prefetching.c

@@ -22,18 +22,6 @@
 
 static void initialize_prio_prefetching_center_policy(unsigned sched_ctx_id)
 {
-	unsigned ntasks_threshold = _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT;
-	double exp_len_threshold = _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT;
-
-	const char *strval_ntasks_threshold = getenv("STARPU_NTASKS_THRESHOLD");
-	if (strval_ntasks_threshold)
-		ntasks_threshold = atof(strval_ntasks_threshold);
-
-	const char *strval_exp_len_threshold = getenv("STARPU_EXP_LEN_THRESHOLD");
-	if (strval_exp_len_threshold)
-		exp_len_threshold = atof(strval_exp_len_threshold);
-
-	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct starpu_sched_tree *t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_prio_create(t, NULL);
 	struct starpu_sched_component * eager_component = starpu_sched_component_eager_create(t, NULL);
@@ -42,8 +30,8 @@ static void initialize_prio_prefetching_center_policy(unsigned sched_ctx_id)
 
 	struct starpu_sched_component_prio_data prio_data =
 		{
-			.ntasks_threshold = ntasks_threshold,
-			.exp_len_threshold = exp_len_threshold,
+			.ntasks_threshold = starpu_get_env_number_default("STARPU_NTASKS_THRESHOLD", _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT),
+			.exp_len_threshold = starpu_get_env_float_default("STARPU_EXP_LEN_THRESHOLD", _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT),
 		};
 
 	unsigned i;

+ 4 - 26
src/sched_policies/modular_random_prefetching.c

@@ -25,17 +25,6 @@
 
 static void initialize_random_fifo_prefetching_center_policy(unsigned sched_ctx_id)
 {
-	unsigned ntasks_threshold = _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT;
-	double exp_len_threshold = _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT;
-
-	const char *strval_ntasks_threshold = getenv("STARPU_NTASKS_THRESHOLD");
-	if (strval_ntasks_threshold)
-		ntasks_threshold = atof(strval_ntasks_threshold);
-
-	const char *strval_exp_len_threshold = getenv("STARPU_EXP_LEN_THRESHOLD");
-	if (strval_exp_len_threshold)
-		exp_len_threshold = atof(strval_exp_len_threshold);
-
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct starpu_sched_tree *t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_fifo_create(t, NULL);
@@ -45,8 +34,8 @@ static void initialize_random_fifo_prefetching_center_policy(unsigned sched_ctx_
 
 	struct starpu_sched_component_fifo_data fifo_data =
 		{
-			.ntasks_threshold = ntasks_threshold,
-			.exp_len_threshold = exp_len_threshold,
+			.ntasks_threshold = starpu_get_env_number_default("STARPU_NTASKS_THRESHOLD", _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT),
+			.exp_len_threshold = starpu_get_env_float_default("STARPU_EXP_LEN_THRESHOLD", _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT),
 		};
 
 	unsigned i;
@@ -92,17 +81,6 @@ struct starpu_sched_policy _starpu_sched_modular_random_prefetching_policy =
 
 static void initialize_random_prio_prefetching_center_policy(unsigned sched_ctx_id)
 {
-	unsigned ntasks_threshold = _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT;
-	double exp_len_threshold = _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT;
-
-	const char *strval_ntasks_threshold = getenv("STARPU_NTASKS_THRESHOLD");
-	if (strval_ntasks_threshold)
-		ntasks_threshold = atof(strval_ntasks_threshold);
-
-	const char *strval_exp_len_threshold = getenv("STARPU_EXP_LEN_THRESHOLD");
-	if (strval_exp_len_threshold)
-		exp_len_threshold = atof(strval_exp_len_threshold);
-
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct starpu_sched_tree *t = starpu_sched_tree_create(sched_ctx_id);
  	t->root = starpu_sched_component_prio_create(t, NULL);
@@ -112,8 +90,8 @@ static void initialize_random_prio_prefetching_center_policy(unsigned sched_ctx_
 
 	struct starpu_sched_component_prio_data prio_data =
 		{
-			.ntasks_threshold = ntasks_threshold,
-			.exp_len_threshold = exp_len_threshold,
+			.ntasks_threshold = starpu_get_env_number_default("STARPU_NTASKS_THRESHOLD", _STARPU_SCHED_NTASKS_THRESHOLD_DEFAULT),
+			.exp_len_threshold = starpu_get_env_float_default("STARPU_EXP_LEN_THRESHOLD", _STARPU_SCHED_EXP_LEN_THRESHOLD_DEFAULT),
 		};
 
 	unsigned i;

+ 4 - 19
src/sched_policies/parallel_heft.c

@@ -550,10 +550,6 @@ static void initialize_parallel_heft_policy(unsigned sched_ctx_id)
 {
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct _starpu_pheft_data *hd = (struct _starpu_pheft_data*)malloc(sizeof(struct _starpu_pheft_data));
-	hd->alpha = _STARPU_SCHED_ALPHA_DEFAULT;
-	hd->beta = _STARPU_SCHED_BETA_DEFAULT;
-	hd->_gamma = _STARPU_SCHED_GAMMA_DEFAULT;
-	hd->idle_power = 0.0;
 
 	if (starpu_sched_ctx_min_priority_is_set(sched_ctx_id) == 0)
 		starpu_sched_ctx_set_min_priority(sched_ctx_id, DEFAULT_MIN_PRIORITY);
@@ -565,21 +561,10 @@ static void initialize_parallel_heft_policy(unsigned sched_ctx_id)
 
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)hd);
 
-	const char *strval_alpha = getenv("STARPU_SCHED_ALPHA");
-	if (strval_alpha)
-		hd->alpha = atof(strval_alpha);
-
-	const char *strval_beta = getenv("STARPU_SCHED_BETA");
-	if (strval_beta)
-		hd->beta = atof(strval_beta);
-
-	const char *strval_gamma = getenv("STARPU_SCHED_GAMMA");
-	if (strval_gamma)
-		hd->_gamma = atof(strval_gamma);
-
-	const char *strval_idle_power = getenv("STARPU_IDLE_POWER");
-	if (strval_idle_power)
-		hd->idle_power = atof(strval_idle_power);
+	hd->alpha = starpu_get_env_float_default("STARPU_SCHED_ALPHA", _STARPU_SCHED_ALPHA_DEFAULT);
+	hd->beta = starpu_get_env_float_default("STARPU_SCHED_BETA", _STARPU_SCHED_BETA_DEFAULT);
+	hd->_gamma = starpu_get_env_float_default("STARPU_SCHED_GAMMA", _STARPU_SCHED_GAMMA_DEFAULT);
+	hd->idle_power = starpu_get_env_float_default("STARPU_IDLE_POWER", 0.0);
 
 	STARPU_PTHREAD_MUTEX_INIT(&hd->global_push_mutex, NULL);