Browse Source

Factorize registering waiting queues for simgrid

Samuel Thibault 8 years ago
parent
commit
ac083e93ef
3 changed files with 31 additions and 45 deletions
  1. 19 39
      src/core/topology.c
  2. 10 1
      src/datawizard/memory_nodes.c
  3. 2 5
      src/datawizard/memory_nodes.h

+ 19 - 39
src/core/topology.c

@@ -1791,14 +1791,9 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 				workerarg->bindid = _starpu_get_next_bindid(config, NULL, 0);
 				_starpu_memory_node_add_nworkers(memory_node);
 
-                                _starpu_worker_drives_memory_node(workerarg->workerid, STARPU_MAIN_RAM);
-                                _starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
-
-#ifdef STARPU_SIMGRID
-				starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[memory_node]);
+                                _starpu_worker_drives_memory_node(workerarg, STARPU_MAIN_RAM);
 				if (memory_node != STARPU_MAIN_RAM)
-					starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
-#endif
+					_starpu_worker_drives_memory_node(workerarg, memory_node);
 				break;
 			}
 #if defined(STARPU_USE_CUDA) || defined(STARPU_SIMGRID)
@@ -1886,12 +1881,9 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 				}
 				_starpu_memory_node_add_nworkers(memory_node);
 
-                                _starpu_worker_drives_memory_node(workerarg->workerid, STARPU_MAIN_RAM);
-                                _starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
-#ifdef STARPU_SIMGRID
-				starpu_pthread_queue_register(&workerarg->set->workers[0].wait, &_starpu_simgrid_transfer_queue[memory_node]);
-				starpu_pthread_queue_register(&workerarg->set->workers[0].wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
-#endif
+                                _starpu_worker_drives_memory_node(&workerarg->set->workers[0], STARPU_MAIN_RAM);
+				if (memory_node != STARPU_MAIN_RAM)
+					_starpu_worker_drives_memory_node(&workerarg->set->workers[0], memory_node);
 				break;
 #endif
 
@@ -1928,12 +1920,9 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 				}
 				_starpu_memory_node_add_nworkers(memory_node);
 
-                                _starpu_worker_drives_memory_node(workerarg->workerid, STARPU_MAIN_RAM);
-                                _starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
-#ifdef STARPU_SIMGRID
-				starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[memory_node]);
-				starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
-#endif
+                                _starpu_worker_drives_memory_node(workerarg, STARPU_MAIN_RAM);
+				if (memory_node != STARPU_MAIN_RAM)
+					_starpu_worker_drives_memory_node(workerarg, memory_node);
 				break;
 #endif
 
@@ -1962,12 +1951,9 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 				workerarg->bindid = mic_bindid[devid];
 				_starpu_memory_node_add_nworkers(memory_node);
 
-                                _starpu_worker_drives_memory_node(workerarg->workerid, STARPU_MAIN_RAM);
-                                _starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
-#ifdef STARPU_SIMGRID
-				starpu_pthread_queue_register(&workerarg->set->workers[0].wait, &_starpu_simgrid_transfer_queue[memory_node]);
-				starpu_pthread_queue_register(&workerarg->set->workers[0].wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
-#endif
+                                _starpu_worker_drives_memory_node(&workerarg->set->workers[0], STARPU_MAIN_RAM);
+				if (memory_node != STARPU_MAIN_RAM)
+					_starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
 				break;
 #endif /* STARPU_USE_MIC */
 
@@ -1981,12 +1967,9 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 				memory_node = ram_memory_node;
 				_starpu_memory_node_add_nworkers(memory_node);
 
-                                _starpu_worker_drives_memory_node(workerarg->workerid, STARPU_MAIN_RAM);
-                                _starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
-#ifdef STARPU_SIMGRID
-				starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[memory_node]);
-				starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
-#endif
+                                _starpu_worker_drives_memory_node(workerarg, STARPU_MAIN_RAM);
+				if (memory_node != STARPU_MAIN_RAM)
+					_starpu_worker_drives_memory_node(workerarg, memory_node);
 			}
 				break;
 #endif /* STARPU_USE_SCC */
@@ -2007,8 +1990,9 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 					_starpu_register_bus(memory_node, STARPU_MAIN_RAM);
 
 				}
-                                _starpu_worker_drives_memory_node(workerarg->workerid, STARPU_MAIN_RAM);
-                                _starpu_worker_drives_memory_node(workerarg->workerid, memory_node);
+                                _starpu_worker_drives_memory_node(&workerarg->set->workers[0], STARPU_MAIN_RAM);
+				if (memory_node != STARPU_MAIN_RAM)
+					_starpu_worker_drives_memory_node(&workerarg->set->workers[0], memory_node);
 #ifndef STARPU_MPI_MASTER_SLAVE_MULTIPLE_THREAD
                                 /* MPI driver thread can manage all slave memories if we disable the MPI multiple thread */
                                 unsigned findworker;
@@ -2017,18 +2001,14 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
                                         struct _starpu_worker *findworkerarg = &config->workers[findworker];
                                         if (findworkerarg->arch == STARPU_MPI_MS_WORKER)
                                         {
-                                                _starpu_worker_drives_memory_node(workerarg->workerid, findworkerarg->memory_node);
-                                                _starpu_worker_drives_memory_node(findworkerarg->workerid, memory_node);
+                                                _starpu_worker_drives_memory_node(workerarg, findworkerarg->memory_node);
+                                                _starpu_worker_drives_memory_node(findworkerarg, memory_node);
                                         }
                                 }
 #endif
 
 				workerarg->bindid = mpi_bindid[devid];
 				_starpu_memory_node_add_nworkers(memory_node);
-#ifdef STARPU_SIMGRID
-				starpu_pthread_queue_register(&workerarg->set->workers[0].wait, &_starpu_simgrid_transfer_queue[memory_node]);
-				starpu_pthread_queue_register(&workerarg->set->workers[0].wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
-#endif
 				break;
 			}
 #endif /* STARPU_USE_MPI_MASTER_SLAVE */

+ 10 - 1
src/datawizard/memory_nodes.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009-2016  Université de Bordeaux
+ * Copyright (C) 2009-2017  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -186,3 +186,12 @@ unsigned starpu_worker_get_memory_node(unsigned workerid)
 	return _starpu_worker_get_memory_node(workerid);
 }
 
+/* same utility as _starpu_memory_node_add_nworkers */
+void _starpu_worker_drives_memory_node(struct _starpu_worker *worker, unsigned memnode)
+{
+	_starpu_worker_drives_memory[worker->workerid][memnode] = 1;
+#ifdef STARPU_SIMGRID
+	starpu_pthread_queue_register(&worker->wait, &_starpu_simgrid_transfer_queue[memnode]);
+#endif
+}
+

+ 2 - 5
src/datawizard/memory_nodes.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009-2012, 2014-2016  Université de Bordeaux
+ * Copyright (C) 2009-2012, 2014-2017  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2013  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -99,10 +99,7 @@ static inline void _starpu_memory_node_add_nworkers(unsigned node)
 }
 
 /* same utility as _starpu_memory_node_add_nworkers */
-static inline void _starpu_worker_drives_memory_node(unsigned worker_id, unsigned memnode)
-{
-    _starpu_worker_drives_memory[worker_id][memnode] = 1;   
-}
+void _starpu_worker_drives_memory_node(struct _starpu_worker *worker, unsigned memnode);
 
 static inline unsigned _starpu_memory_node_get_nworkers(unsigned node)
 {