Samuel Thibault 12 роки тому
батько
коміт
8fb1f7ebea

+ 8 - 4
src/core/topology.c

@@ -274,6 +274,7 @@ static void _starpu_initialize_workers_mic_deviceid(struct _starpu_machine_confi
 		? NULL
 		: (int *)config->user_conf->workers_mic_deviceid,
 		&(config->current_mic_deviceid),
+		(int *)topology->workers_mic_deviceid,
 		"STARPU_WORKERS_MICID",
 		topology->nhwmiccores);
 }
@@ -291,6 +292,7 @@ static void _starpu_initialize_workers_scc_deviceid(struct _starpu_machine_confi
 		? NULL
 		: (int *) uconf->workers_scc_deviceid,
 		&(config->current_scc_deviceid),
+		(int *)topology->workers_scc_deviceid,
 		"STARPU_WORKERS_SCCID",
 		topology->nhwscc);
 }
@@ -631,8 +633,10 @@ _starpu_init_mic_config (struct _starpu_machine_config *config,
 	for (miccore_id = 0; miccore_id < topology->nmiccores[mic_idx]; miccore_id++)
 	{
 		int worker_idx = topology->nworkers + miccore_id;
+		enum starpu_perfmodel_archtype arch =
+			(enum starpu_perfmodel_archtype)((int)STARPU_MIC_DEFAULT + devid);
 		config->workers[worker_idx].arch = STARPU_MIC_WORKER;
-		config->workers[worker_idx].perf_arch = STARPU_MIC_DEFAULT;
+		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].worker_mask = STARPU_MIC;
@@ -907,7 +911,7 @@ _starpu_init_machine_config (struct _starpu_machine_config *config, int no_mp_co
 	{
 		config->workers[topology->nworkers + sccdev].arch = STARPU_SCC_WORKER;
 		int devid = _starpu_get_next_scc_deviceid(config);
-		enum starpu_perf_archtype arch = (enum starpu_perf_archtype)((int)STARPU_SCC_DEFAULT + devid);
+		enum starpu_perfmodel_archtype arch = (enum starpu_perfmodel_archtype)((int)STARPU_SCC_DEFAULT + devid);
 		config->workers[topology->nworkers + sccdev].mp_nodeid = -1;
 		config->workers[topology->nworkers + sccdev].devid = devid;
 		config->workers[topology->nworkers + sccdev].perf_arch = arch;
@@ -1244,12 +1248,12 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 			case STARPU_SCC_WORKER:
 			{
 				/* Node 0 represents the SCC shared memory when we're on SCC. */
-				struct _starpu_mem_node_descr *descr = _starpu_get_memory_node_description();
+				struct _starpu_memory_node_descr *descr = _starpu_memory_node_get_description();
 				descr->nodes[ram_memory_node] = STARPU_SCC_SHM;
 
 				is_a_set_of_accelerators = 0;
 				memory_node = ram_memory_node;
-				_starpu_memory_add_nworkers(memory_node);
+				_starpu_memory_node_add_nworkers(memory_node);
 			}
 				break;
 #endif

+ 6 - 0
src/core/workers.h

@@ -162,6 +162,12 @@ struct _starpu_machine_config
 	/* Which GPU(s) do we use for OpenCL ? */
 	int current_opencl_gpuid;
 
+	/* Which MIC do we use? */
+	int current_mic_deviceid;
+
+	/* Which SCC do we use? */
+	int current_scc_deviceid;
+
 	/* Basic workers : each of this worker is running its own driver and
 	 * can be combined with other basic workers. */
 	struct _starpu_worker workers[STARPU_NMAXWORKERS];

+ 2 - 2
src/datawizard/malloc.c

@@ -328,7 +328,7 @@ int starpu_free_flags(void *A, size_t dim, int flags)
 	if (_starpu_can_submit_scc_task())
 	{
 #ifdef STARPU_USE_SCC
-		_starpu_scc_free_shared_memory(A, dim);
+		_starpu_scc_free_shared_memory(A);
 #endif
 	} else
 	free(A);
@@ -493,7 +493,7 @@ starpu_free_on_node(unsigned dst_node, uintptr_t addr, size_t size)
 #endif
 #ifdef STARPU_USE_SCC
 		case STARPU_SCC_RAM:
-			_starpu_scc_free_memory((void *) addr, size, dst_node);
+			_starpu_scc_free_memory((void *) addr, dst_node);
 			break;
 #endif
 		default:

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

@@ -240,10 +240,10 @@ int _starpu_mic_src_register_kernel(starpu_mic_func_symbol_t *symbol, const char
 	for (i = 0; i < nb_mic_devices; ++i)
 		kernel->func[i] = NULL;
 
-	*symbol = kernel;
-
 	STARPU_PTHREAD_MUTEX_UNLOCK(&htbl_mutex);
 
+	*symbol = kernel;
+
 	return 0;
 }
 

+ 6 - 2
src/drivers/mp_common/sink_common.c

@@ -17,7 +17,9 @@
 
 #include <dlfcn.h>
 
+#ifdef STARPU_USE_MIC
 #include <common/COISysInfo_common.h>
+#endif
 
 #include <starpu.h>
 #include <common/config.h>
@@ -51,11 +53,13 @@ void
 _starpu_sink_nbcores (const struct _starpu_mp_node *node)
 {
     // Process packet received from `_starpu_src_common_sink_cores'.
+    int nbcores = 1;
 
-    // I currently only support MIC for now.
-    int nbcores = 0;
+#ifdef STARPU_USE_MIC
+    // XXX I currently only support MIC for now.
     if (STARPU_MIC_SINK == _starpu_sink_common_get_kind ())
 	nbcores = COISysGetCoreCount();
+#endif
 
     _starpu_mp_common_send_command (node, STARPU_ANSWER_SINK_NBCORES,
 				    &nbcores, sizeof (int));

+ 15 - 16
src/drivers/scc/driver_scc_source.c

@@ -19,6 +19,7 @@
 #include <starpu_profiling.h>
 #include <core/sched_policy.h>
 #include <core/task.h>
+#include <common/uthash.h>
 
 #include <RCCE.h>
 
@@ -31,16 +32,16 @@ static struct _starpu_mp_node *scc_mp_nodes[STARPU_MAXSCCDEVS];
 
 struct _starpu_scc_kernel
 {
+	UT_hash_handle hh;
 	char *name;
 	starpu_scc_kernel_t func[STARPU_MAXSCCDEVS];
-};
+} *kernels;
 
-static struct _starpu_htbl kernels_htbl;
 starpu_pthread_mutex_t htbl_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 static struct _starpu_mp_node *_starpu_scc_src_memory_node_to_mp_node(unsigned memory_node)
 {
-	int devid = _starpu_memory_node_to_devid(memory_node);
+	int devid = _starpu_memory_node_get_devid(memory_node);
 
 	STARPU_ASSERT(devid < STARPU_MAXSCCDEVS);
 	return scc_mp_nodes[devid];
@@ -120,7 +121,7 @@ static int _starpu_scc_src_execute_job(struct _starpu_job *j, struct _starpu_wor
 
 	_starpu_driver_start_job(args, j, &codelet_start, 0, profiling);
 
-	_starpu_src_common_execute_kernel_from_task(scc_mp_nodes[args->devid], (void (*)(void)) kernel, task);
+	_starpu_src_common_execute_kernel_from_task(scc_mp_nodes[args->devid], (void (*)(void)) kernel, 0, task);
 
 	_starpu_driver_end_job(args, j, args->perf_arch, &codelet_end, 0, profiling);
 
@@ -143,7 +144,9 @@ int _starpu_scc_src_register_kernel(starpu_scc_func_symbol_t *symbol, const char
 	unsigned int func_name_size = (strlen(func_name) + 1) * sizeof(char);
 
 	STARPU_PTHREAD_MUTEX_LOCK(&htbl_mutex);
-	struct _starpu_scc_kernel *kernel = _starpu_htbl_search(&kernels_htbl, func_name, func_name_size);
+	struct _starpu_scc_kernel *kernel;
+
+	HASH_FIND_STR(kernels, func_name, kernel);
 
 	if (kernel != NULL)
 	{
@@ -168,22 +171,17 @@ int _starpu_scc_src_register_kernel(starpu_scc_func_symbol_t *symbol, const char
 		return -ENOMEM;
 	}
 
-	int ret = _starpu_htbl_insert(&kernels_htbl, func_name, func_name_size, kernel);
-	STARPU_PTHREAD_MUTEX_UNLOCK(&htbl_mutex);
-	if (ret != 0)
-	{
-		free(kernel->name);
-		free(kernel);
-		return -ENOMEM;
-	}
-
 	memcpy(kernel->name, func_name, func_name_size);
 
+	HASH_ADD_STR(kernels, name, kernel);
+
 	unsigned int nb_scc_devices = starpu_scc_worker_get_count();
 	unsigned int i;
 	for (i = 0; i < nb_scc_devices; ++i)
 		kernel->func[i] = NULL;
 
+	STARPU_PTHREAD_MUTEX_UNLOCK(&htbl_mutex);
+
 	*symbol = kernel;
 
 	return 0;
@@ -326,9 +324,10 @@ void *_starpu_scc_src_worker(void *arg)
 
 	int devid = args->devid;
 	int workerid = args->workerid;
+	struct _starpu_machine_config *config = args->config;
 	unsigned memnode = args->memory_node;
-	unsigned baseworkerid = baseworker - config->workers;
-	unsigned mp_nodeid = baseworker->mp_nodeid;
+	unsigned baseworkerid = args - config->workers;
+	unsigned mp_nodeid = args->mp_nodeid;
 	unsigned i;
 
 	_starpu_worker_init(args, _STARPU_FUT_SCC_KEY);