Преглед на файлове

add new functions to manipulate disk memoy + add private interface + change disk (second part)

Corentin Salingue преди 12 години
родител
ревизия
17f75a185b
променени са 7 файла, в които са добавени 79 реда и са изтрити 36 реда
  1. 1 17
      include/starpu_disk.h
  2. 1 0
      src/Makefile.am
  3. 28 13
      src/core/disk.c
  4. 40 0
      src/core/disk.h
  5. 2 1
      src/datawizard/coherency.c
  6. 3 2
      src/datawizard/malloc.c
  7. 4 3
      src/drivers/disk/driver_disk.c

+ 1 - 17
include/starpu_disk.h

@@ -24,7 +24,7 @@ typedef void * (*disk_function)(void *, unsigned);
 struct disk_ops {
 struct disk_ops {
  	 void *  (*alloc)  (void *base, size_t size);
  	 void *  (*alloc)  (void *base, size_t size);
 	 void    (*free)   (void *base, void *obj, size_t size);
 	 void    (*free)   (void *base, void *obj, size_t size);
-	 void *  (*open)   (void *base, void *pos, size_t size);
+	 void *  (*open)   (void *base, void *pos, size_t size);     /* open an existing file */
 	 void    (*close)  (void *base, void *obj, size_t size);
 	 void    (*close)  (void *base, void *obj, size_t size);
 	ssize_t  (*read)   (void *base, void *obj, void *buf, off_t offset, size_t size);        /* ~= pread */
 	ssize_t  (*read)   (void *base, void *obj, void *buf, off_t offset, size_t size);        /* ~= pread */
 	ssize_t  (*write)  (void *base, void *obj, const void *buf, off_t offset, size_t size); 
 	ssize_t  (*write)  (void *base, void *obj, const void *buf, off_t offset, size_t size); 
@@ -45,20 +45,4 @@ unsigned starpu_disk_register(struct disk_ops * func, void *parameter, size_t si
 
 
 void starpu_disk_unregister(unsigned node);
 void starpu_disk_unregister(unsigned node);
 
 
-
-/* interface to manipulate memory disk */
-void * starpu_disk_alloc (unsigned node, size_t size);
-
-void starpu_disk_free (unsigned node, void *obj, size_t size);
-
-ssize_t starpu_disk_read(unsigned node, void *obj, void *buf, off_t offset, size_t size);
-
-ssize_t starpu_disk_write(unsigned node, void *obj, const void *buf, off_t offset, size_t size);
-
-int starpu_disk_copy(unsigned node_src, void* obj_src, off_t offset_src, unsigned node_dst, void* obj_dst, off_t offset_dst, size_t size);
-
-/* interface to compare memory disk */
-
-int starpu_is_same_kind_disk(unsigned node1, unsigned node2);
-
 #endif /* __STARPU_DISK_H__ */
 #endif /* __STARPU_DISK_H__ */

+ 1 - 0
src/Makefile.am

@@ -61,6 +61,7 @@ noinst_HEADERS = 						\
 	core/dependencies/cg.h					\
 	core/dependencies/cg.h					\
 	core/dependencies/tags.h				\
 	core/dependencies/tags.h				\
 	core/dependencies/implicit_data_deps.h			\
 	core/dependencies/implicit_data_deps.h			\
+	core/disk.h						\
 	core/progress_hook.h                                    \
 	core/progress_hook.h                                    \
 	core/sched_policy.h					\
 	core/sched_policy.h					\
 	core/sched_ctx.h					\
 	core/sched_ctx.h					\

+ 28 - 13
src/core/disk.c

@@ -55,7 +55,7 @@ unsigned
 starpu_disk_register(struct disk_ops * func, void *parameter, size_t size)
 starpu_disk_register(struct disk_ops * func, void *parameter, size_t size)
 {
 {
 
 
-	STARPU_ASSERT_MSG(size >= SIZE,"Minimum disk size is %u Bytes ! (Here %u)", SIZE, size);
+	STARPU_ASSERT_MSG(size >= SIZE,"Minimum disk size is %u Bytes ! (Here %u)", (int) SIZE, (int) size);
 	/* register disk */
 	/* register disk */
 	unsigned memory_node = _starpu_memory_node_register(STARPU_DISK_RAM, 0);
 	unsigned memory_node = _starpu_memory_node_register(STARPU_DISK_RAM, 0);
 
 
@@ -109,21 +109,21 @@ starpu_disk_unregister(unsigned node)
 /* interface between user and disk memory */
 /* interface between user and disk memory */
 
 
 void *  
 void *  
-starpu_disk_alloc(unsigned node, size_t size)
+_starpu_disk_alloc(unsigned node, size_t size)
 {
 {
 	int pos = get_location_with_node(node);
 	int pos = get_location_with_node(node);
 	return disk_register_list[pos]->functions->alloc(disk_register_list[pos]->base, size);
 	return disk_register_list[pos]->functions->alloc(disk_register_list[pos]->base, size);
 }
 }
 
 
 void
 void
-starpu_disk_free(unsigned node, void *obj, size_t size)
+_starpu_disk_free(unsigned node, void *obj, size_t size)
 {
 {
 	int pos = get_location_with_node(node);
 	int pos = get_location_with_node(node);
 	disk_register_list[pos]->functions->free(disk_register_list[pos]->base, obj, size);
 	disk_register_list[pos]->functions->free(disk_register_list[pos]->base, obj, size);
 }
 }
 
 
 ssize_t 
 ssize_t 
-starpu_disk_read(unsigned node, void *obj, void *buf, off_t offset, size_t size)
+_starpu_disk_read(unsigned node, void *obj, void *buf, off_t offset, size_t size)
 {
 {
 	int pos = get_location_with_node(node);
 	int pos = get_location_with_node(node);
 	return disk_register_list[pos]->functions->read(disk_register_list[pos]->base, obj, buf, offset, size);
 	return disk_register_list[pos]->functions->read(disk_register_list[pos]->base, obj, buf, offset, size);
@@ -131,14 +131,14 @@ starpu_disk_read(unsigned node, void *obj, void *buf, off_t offset, size_t size)
 
 
 
 
 ssize_t 
 ssize_t 
-starpu_disk_write(unsigned node, void *obj, const void *buf, off_t offset, size_t size)
+_starpu_disk_write(unsigned node, void *obj, const void *buf, off_t offset, size_t size)
 {
 {
 	int pos = get_location_with_node(node);
 	int pos = get_location_with_node(node);
 	return disk_register_list[pos]->functions->write(disk_register_list[pos]->base, obj, buf, offset, size);
 	return disk_register_list[pos]->functions->write(disk_register_list[pos]->base, obj, buf, offset, size);
 }
 }
 
 
 int
 int
-starpu_disk_copy(unsigned node_src, void* obj_src, off_t offset_src, unsigned node_dst, void* obj_dst, off_t offset_dst, size_t size)
+_starpu_disk_copy(unsigned node_src, void* obj_src, off_t offset_src, unsigned node_dst, void* obj_dst, off_t offset_dst, size_t size)
 {
 {
 	int pos_src = get_location_with_node(node_src);
 	int pos_src = get_location_with_node(node_src);
 	int pos_dst = get_location_with_node(node_dst);
 	int pos_dst = get_location_with_node(node_dst);
@@ -146,9 +146,23 @@ starpu_disk_copy(unsigned node_src, void* obj_src, off_t offset_src, unsigned no
 	return disk_register_list[pos_src]->functions->copy(disk_register_list[pos_src]->base, obj_src, offset_src, 
 	return disk_register_list[pos_src]->functions->copy(disk_register_list[pos_src]->base, obj_src, offset_src, 
 						        disk_register_list[pos_dst]->base, obj_dst, offset_dst,
 						        disk_register_list[pos_dst]->base, obj_dst, offset_dst,
 							size);
 							size);
+}
+
+void * 
+_starpu_disk_open(unsigned node, void *pos, size_t size)
+{
+	int position = get_location_with_node(node);
+	return disk_register_list[position]->functions->open(disk_register_list[position]->base, pos, size);
+}
 
 
+void 
+_starpu_disk_close(unsigned node, void *obj, size_t size)
+{
+	int position = get_location_with_node(node);
+	disk_register_list[position]->functions->close(disk_register_list[position]->base, obj, size);	
 }
 }
 
 
+
 static void 
 static void 
 add_disk_in_list(unsigned node,  struct disk_ops * func, void * base)
 add_disk_in_list(unsigned node,  struct disk_ops * func, void * base)
 {
 {
@@ -194,7 +208,7 @@ get_location_with_node(unsigned node)
 }
 }
 
 
 int 
 int 
-starpu_is_same_kind_disk(unsigned node1, unsigned node2)
+_starpu_is_same_kind_disk(unsigned node1, unsigned node2)
 {
 {
 	
 	
 	if(starpu_node_get_kind(node1) == STARPU_DISK_RAM && starpu_node_get_kind(node2) == STARPU_DISK_RAM)
 	if(starpu_node_get_kind(node1) == STARPU_DISK_RAM && starpu_node_get_kind(node2) == STARPU_DISK_RAM)
@@ -221,8 +235,9 @@ struct starpu_stdio_obj {
 
 
 /* allocation memory on disk */
 /* allocation memory on disk */
 static void * 
 static void * 
-starpu_stdio_alloc (void *base, size_t size)
+starpu_stdio_alloc (void *base, size_t size STARPU_ATTRIBUTE_UNUSED)
 {
 {
+	
 	struct starpu_stdio_obj * obj = malloc(sizeof(struct starpu_stdio_obj));
 	struct starpu_stdio_obj * obj = malloc(sizeof(struct starpu_stdio_obj));
 	STARPU_ASSERT(obj != NULL);
 	STARPU_ASSERT(obj != NULL);
 	int id = -1;
 	int id = -1;
@@ -259,7 +274,7 @@ starpu_stdio_alloc (void *base, size_t size)
 
 
 /* free memory on disk */
 /* free memory on disk */
 static void
 static void
-starpu_stdio_free (void *base, void *obj, size_t size)
+starpu_stdio_free (void *base STARPU_ATTRIBUTE_UNUSED, void *obj, size_t size STARPU_ATTRIBUTE_UNUSED)
 {
 {
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 
 
@@ -279,7 +294,7 @@ starpu_unistd_open (void *base, void *pos, size_t size)
 	struct starpu_stdio_obj * obj = malloc(sizeof(struct starpu_stdio_obj));
 	struct starpu_stdio_obj * obj = malloc(sizeof(struct starpu_stdio_obj));
 	STARPU_ASSERT(obj != NULL);
 	STARPU_ASSERT(obj != NULL);
 
 
-	/* create template for mkstemp */
+	/* create template */
 	unsigned int sizeBase = 16;
 	unsigned int sizeBase = 16;
 	while(sizeBase < (strlen(base)+strlen(pos)+1))
 	while(sizeBase < (strlen(base)+strlen(pos)+1))
 		sizeBase *= 2;
 		sizeBase *= 2;
@@ -307,7 +322,7 @@ starpu_unistd_open (void *base, void *pos, size_t size)
 
 
 /* free memory without delete it */
 /* free memory without delete it */
 static void 
 static void 
-starpu_unistd_close (void *base, void *obj, size_t size)
+starpu_unistd_close (void *base STARPU_ATTRIBUTE_UNUSED, void *obj, size_t size STARPU_ATTRIBUTE_UNUSED)
 {
 {
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 
 
@@ -320,7 +335,7 @@ starpu_unistd_close (void *base, void *obj, size_t size)
 
 
 /* read the memory disk */
 /* read the memory disk */
 static ssize_t 
 static ssize_t 
-starpu_stdio_read (void *base, void *obj, void *buf, off_t offset, size_t size)
+starpu_stdio_read (void *base STARPU_ATTRIBUTE_UNUSED, void *obj, void *buf, off_t offset, size_t size)
 {
 {
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 	
 	
@@ -334,7 +349,7 @@ starpu_stdio_read (void *base, void *obj, void *buf, off_t offset, size_t size)
 
 
 /* write on the memory disk */
 /* write on the memory disk */
 static ssize_t 
 static ssize_t 
-starpu_stdio_write (void *base, void *obj, const void *buf, off_t offset, size_t size)
+starpu_stdio_write (void *base STARPU_ATTRIBUTE_UNUSED, void *obj, const void *buf, off_t offset, size_t size)
 {
 {
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 	struct starpu_stdio_obj * tmp = (struct starpu_stdio_obj *) obj;
 
 

+ 40 - 0
src/core/disk.h

@@ -0,0 +1,40 @@
+
+/* 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 __DISK_H__
+#define __DISK_H__
+
+/* interface to manipulate memory disk */
+void * _starpu_disk_alloc (unsigned node, size_t size);
+
+void _starpu_disk_free (unsigned node, void *obj, size_t size);
+
+void _starpu_disk_close(unsigned node, void *obj, size_t size);
+
+void * _starpu_disk_open(unsigned node, void *pos, size_t size);
+
+ssize_t _starpu_disk_read(unsigned node, void *obj, void *buf, off_t offset, size_t size);
+
+ssize_t _starpu_disk_write(unsigned node, void *obj, const void *buf, off_t offset, size_t size);
+
+int _starpu_disk_copy(unsigned node_src, void* obj_src, off_t offset_src, unsigned node_dst, void* obj_dst, off_t offset_dst, size_t size);
+
+/* interface to compare memory disk */
+
+int _starpu_is_same_kind_disk(unsigned node1, unsigned node2);
+
+#endif /* __DISK_H__ */

+ 2 - 1
src/datawizard/coherency.c

@@ -20,6 +20,7 @@
 #include <datawizard/copy_driver.h>
 #include <datawizard/copy_driver.h>
 #include <datawizard/write_back.h>
 #include <datawizard/write_back.h>
 #include <core/dependencies/data_concurrency.h>
 #include <core/dependencies/data_concurrency.h>
+#include <core/disk.h>
 #include <profiling/profiling.h>
 #include <profiling/profiling.h>
 #include <math.h>
 #include <math.h>
 #include <core/task.h>
 #include <core/task.h>
@@ -242,7 +243,7 @@ static int link_supports_direct_transfers(starpu_data_handle_t handle, unsigned
 	}
 	}
 
 
 	/* link between disk and disk, and they have the same kind */
 	/* link between disk and disk, and they have the same kind */
-	if (starpu_is_same_kind_disk(src_node, dst_node))
+	if (_starpu_is_same_kind_disk(src_node, dst_node))
 		return 1;
 		return 1;
 
 
 	return 0;
 	return 0;

+ 3 - 2
src/datawizard/malloc.c

@@ -18,6 +18,7 @@
 #include <errno.h>
 #include <errno.h>
 
 
 #include <core/workers.h>
 #include <core/workers.h>
+#include <core/disk.h>
 #include <common/config.h>
 #include <common/config.h>
 #include <starpu.h>
 #include <starpu.h>
 #include <drivers/opencl/driver_opencl.h>
 #include <drivers/opencl/driver_opencl.h>
@@ -420,7 +421,7 @@ starpu_malloc_on_node(unsigned dst_node, size_t size)
 #endif
 #endif
 	        case STARPU_DISK_RAM:
 	        case STARPU_DISK_RAM:
 		{
 		{
-			addr = (uintptr_t) starpu_disk_alloc(dst_node, size);
+			addr = (uintptr_t) _starpu_disk_alloc(dst_node, size);
 			break;
 			break;
 		}
 		}
 			
 			
@@ -493,7 +494,7 @@ starpu_free_on_node(unsigned dst_node, uintptr_t addr, size_t size)
 #endif
 #endif
 	        case STARPU_DISK_RAM:
 	        case STARPU_DISK_RAM:
 		{
 		{
-			starpu_disk_free (dst_node, (void *) addr , size);
+			_starpu_disk_free (dst_node, (void *) addr , size);
 			break;
 			break;
 		}
 		}
 
 

+ 4 - 3
src/drivers/disk/driver_disk.c

@@ -15,13 +15,14 @@
  */
  */
 
 
 #include <starpu.h>
 #include <starpu.h>
+#include <core/disk.h>
 #include <starpu_profiling.h>
 #include <starpu_profiling.h>
 
 
 int _starpu_disk_copy_src_to_disk(void * src, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size)
 int _starpu_disk_copy_src_to_disk(void * src, unsigned src_node, void * dst, size_t dst_offset, unsigned dst_node, size_t size)
 {
 {
 	STARPU_ASSERT(starpu_node_get_kind(src_node) == STARPU_CPU_RAM);
 	STARPU_ASSERT(starpu_node_get_kind(src_node) == STARPU_CPU_RAM);
 
 
-	starpu_disk_write(dst_node, dst, src, dst_offset, size);
+	_starpu_disk_write(dst_node, dst, src, dst_offset, size);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -30,7 +31,7 @@ int _starpu_disk_copy_disk_to_src(void * src, size_t src_offset, unsigned src_no
 {
 {
 	STARPU_ASSERT(starpu_node_get_kind(dst_node) == STARPU_CPU_RAM);
 	STARPU_ASSERT(starpu_node_get_kind(dst_node) == STARPU_CPU_RAM);
 
 
-	starpu_disk_read(src_node, src, dst, src_offset, size);
+	_starpu_disk_read(src_node, src, dst, src_offset, size);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -39,7 +40,7 @@ int _starpu_disk_copy_disk_to_disk(void * src, size_t src_offset, unsigned src_n
 {
 {
 	STARPU_ASSERT(starpu_node_get_kind(src_node) == STARPU_DISK_RAM && starpu_node_get_kind(dst_node) == STARPU_DISK_RAM);
 	STARPU_ASSERT(starpu_node_get_kind(src_node) == STARPU_DISK_RAM && starpu_node_get_kind(dst_node) == STARPU_DISK_RAM);
 
 
-       return starpu_disk_copy(src_node, src, src_offset, 
+       return _starpu_disk_copy(src_node, src, src_offset, 
 			       dst_node, dst, dst_offset,
 			       dst_node, dst, dst_offset,
 			       size); 
 			       size);