Browse Source

Add subworkerid instead of using devid, which thus removed mp_nodeid

Samuel Thibault 11 years ago
parent
commit
21d7dfa9a5

+ 3 - 3
src/core/detect_combined_workers.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2013  Université de Bordeaux 1
+ * Copyright (C) 2010-2014  Université de Bordeaux 1
  * Copyright (C) 2011, 2012, 2013       Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -268,12 +268,12 @@ static void find_and_assign_combinations_without_hwloc(int *workerids, int nwork
 #ifdef STARPU_USE_MIC
 		else if(worker->arch == STARPU_MIC_WORKER)
 		{
-			for(j=0; mic_id[j] != worker->mp_nodeid && mic_id[j] != -1 && j<nb_mics; j++);
+			for(j=0; mic_id[j] != worker->devid && mic_id[j] != -1 && j<nb_mics; j++);
 			if(j<nb_mics)
 			{
 				if(mic_id[j] == -1)
 				{
-					mic_id[j] = worker->mp_nodeid;					
+					mic_id[j] = worker->devid;					
 				}
 				mic_workers[j][nmics_table[j]++] = i;
 			}

+ 13 - 16
src/core/topology.c

@@ -639,8 +639,8 @@ _starpu_init_mic_config (struct _starpu_machine_config *config,
 		arch.ncore = 0; 
 		config->workers[worker_idx].arch = STARPU_MIC_WORKER;
 		config->workers[worker_idx].perf_arch = arch;
-		config->workers[worker_idx].mp_nodeid = mic_idx;
-		config->workers[worker_idx].devid = miccore_id;
+		config->workers[worker_idx].devid = mic_idx;
+		config->workers[worker_idx].subworkerid = miccore_id;
 		config->workers[worker_idx].worker_mask = STARPU_MIC;
 		config->worker_mask |= STARPU_MIC;
 	}
@@ -777,8 +777,8 @@ _starpu_init_machine_config (struct _starpu_machine_config *config, int no_mp_co
 		config->workers[worker_idx].perf_arch.type = STARPU_CUDA_WORKER;
 		config->workers[worker_idx].perf_arch.devid = cudagpu;
 		config->workers[worker_idx].perf_arch.ncore = 0;
-		config->workers[worker_idx].mp_nodeid = -1;
 		config->workers[worker_idx].devid = devid;
+		config->workers[worker_idx].subworkerid = 0;
 		config->workers[worker_idx].worker_mask = STARPU_CUDA;
 		config->worker_mask |= STARPU_CUDA;
 
@@ -851,7 +851,7 @@ _starpu_init_machine_config (struct _starpu_machine_config *config, int no_mp_co
 		config->workers[worker_idx].perf_arch.type = STARPU_OPENCL_WORKER;
 		config->workers[worker_idx].perf_arch.devid = devid;
 		config->workers[worker_idx].perf_arch.ncore = 0;
-		config->workers[worker_idx].mp_nodeid = -1;
+		config->workers[worker_idx].subworkerid = 0;
 		config->workers[worker_idx].devid = devid;
 		config->workers[worker_idx].worker_mask = STARPU_OPENCL;
 		config->worker_mask |= STARPU_OPENCL;
@@ -913,7 +913,7 @@ _starpu_init_machine_config (struct _starpu_machine_config *config, int no_mp_co
 		config->workers[topology->nworkers + sccdev].perf_arch.type = STARPU_SCC_WORKER;
 		config->workers[topology->nworkers + sccdev].perf_arch.devid = sccdev;
 		config->workers[topology->nworkers + sccdev].perf_arch.ncore = 0;
-		config->workers[topology->nworkers + sccdev].mp_nodeid = -1;
+		config->workers[topology->nworkers + sccdev].subworkerid = 0;
 		config->workers[topology->nworkers + sccdev].devid = devid;
 		config->workers[topology->nworkers + sccdev].worker_mask = STARPU_SCC;
 		config->worker_mask |= STARPU_SCC;
@@ -977,7 +977,7 @@ _starpu_init_machine_config (struct _starpu_machine_config *config, int no_mp_co
 		config->workers[worker_idx].perf_arch.type = STARPU_CPU_WORKER;
 		config->workers[worker_idx].perf_arch.devid = 0;
 		config->workers[worker_idx].perf_arch.ncore = 0;
-		config->workers[worker_idx].mp_nodeid = -1;
+		config->workers[worker_idx].subworkerid = 0;
 		config->workers[worker_idx].devid = cpu;
 		config->workers[worker_idx].worker_mask = STARPU_CPU;
 		config->worker_mask |= STARPU_CPU;
@@ -1161,9 +1161,6 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 		unsigned memory_node = -1;
 		struct _starpu_worker *workerarg = &config->workers[worker];
 		unsigned devid = workerarg->devid;
-#ifdef STARPU_USE_MIC
-		unsigned mp_nodeid = workerarg->mp_nodeid;
-#endif
 
 		/* Perhaps the worker has some "favourite" bindings  */
 		int *preferred_binding = NULL;
@@ -1286,29 +1283,29 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 
 #ifdef STARPU_USE_MIC
 		        case STARPU_MIC_WORKER:
-				if (mic_init[mp_nodeid])
+				if (mic_init[devid])
 				{
-					memory_node = mic_memory_nodes[mp_nodeid];
+					memory_node = mic_memory_nodes[devid];
 				}
 				else
 				{
-					mic_init[mp_nodeid] = 1;
+					mic_init[devid] = 1;
 #ifndef STARPU_SIMGRID
 					/* TODO */
 					//if (may_bind_automatically)
 					//{
 					//	/* StarPU is allowed to bind threads automatically */
-						//	preferred_binding = _starpu_get_mic_affinity_vector(mp_nodeid);
+						//	preferred_binding = _starpu_get_mic_affinity_vector(devid);
 					//	npreferred = config->topology.nhwcpus;
 					//}
-					mic_bindid[mp_nodeid] = _starpu_get_next_bindid(config, preferred_binding, npreferred);
+					mic_bindid[devid] = _starpu_get_next_bindid(config, preferred_binding, npreferred);
 #endif /* SIMGRID */
-					memory_node = mic_memory_nodes[mp_nodeid] = _starpu_memory_node_register(STARPU_MIC_RAM, mp_nodeid);
+					memory_node = mic_memory_nodes[devid] = _starpu_memory_node_register(STARPU_MIC_RAM, devid);
 					_starpu_register_bus(STARPU_MAIN_RAM, memory_node);
 					_starpu_register_bus(memory_node, STARPU_MAIN_RAM);
 
 				}
-				workerarg->bindid = mic_bindid[mp_nodeid];
+				workerarg->bindid = mic_bindid[devid];
 				_starpu_memory_node_add_nworkers(memory_node);
 				break;
 #endif /* STARPU_USE_MIC */

+ 18 - 17
src/core/workers.c

@@ -392,8 +392,8 @@ static void _starpu_worker_init(struct _starpu_worker *workerarg, struct _starpu
 	/* worker_mask initialized by topology.c */
 	/* perf_arch initialized by topology.c */
 	/* worker_thread initialized by _starpu_launch_drivers */
-	/* mp_nodeid initialized by topology.c */
 	/* devid initialized by topology.c */
+	/* subworkerid initialized by topology.c */
 	/* bindid initialized by topology.c */
 	/* workerid initialized by topology.c */
 	workerarg->combined_workerid = workerarg->workerid;
@@ -510,7 +510,8 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 	{
 		struct _starpu_worker *workerarg = &pconfig->workers[worker];
 #ifdef STARPU_USE_MIC
-		unsigned mp_nodeid = workerarg->mp_nodeid;
+		unsigned devid = workerarg->devid;
+		unsigned subworkerid = workerarg->subworkerid;
 #endif
 
 		_STARPU_DEBUG("initialising worker %u/%u\n", worker, nworkers);
@@ -608,23 +609,23 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 				 * which consists in spawning only one thread
 				 * per MIC device, which will control all MIC
 				 * workers of this device. (by using a worker set). */
-				if (mic_worker_set[mp_nodeid].started)
+				if (mic_worker_set[devid].started)
 					goto worker_set_initialized;
 
-				mic_worker_set[mp_nodeid].nworkers = pconfig->topology.nmiccores[mp_nodeid];
+				mic_worker_set[devid].nworkers = pconfig->topology.nmiccores[devid];
 
 				/* We assume all MIC workers of a given MIC
 				 * device are contiguous so that we can
 				 * address them with the first one only. */
-				mic_worker_set[mp_nodeid].workers = workerarg;
-				mic_worker_set[mp_nodeid].set_is_initialized = 0;
+				mic_worker_set[devid].workers = workerarg;
+				mic_worker_set[devid].set_is_initialized = 0;
 
 				STARPU_PTHREAD_CREATE_ON(
 						workerarg->name,
-						&mic_worker_set[mp_nodeid].worker_thread,
+						&mic_worker_set[devid].worker_thread,
 						NULL,
 						_starpu_mic_src_worker,
-						&mic_worker_set[mp_nodeid],
+						&mic_worker_set[devid],
 						worker+1);
 
 #ifdef STARPU_USE_FXT
@@ -634,15 +635,15 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 				STARPU_PTHREAD_MUTEX_UNLOCK(&workerarg->mutex);
 #endif
 
-				STARPU_PTHREAD_MUTEX_LOCK(&mic_worker_set[mp_nodeid].mutex);
-				while (!mic_worker_set[mp_nodeid].set_is_initialized)
-					STARPU_PTHREAD_COND_WAIT(&mic_worker_set[mp_nodeid].ready_cond,
-								  &mic_worker_set[mp_nodeid].mutex);
-				STARPU_PTHREAD_MUTEX_UNLOCK(&mic_worker_set[mp_nodeid].mutex);
+				STARPU_PTHREAD_MUTEX_LOCK(&mic_worker_set[devid].mutex);
+				while (!mic_worker_set[devid].set_is_initialized)
+					STARPU_PTHREAD_COND_WAIT(&mic_worker_set[devid].ready_cond,
+								  &mic_worker_set[devid].mutex);
+				STARPU_PTHREAD_MUTEX_UNLOCK(&mic_worker_set[devid].mutex);
 
 		worker_set_initialized:
-				workerarg->set = &mic_worker_set[mp_nodeid];
-				mic_worker_set[mp_nodeid].started = 1;
+				workerarg->set = &mic_worker_set[devid];
+				mic_worker_set[devid].started = 1;
 
 #ifdef STARPU_USE_FXT
 				STARPU_PTHREAD_MUTEX_LOCK(&workerarg->mutex);
@@ -1472,9 +1473,9 @@ int starpu_combined_worker_get_rank(void)
 	}
 }
 
-int starpu_worker_get_mp_nodeid(int id)
+int starpu_worker_get_subworkerid(int id)
 {
-	return config.workers[id].mp_nodeid;
+	return config.workers[id].subworkerid;
 }
 
 int starpu_worker_get_devid(int id)

+ 1 - 2
src/core/workers.h

@@ -60,9 +60,8 @@ LIST_TYPE(_starpu_worker,
 	uint32_t worker_mask; /* what is the type of worker ? */
 	struct starpu_perfmodel_arch perf_arch; /* in case there are different models of the same arch */
 	starpu_pthread_t worker_thread; /* the thread which runs the worker */
-	int mp_nodeid; /* which mp node hold the cpu/gpu/etc (-1 for this
-			* node) */
 	unsigned devid; /* which cpu/gpu/etc is controlled by the worker ? */
+	unsigned subworkerid; /* which sub-worker this one is for the cpu/gpu */
 	int bindid; /* which cpu is the driver bound to ? (logical index) */
 	int workerid; /* uniquely identify the worker among all processing units types */
 	int combined_workerid; /* combined worker currently using this worker */

+ 15 - 15
src/drivers/mic/driver_mic_source.c

@@ -78,18 +78,18 @@ struct _starpu_mp_node *_starpu_mic_src_get_actual_thread_mp_node()
 	struct _starpu_worker *actual_worker = _starpu_get_local_worker_key();
 	STARPU_ASSERT(actual_worker);
 
-	int nodeid = actual_worker->mp_nodeid;
-	STARPU_ASSERT(nodeid >= 0 && nodeid < STARPU_MAXMICDEVS);
+	int devid = actual_worker->devid;
+	STARPU_ASSERT(devid >= 0 && devid < STARPU_MAXMICDEVS);
 
-	return mic_nodes[nodeid];
+	return mic_nodes[devid];
 }
 
 const struct _starpu_mp_node *_starpu_mic_src_get_mp_node_from_memory_node(int memory_node)
 {
-	int nodeid = _starpu_memory_node_get_devid(memory_node);
-	STARPU_ASSERT_MSG(nodeid >= 0 && nodeid < STARPU_MAXMICDEVS, "bogus nodeid %d for memory node %d\n", nodeid, memory_node);
+	int devid = _starpu_memory_node_get_devid(memory_node);
+	STARPU_ASSERT_MSG(devid >= 0 && devid < STARPU_MAXMICDEVS, "bogus devid %d for memory node %d\n", devid, memory_node);
 
-	return mic_nodes[nodeid];
+	return mic_nodes[devid];
 }
 
 static void _starpu_mic_src_free_kernel(void *kernel)
@@ -168,19 +168,19 @@ starpu_mic_kernel_t _starpu_mic_src_get_kernel(starpu_mic_func_symbol_t symbol)
 	if (workerid < 0)
 		return NULL;
 
-	int nodeid = starpu_worker_get_mp_nodeid(workerid);
+	int devid = starpu_worker_get_devid(workerid);
 
 	struct _starpu_mic_kernel *kernel = symbol;
 
-	if (kernel->func[nodeid] == NULL)
+	if (kernel->func[devid] == NULL)
 	{
-		struct _starpu_mp_node *node = mic_nodes[nodeid];
-		int ret = _starpu_src_common_lookup(node, (void (**)(void))&kernel->func[nodeid], kernel->name);
+		struct _starpu_mp_node *node = mic_nodes[devid];
+		int ret = _starpu_src_common_lookup(node, (void (**)(void))&kernel->func[devid], kernel->name);
 		if (ret)
 			return NULL;
 	}
 
-	return kernel->func[nodeid];
+	return kernel->func[devid];
 }
 
 /* Report an error which occured when using a MIC device
@@ -512,7 +512,7 @@ void *_starpu_mic_src_worker(void *arg)
 	struct _starpu_worker *baseworker = &worker_set->workers[0];
 	struct _starpu_machine_config *config = baseworker->config;
 	unsigned baseworkerid = baseworker - config->workers;
-	unsigned mp_nodeid = baseworker->mp_nodeid;
+	unsigned devid = baseworker->devid;
 	unsigned i;
 
 	/* unsigned memnode = baseworker->memory_node; */
@@ -522,10 +522,10 @@ void *_starpu_mic_src_worker(void *arg)
 	// Current task for a thread managing a worker set has no sense.
 	_starpu_set_current_task(NULL);
 
-	for (i = 0; i < config->topology.nmiccores[mp_nodeid]; i++)
+	for (i = 0; i < config->topology.nmiccores[devid]; i++)
 	{
 		struct _starpu_worker *worker = &config->workers[baseworkerid+i];
-		snprintf(worker->name, sizeof(worker->name), "MIC %d core %u", mp_nodeid, i);
+		snprintf(worker->name, sizeof(worker->name), "MIC %d core %u", devid, i);
 	}
 
 	baseworker->status = STATUS_UNKNOWN;
@@ -538,7 +538,7 @@ void *_starpu_mic_src_worker(void *arg)
 	STARPU_PTHREAD_COND_SIGNAL(&worker_set->ready_cond);
 	STARPU_PTHREAD_MUTEX_UNLOCK(&worker_set->mutex);
 
-	_starpu_src_common_worker(worker_set, baseworkerid, mic_nodes[mp_nodeid]);
+	_starpu_src_common_worker(worker_set, baseworkerid, mic_nodes[devid]);
 
 	_STARPU_TRACE_WORKER_DEINIT_START;
 

+ 6 - 6
src/drivers/scc/driver_scc_source.c

@@ -288,19 +288,19 @@ void *_starpu_scc_src_worker(void *arg)
 	struct _starpu_machine_config *config = args->config;
 	unsigned memnode = args->memory_node;
 	unsigned baseworkerid = args - config->workers;
-	unsigned mp_nodeid = args->mp_nodeid;
+	unsigned subworkerid = args->subworkerid;
 	unsigned i;
 
 	_starpu_worker_start(args, _STARPU_FUT_SCC_KEY);
 
-	_starpu_scc_src_init_context(devid);
+	_starpu_scc_src_init_context(subworkerid);
 
 	args->status = STATUS_UNKNOWN;
 
-	for (i = 0; i < config->topology.nmiccores[mp_nodeid]; i++)
+	for (i = 0; i < config->topology.nmiccores[devid]; i++)
 	{
 		struct _starpu_worker *worker = &config->workers[baseworkerid+i];
-		snprintf(worker->name, sizeof(worker->name), "MIC %d core %u", mp_nodeid, i);
+		snprintf(worker->name, sizeof(worker->name), "MIC %d core %u", devid, i);
 	}
 
 	_STARPU_TRACE_WORKER_INIT_END;
@@ -311,11 +311,11 @@ void *_starpu_scc_src_worker(void *arg)
 	STARPU_PTHREAD_COND_SIGNAL(&args->ready_cond);
 	STARPU_PTHREAD_MUTEX_UNLOCK(&args->mutex);
 
-	_starpu_src_common_worker(args, baseworkerid, scc_mp_nodes[mp_nodeid]);
+	_starpu_src_common_worker(args, baseworkerid, scc_mp_nodes[devid]);
 
 	_STARPU_TRACE_WORKER_DEINIT_START;
 
-	_starpu_scc_src_deinit_context(args->devid);
+	_starpu_scc_src_deinit_context(args->subworkerid);
 
 	_STARPU_TRACE_WORKER_DEINIT_END(_STARPU_FUT_SCC_KEY);