浏览代码

Drop the memory_node thread key, we do not really need it since we can get it from the worker key, and it makes switching more costly

Samuel Thibault 8 年之前
父节点
当前提交
f37e65a6f2
共有 4 个文件被更改,包括 3 次插入23 次删除
  1. 0 2
      src/core/workers.c
  2. 0 4
      src/datawizard/memory_nodes.c
  3. 3 13
      src/datawizard/memory_nodes.h
  4. 0 4
      src/drivers/mp_common/source_common.c

+ 0 - 2
src/core/workers.c

@@ -612,8 +612,6 @@ void _starpu_driver_start(struct _starpu_worker *worker, unsigned fut_key, unsig
 	_starpu_fxt_register_thread(worker->bindid);
 	_starpu_worker_start(worker, fut_key, sync);
 #endif
-	_starpu_memory_node_set_local_key(&worker->memory_node);
-
 	_starpu_set_local_worker_key(worker);
 
 	STARPU_PTHREAD_MUTEX_LOCK(&worker->mutex);

+ 0 - 4
src/datawizard/memory_nodes.c

@@ -28,7 +28,6 @@
 char _starpu_worker_drives_memory[STARPU_NMAXWORKERS][STARPU_MAXNODES];
 
 struct _starpu_memory_node_descr _starpu_descr;
-starpu_pthread_key_t _starpu_memory_node_key STARPU_ATTRIBUTE_INTERNAL;
 
 void _starpu_memory_nodes_init(void)
 {
@@ -36,8 +35,6 @@ void _starpu_memory_nodes_init(void)
 	 * added using _starpu_memory_node_register */
 	_starpu_descr.nnodes = 0;
 
-	STARPU_PTHREAD_KEY_CREATE(&_starpu_memory_node_key, NULL);
-
 	unsigned i;
 	for (i = 0; i < STARPU_MAXNODES; i++)
 	{
@@ -59,7 +56,6 @@ void _starpu_memory_nodes_deinit(void)
 	_starpu_deinit_mem_chunk_lists();
 
 	STARPU_PTHREAD_RWLOCK_DESTROY(&_starpu_descr.conditions_rwlock);
-	STARPU_PTHREAD_KEY_DELETE(_starpu_memory_node_key);
 }
 
 #undef starpu_node_get_kind

+ 3 - 13
src/datawizard/memory_nodes.h

@@ -74,23 +74,13 @@ extern struct _starpu_memory_node_descr _starpu_descr;
 
 void _starpu_memory_nodes_init(void);
 void _starpu_memory_nodes_deinit(void);
-extern starpu_pthread_key_t _starpu_memory_node_key STARPU_ATTRIBUTE_INTERNAL;
-static inline void _starpu_memory_node_set_local_key(unsigned *node)
-{
-	STARPU_PTHREAD_SETSPECIFIC(_starpu_memory_node_key, node);
-}
 
 static inline unsigned _starpu_memory_node_get_local_key(void)
 {
-	unsigned *memory_node;
-	memory_node = (unsigned *) STARPU_PTHREAD_GETSPECIFIC(_starpu_memory_node_key);
-
-	/* in case this is called by the programmer, we assume the RAM node
-	   is the appropriate memory node ... XXX */
-	if (STARPU_UNLIKELY(!memory_node))
+	struct _starpu_worker *worker = _starpu_get_local_worker_key();
+	if (!worker)
 		return STARPU_MAIN_RAM;
-
-	return *memory_node;
+	return worker->memory_node;
 }
 
 static inline void _starpu_memory_node_add_nworkers(unsigned node)

+ 0 - 4
src/drivers/mp_common/source_common.c

@@ -34,7 +34,6 @@ struct starpu_save_thread_env
         struct starpu_task * current_task;
         struct _starpu_worker * current_worker;
         struct _starpu_worker_set * current_worker_set;
-        unsigned * current_mem_node;
 #ifdef STARPU_OPENMP
         struct starpu_omp_thread * current_omp_thread;
         struct starpu_omp_task * current_omp_task;
@@ -874,7 +873,6 @@ void _starpu_src_common_init_switch_env(unsigned this)
         save_thread_env[this].current_task = starpu_task_get_current();
         save_thread_env[this].current_worker = STARPU_PTHREAD_GETSPECIFIC(_starpu_worker_key);
         save_thread_env[this].current_worker_set = STARPU_PTHREAD_GETSPECIFIC(_starpu_worker_set_key);
-        save_thread_env[this].current_mem_node = STARPU_PTHREAD_GETSPECIFIC(_starpu_memory_node_key);
 #ifdef STARPU_OPENMP
         save_thread_env[this].current_omp_thread = STARPU_PTHREAD_GETSPECIFIC(omp_thread_key);
         save_thread_env[this].current_omp_task = STARPU_PTHREAD_GETSPECIFIC(omp_task_key);
@@ -886,7 +884,6 @@ static void _starpu_src_common_switch_env(unsigned old, unsigned new)
         save_thread_env[old].current_task = starpu_task_get_current();
         save_thread_env[old].current_worker = STARPU_PTHREAD_GETSPECIFIC(_starpu_worker_key);
         save_thread_env[old].current_worker_set = STARPU_PTHREAD_GETSPECIFIC(_starpu_worker_set_key);
-        save_thread_env[old].current_mem_node = STARPU_PTHREAD_GETSPECIFIC(_starpu_memory_node_key);
 #ifdef STARPU_OPENMP
         save_thread_env[old].current_omp_thread = STARPU_PTHREAD_GETSPECIFIC(omp_thread_key);
         save_thread_env[old].current_omp_task = STARPU_PTHREAD_GETSPECIFIC(omp_task_key);
@@ -896,7 +893,6 @@ static void _starpu_src_common_switch_env(unsigned old, unsigned new)
         _starpu_set_current_task(save_thread_env[new].current_task);
         STARPU_PTHREAD_SETSPECIFIC(_starpu_worker_key, save_thread_env[new].current_worker);
         STARPU_PTHREAD_SETSPECIFIC(_starpu_worker_set_key, save_thread_env[new].current_worker_set);
-        STARPU_PTHREAD_SETSPECIFIC(_starpu_memory_node_key, save_thread_env[new].current_mem_node);
 #ifdef STARPU_OPENMP
         STARPU_PTHREAD_SETSPECIFIC(omp_thread_key, save_thread_env[new].current_omp_thread);
         STARPU_PTHREAD_SETSPECIFIC(omp_task_key, save_thread_env[new].current_omp_task);