Browse Source

copy_1_to_1...() can register on disk

Corentin Salingue 12 years ago
parent
commit
cb39ac03d8
4 changed files with 98 additions and 0 deletions
  1. 2 0
      src/Makefile.am
  2. 19 0
      src/datawizard/copy_driver.c
  3. 51 0
      src/drivers/disk/driver_disk.c
  4. 26 0
      src/drivers/disk/driver_disk.h

+ 2 - 0
src/Makefile.am

@@ -119,6 +119,7 @@ noinst_HEADERS = 						\
 	drivers/scc/driver_scc_common.h				\
 	drivers/scc/driver_scc_source.h				\
 	drivers/scc/driver_scc_sink.h				\
+	drivers/disk/driver_disk.h				\
 	debug/traces/starpu_fxt.h				\
 	profiling/bound.h					\
 	profiling/profiling.h					\
@@ -177,6 +178,7 @@ libstarpu_@STARPU_EFFECTIVE_VERSION@_la_SOURCES = 						\
 	sched_policies/parallel_heft.c				\
 	sched_policies/parallel_eager.c				\
 	drivers/driver_common/driver_common.c			\
+	drivers/disk/driver_disk.c				\
 	datawizard/memory_nodes.c				\
 	datawizard/write_back.c					\
 	datawizard/coherency.c					\

+ 19 - 0
src/datawizard/copy_driver.c

@@ -20,6 +20,7 @@
 #include <common/utils.h>
 #include <core/sched_policy.h>
 #include <datawizard/datastats.h>
+#include <drivers/disk/driver_disk.h>
 #include <common/fxt.h>
 #include "copy_driver.h"
 #include "memalloc.h"
@@ -569,6 +570,24 @@ int starpu_interface_copy(uintptr_t src, size_t src_offset, unsigned src_node, u
 				(void*) dst + dst_offset, dst_node,
 				size);
 #endif
+	case _STARPU_MEMORY_NODE_TUPLE(STARPU_CPU_RAM, STARPU_DISK_RAM):
+		return _starpu_disk_copy_src_to_disk(
+			(void*) src, src_offset, src_node,
+			(void*) dst, dst_offset, dst_node,
+			size);
+
+	case _STARPU_MEMORY_NODE_TUPLE(STARPU_DISK_RAM, STARPU_CPU_RAM):
+		return _starpu_disk_copy_disk_to_src(
+			(void*) src, src_offset, src_node,
+			(void*) dst, dst_offset, dst_node,
+			size);
+
+	case _STARPU_MEMORY_NODE_TUPLE(STARPU_DISK_RAM, STARPU_DISK_RAM):
+		return _starpu_disk_copy_disk_to_disk(
+			(void*) src, src_offset, src_node,
+			(void*) dst, dst_offset, dst_node,
+			size);
+
 	default:
 		STARPU_ABORT();
 		return -1;

+ 51 - 0
src/drivers/disk/driver_disk.c

@@ -0,0 +1,51 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2013 Corentin Salingue
+ *
+ * StarPU is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#include <starpu.h>
+#include <starpu_profiling.h>
+
+int _starpu_disk_copy_src_to_disk(void * src, size_t src_offset, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size)
+{
+	if (src_node != STARPU_MAIN_RAM)
+		return 0;
+
+	starpu_disk_write(dst_node, dst, src+src_offset, dst_offset, size);
+	return 1;
+}
+
+
+int _starpu_disk_copy_disk_to_src(void * src, size_t src_offset, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size)
+{
+	if (dst_node != STARPU_MAIN_RAM)
+		return 0;
+
+	starpu_disk_read(src_node, src, dst+dst_offset, src_offset, size);
+	return 1;
+}
+
+
+int _starpu_disk_copy_disk_to_disk(void * src, size_t src_offset, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size)
+{
+	void * tmp = malloc(size*sizeof(char));
+
+	starpu_disk_read(src_node, src, tmp, src_offset, size);
+
+	starpu_disk_write(dst_node, dst, tmp, dst_offset, size);
+
+	free(tmp);
+
+	return 1;
+}

+ 26 - 0
src/drivers/disk/driver_disk.h

@@ -0,0 +1,26 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2013 Corentin Salingue
+ *
+ * StarPU is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#ifndef __DRIVER_DISK_H__
+#define __DRIVER_DISK_H__
+
+int _starpu_disk_copy_src_to_disk(void * src, size_t src_offset, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size);
+
+int _starpu_disk_copy_disk_to_src(void * src, size_t src_offset, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size);
+
+int _starpu_disk_copy_disk_to_disk(void * src, size_t src_offset, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size);
+
+#endif