浏览代码

fixes, TODOs

Samuel Thibault 8 年之前
父节点
当前提交
6d23cdec54

+ 1 - 0
src/core/disk.c

@@ -60,6 +60,7 @@ int starpu_disk_register(struct starpu_disk_ops *func, void *parameter, starpu_s
 	/* register disk */
 	unsigned memory_node = _starpu_memory_node_register(STARPU_DISK_RAM, 0);
 
+	/* TODO: all NUMA nodes actually... */
 	_starpu_register_bus(STARPU_MAIN_RAM, memory_node);
 	_starpu_register_bus(memory_node, STARPU_MAIN_RAM);
 

+ 1 - 0
src/core/perfmodel/perfmodel_bus.c

@@ -2534,6 +2534,7 @@ double starpu_transfer_predict(unsigned src_node, unsigned dst_node, size_t size
 	return latency + (size/bandwidth)*2*ngpus;
 }
 
+/* TODO: NUMA nodes */
 
 /* calculate save bandwidth and latency */
 /* bandwidth in MB/s - latency in µs */

+ 1 - 0
src/core/simgrid.c

@@ -785,6 +785,7 @@ void _starpu_simgrid_count_ngpus(void)
 			ngpus = 0;
 			for (src2 = 1; src2 < STARPU_MAXNODES; src2++)
 			{
+				/* TODO: NUMA nodes */
 				if (starpu_bus_get_id(src2, STARPU_MAIN_RAM) == -1)
 					continue;
 				msg_host_t srchost2 = _starpu_simgrid_get_memnode_host(src2);

+ 5 - 1
src/core/topology.c

@@ -1639,7 +1639,7 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 				_starpu_memory_node_add_nworkers(memory_node);
 #ifdef STARPU_SIMGRID
 				starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[memory_node]);
-				if (starpu_node_get_kind(memory_node) != STARPU_CPU_RAM)
+				if (memory_node != STARPU_MAIN_RAM)
 					starpu_pthread_queue_register(&workerarg->wait, &_starpu_simgrid_transfer_queue[STARPU_MAIN_RAM]);
 #endif
 				break;
@@ -1670,6 +1670,7 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 					workerarg->bindid = cuda_bindid[devid] = _starpu_get_next_bindid(config, preferred_binding, npreferred);
 					memory_node = cuda_memory_nodes[devid] = _starpu_memory_node_register(STARPU_CUDA_RAM, devid);
 
+					/* TODO: NUMA nodes */
 					_starpu_cuda_bus_ids[0][devid+1] = _starpu_register_bus(STARPU_MAIN_RAM, memory_node);
 					_starpu_cuda_bus_ids[devid+1][0] = _starpu_register_bus(memory_node, STARPU_MAIN_RAM);
 #ifdef STARPU_SIMGRID
@@ -1757,6 +1758,7 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 					opencl_init[devid] = 1;
 					workerarg->bindid = opencl_bindid[devid] = _starpu_get_next_bindid(config, preferred_binding, npreferred);
 					memory_node = opencl_memory_nodes[devid] = _starpu_memory_node_register(STARPU_OPENCL_RAM, devid);
+					/* TODO: NUMA nodes */
 					_starpu_register_bus(STARPU_MAIN_RAM, memory_node);
 					_starpu_register_bus(memory_node, STARPU_MAIN_RAM);
 #ifdef STARPU_SIMGRID
@@ -1792,6 +1794,8 @@ _starpu_init_workers_binding (struct _starpu_machine_config *config, int no_mp_c
 					//}
 					mic_bindid[devid] = _starpu_get_next_bindid(config, preferred_binding, npreferred);
 					memory_node = mic_memory_nodes[devid] = _starpu_memory_node_register(STARPU_MIC_RAM, devid);
+
+					/* TODO: NUMA nodes */
 					_starpu_register_bus(STARPU_MAIN_RAM, memory_node);
 					_starpu_register_bus(memory_node, STARPU_MAIN_RAM);
 

+ 1 - 0
src/datawizard/coherency.c

@@ -340,6 +340,7 @@ static int determine_request_path(starpu_data_handle_t handle,
 	unsigned handling_node;
 	int link_is_valid = link_supports_direct_transfers(handle, src_node, dst_node, &handling_node);
 
+	/* TODO: NUMA nodes */
 	if (!link_is_valid)
 	{
 		int (*can_copy)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, unsigned handling_node) = handle->ops->copy_methods->can_copy;

+ 2 - 0
src/datawizard/memalloc.c

@@ -615,6 +615,7 @@ static unsigned try_to_reuse_mem_chunk(struct _starpu_mem_chunk *mc, unsigned no
 	old_data = mc->data;
 
 	STARPU_ASSERT(old_data);
+	STARPU_ASSERT(old_data->home_node != node); /* Would be useless :) */
 
 	/* try to lock all the subtree */
 	/* and check if they are all "free" */
@@ -1585,6 +1586,7 @@ get_better_disk_can_accept_size(starpu_data_handle_t handle, unsigned node)
 			{
 				/* only time can change between disk <-> main_ram
 				 * and not between main_ram <-> worker if we compare diks*/
+				/* TODO: NUMA nodes */
 				double time_tmp = starpu_transfer_predict(i, STARPU_MAIN_RAM, _starpu_data_get_size(handle));
 				if (target == -1 || time_disk > time_tmp)
 				{

+ 4 - 4
src/datawizard/user_interactions.c

@@ -190,7 +190,7 @@ int starpu_data_acquire_cb(starpu_data_handle_t handle,
 			   enum starpu_data_access_mode mode, void (*callback)(void *), void *arg)
 {
 	int home_node = handle->home_node;
-	if (home_node < 0 || starpu_node_get_kind(home_node) != STARPU_CPU_RAM)
+	if (home_node < 0)
 		home_node = STARPU_MAIN_RAM;
 	return starpu_data_acquire_on_node_cb(handle, home_node, mode, callback, arg);
 }
@@ -199,7 +199,7 @@ int starpu_data_acquire_cb_sequential_consistency(starpu_data_handle_t handle,
 						  enum starpu_data_access_mode mode, void (*callback)(void *), void *arg, int sequential_consistency)
 {
 	int home_node = handle->home_node;
-	if (home_node < 0 || starpu_node_get_kind(home_node) != STARPU_CPU_RAM)
+	if (home_node < 0)
 		home_node = STARPU_MAIN_RAM;
 	return starpu_data_acquire_on_node_cb_sequential_consistency(handle, home_node, mode, callback, arg, sequential_consistency);
 }
@@ -333,7 +333,7 @@ int starpu_data_acquire_on_node(starpu_data_handle_t handle, int node, enum star
 int starpu_data_acquire(starpu_data_handle_t handle, enum starpu_data_access_mode mode)
 {
 	int home_node = handle->home_node;
-	if (home_node < 0 || starpu_node_get_kind(home_node) != STARPU_CPU_RAM)
+	if (home_node < 0)
 		home_node = STARPU_MAIN_RAM;
 	return starpu_data_acquire_on_node(handle, home_node, mode);
 }
@@ -368,7 +368,7 @@ void starpu_data_release_on_node(starpu_data_handle_t handle, int node)
 void starpu_data_release(starpu_data_handle_t handle)
 {
 	int home_node = handle->home_node;
-	if (home_node < 0 || starpu_node_get_kind(home_node) != STARPU_CPU_RAM)
+	if (home_node < 0)
 		home_node = STARPU_MAIN_RAM;
 	starpu_data_release_on_node(handle, home_node);
 }