Browse Source

openmp: add support for OMP_MAX_TASK_PRIORITY

The OMP_MAX_TASK_PRIORITY environment variable controls the use of task
priorities by setting the initial value of the max-task-priority-var
ICV. This is part of OpenMP 4.5.
Samuel Pitoiset 9 years ago
parent
commit
4a6ee13b5a

+ 2 - 0
src/util/openmp_runtime_support.c

@@ -849,6 +849,7 @@ static void omp_initial_region_setup(void)
 	_global_state.initial_region->icvs.run_sched_var = _starpu_omp_initial_icv_values->run_sched_var;
 	_global_state.initial_region->icvs.run_sched_chunk_var = _starpu_omp_initial_icv_values->run_sched_chunk_var;
 	_global_state.initial_region->icvs.default_device_var = _starpu_omp_initial_icv_values->default_device_var;
+	_global_state.initial_region->icvs.max_task_priority_var = _starpu_omp_initial_icv_values->max_task_priority_var;
 	starpu_omp_task_list_push_back(&_global_state.initial_region->implicit_task_list,
 			_global_state.initial_task);
 }
@@ -1061,6 +1062,7 @@ void starpu_omp_parallel_region(const struct starpu_omp_parallel_region_attr *at
 	new_region->icvs.run_sched_var = generating_region->icvs.run_sched_var;
 	new_region->icvs.run_sched_chunk_var = generating_region->icvs.run_sched_chunk_var;
 	new_region->icvs.default_device_var = generating_region->icvs.default_device_var;
+	new_region->icvs.max_task_priority_var = generating_region->icvs.max_task_priority_var;
 
 	int i;
 	for (i = 0; i < nb_threads; i++)

+ 2 - 0
src/util/openmp_runtime_support.h

@@ -94,6 +94,7 @@ struct starpu_omp_data_environment_icvs
 
 	/* program execution icvs */
 	int default_device_var;
+	int max_task_priority_var;
 };
 
 struct starpu_omp_device_icvs
@@ -141,6 +142,7 @@ struct starpu_omp_initial_icv_values
 	int place_partition_var;
 	int cancel_var;
 	int default_device_var;
+	int max_task_priority_var;
 
 	/* not a real ICV, but needed to store the contents of OMP_PLACES */
 	struct starpu_omp_place places;

+ 5 - 1
src/util/openmp_runtime_support_environment.c

@@ -42,7 +42,8 @@ static struct starpu_omp_initial_icv_values _initial_icv_values =
 	.levels_var = 0,
 	.place_partition_var = 0,
 	.cancel_var = 0,
-	.default_device_var = 0
+	.default_device_var = 0,
+	.max_task_priority_var = 0
 };
 
 struct starpu_omp_initial_icv_values *_starpu_omp_initial_icv_values = NULL;
@@ -679,6 +680,7 @@ static void read_omp_environment(void)
 	read_int_var("OMP_MAX_ACTIVE_LEVELS", &_initial_icv_values.max_active_levels_var);
 	read_boolean_var("OMP_CANCELLATION", &_initial_icv_values.cancel_var);
 	read_int_var("OMP_DEFAULT_DEVICE", &_initial_icv_values.default_device_var);
+	read_int_var("OMP_MAX_TASK_PRIORITY", &_initial_icv_values.max_task_priority_var);
 
 	const int max_levels = _initial_icv_values.max_active_levels_var;
 
@@ -748,6 +750,7 @@ static void free_omp_environment(void)
 	/* OMP_MAX_ACTIVE_LEVELS */
 	/* OMP_CANCELLATION */
 	/* OMP_DEFAULT_DEVICE */
+	/* OMP_MAX_TASK_PRIORITY */
 
 	/* OMP_PROC_BIND */
 	free(_initial_icv_values.bind_var);
@@ -795,6 +798,7 @@ static void display_omp_environment(int verbosity_level)
 		printf("  [host] OMP_MAX_ACTIVE_LEVELS='%d'\n", _starpu_omp_initial_icv_values->max_active_levels_var);
 		printf("  [host] OMP_CANCELLATION='%s'\n", _starpu_omp_initial_icv_values->cancel_var?"true":"false");
 		printf("  [host] OMP_DEFAULT_DEVICE='%d'\n", _starpu_omp_initial_icv_values->default_device_var);
+		printf("  [host] OMP_MAX_TASK_PRIORITY='%d'\n", _starpu_omp_initial_icv_values->max_task_priority_var);
 		printf("  [host] OMP_PROC_BIND='");
 		{
 			int level;

+ 1 - 0
tests/openmp/environment.c

@@ -37,6 +37,7 @@ main (int argc, char *argv[])
 	setenv("OMP_MAX_ACTIVE_LEVELS","4", 1);
 	setenv("OMP_CANCELLATION","false", 1);
 	setenv("OMP_DEFAULT_DEVICE","0", 1);
+	setenv("OMP_MAX_TASK_PRIORITY", "20", 1);
 	setenv("OMP_PROC_BIND","spread, spread, close", 1);
 	setenv("OMP_NUM_THREADS","4, 16, 2", 1);
 	setenv("OMP_PLACES","{1,2,3,4},{5,6,7,8}", 1);