Browse Source

change starpu_disk_unregister to private and unregister disks in shutdown

Corentin Salingue 12 years ago
parent
commit
b5ba82d1a5
6 changed files with 19 additions and 23 deletions
  1. 0 2
      include/starpu_disk.h
  2. 11 15
      src/core/disk.c
  3. 4 0
      src/core/disk.h
  4. 3 1
      src/core/workers.c
  5. 0 2
      tests/disk/disk_compute.c
  6. 1 3
      tests/disk/disk_copy.c

+ 0 - 2
include/starpu_disk.h

@@ -41,6 +41,4 @@ extern struct starpu_disk_ops starpu_disk_stdio_ops;
 /* interface to create and to free a memory disk */
 int starpu_disk_register(struct starpu_disk_ops * func, void *parameter, size_t size);
 
-void starpu_disk_unregister(unsigned node);
-
 #endif /* __STARPU_DISK_H__ */

+ 11 - 15
src/core/disk.c

@@ -22,14 +22,15 @@
 #include <sys/stat.h>
 #include <time.h>
 
-#include <datawizard/memory_manager.h>
 #include <common/config.h>
 #include <core/debug.h>
 #include <core/disk.h>
 #include <core/workers.h>
 #include <core/perfmodel/perfmodel.h>
-
 #include <core/topology.h>
+#include <datawizard/memory_manager.h>
+#include <datawizard/memalloc.h>
+
 #include <drivers/cuda/driver_cuda.h>
 #include <drivers/opencl/driver_opencl.h>
 #include <profiling/profiling.h>
@@ -78,27 +79,22 @@ starpu_disk_register(struct starpu_disk_ops * func, void *parameter, size_t size
 
 
 void
-starpu_disk_unregister(unsigned node)
+_starpu_disk_unregister(void)
 {
-	bool find = false;
 	int i;
 	
 	/* search disk and delete it */
 	for (i = 0; i <= disk_number; ++i)
 	{
-		if (find)
-			disk_register_list[i-1] = disk_register_list[i];
-		if (disk_register_list[i]->node == node)
-		{
-			/* don't forget to unplug */
-			disk_register_list[i]->functions->unplug(disk_register_list[i]->base);
-			free(disk_register_list[i]);
-			find = true; 
-		}
+		_starpu_set_disk_flag(disk_register_list[i]->node, STARPU_DISK_NO_RECLAIM);
+		_starpu_free_all_automatically_allocated_buffers(disk_register_list[i]->node);	
+
+		/* don't forget to unplug */
+		disk_register_list[i]->functions->unplug(disk_register_list[i]->base);
+		free(disk_register_list[i]);
 	}
 	
 	/* no disk in the list -> delete the list */
-	STARPU_ASSERT_MSG(find, "Disk node not found !(%u) ", node);
 	disk_number--;
 
 	if (disk_register_list != NULL && disk_number == -1)
@@ -229,7 +225,7 @@ _starpu_is_same_kind_disk(unsigned node1, unsigned node2)
 
 
 void
- _starpu_set_disk_flag(unsigned node, int flag)
+_starpu_set_disk_flag(unsigned node, int flag)
 {
 	int pos = get_location_with_node(node);
 	disk_register_list[pos]->flag = flag;

+ 4 - 0
src/core/disk.h

@@ -47,4 +47,8 @@ int _starpu_is_same_kind_disk(unsigned node1, unsigned node2);
 void _starpu_set_disk_flag(unsigned node, int flag);
 int _starpu_get_disk_flag(unsigned node);
 
+/* unregister disk */
+
+void _starpu_disk_unregister(void);
+
 #endif /* __DISK_H__ */

+ 3 - 1
src/core/workers.c

@@ -25,6 +25,7 @@
 #include <core/progress_hook.h>
 #include <core/workers.h>
 #include <core/debug.h>
+#include <core/disk.h>
 #include <core/task.h>
 #include <profiling/profiling.h>
 #include <starpu_task_list.h>
@@ -1200,8 +1201,9 @@ void starpu_shutdown(void)
 
 	_starpu_delete_all_sched_ctxs();
 
-	_starpu_destroy_topology(&config);
+	_starpu_disk_unregister();
 
+	_starpu_destroy_topology(&config);
 #ifdef STARPU_USE_FXT
 	_starpu_stop_fxt_profiling();
 #endif

+ 0 - 2
tests/disk/disk_compute.c

@@ -102,8 +102,6 @@ int main(int argc, char **argv)
 	starpu_data_unregister(vector_handleE);
 	starpu_data_unregister(vector_handleF);
 
-	starpu_disk_unregister(dd);
-
 	/* check if computation is correct */
 	int try = 1;
 	for (j = 0; j < NX; ++j)

+ 1 - 3
tests/disk/disk_copy.c

@@ -101,9 +101,7 @@ int main(int argc, char **argv)
 	starpu_data_unregister(vector_handleD);
 	starpu_data_unregister(vector_handleE);
 	starpu_data_unregister(vector_handleF);
-
-	starpu_disk_unregister(dd);
-
+	
 	/* check if computation is correct */
 	int try = 1;
 	for (j = 0; j < NX; ++j)