ソースを参照

openmp: expose a global arbiter

This allows to assign data to this global arbiter and to improve
performance when OpenMP tasks are commuted.
Samuel Pitoiset 10 年 前
コミット
b9158b2fbd
共有3 個のファイルを変更した10 個の追加0 個の削除を含む
  1. 1 0
      include/starpu_openmp.h
  2. 8 0
      src/util/openmp_runtime_support.c
  3. 1 0
      src/util/openmp_runtime_support.h

+ 1 - 0
include/starpu_openmp.h

@@ -161,6 +161,7 @@ extern void starpu_omp_atomic_fallback_inline_end(void) __STARPU_OMP_NOTHROW;
 extern double starpu_omp_get_wtime(void) __STARPU_OMP_NOTHROW;
 extern double starpu_omp_get_wtick(void) __STARPU_OMP_NOTHROW;
 extern void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base) __STARPU_OMP_NOTHROW;
+extern struct starpu_arbiter *starpu_omp_get_default_arbiter(void) __STARPU_OMP_NOTHROW;
 
 #ifdef __cplusplus
 }

+ 8 - 0
src/util/openmp_runtime_support.c

@@ -900,6 +900,7 @@ int starpu_omp_init(void)
 	_global_state.initial_task = create_omp_task_struct(NULL,
 			_global_state.initial_thread, _global_state.initial_region, 1);
 	_global_state.default_critical = create_omp_critical_struct();
+        _global_state.default_arbiter = starpu_arbiter_create();
 	_global_state.named_criticals = NULL;
 	_starpu_spin_init(&_global_state.named_criticals_lock);
 	_global_state.hash_workers = NULL;
@@ -929,6 +930,8 @@ void starpu_omp_shutdown(void)
 	_global_state.initial_device = NULL;
 	destroy_omp_critical_struct(_global_state.default_critical);
 	_global_state.default_critical = NULL;
+        starpu_arbiter_destroy(_global_state.default_arbiter);
+        _global_state.default_arbiter = NULL;
 	_starpu_spin_lock(&_global_state.named_criticals_lock);
 	{
 		struct starpu_omp_critical *critical, *tmp;
@@ -2480,6 +2483,11 @@ void starpu_omp_vector_annotate(starpu_data_handle_t handle, uint32_t slice_base
 	vector_interface->slice_base = slice_base;
 }
 
+struct starpu_arbiter *starpu_omp_get_default_arbiter(void)
+{
+	return _global_state.default_arbiter;
+}
+
 /*
  * restore deprecated diagnostics (-Wdeprecated-declarations)
  */

+ 1 - 0
src/util/openmp_runtime_support.h

@@ -366,6 +366,7 @@ struct starpu_omp_global
 	struct _starpu_spinlock named_criticals_lock;
 	struct starpu_omp_thread *hash_workers;
 	struct _starpu_spinlock hash_workers_lock;
+	struct starpu_arbiter *default_arbiter;
 	int nb_starpu_cpu_workers;
 	int *starpu_cpu_worker_ids;
 };