Corentin Salingue лет назад: 12
Родитель
Сommit
aa9ac54085
5 измененных файлов с 34 добавлено и 3 удалено
  1. 2 0
      include/starpu_disk.h
  2. 12 0
      src/core/disk.c
  3. 3 0
      src/core/disk.h
  4. 16 2
      src/datawizard/copy_driver.c
  5. 1 1
      tests/disk/disk_compute.c

+ 2 - 0
include/starpu_disk.h

@@ -35,6 +35,8 @@ struct starpu_disk_ops {
 	 int    (*bandwidth)    (unsigned node);
 	 void   (*wait_request) (void * async_channel);
 	 int    (*test_request) (void * async_channel);
+	 int	(*full_read)    (void * base, void * obj, void ** ptr, size_t * size);
+	 int 	(*full_write)   (void * base, void * obj, void * ptr, size_t size);
 };
 
 

+ 12 - 0
src/core/disk.c

@@ -150,6 +150,18 @@ _starpu_disk_read(unsigned src_node, unsigned dst_node, void *obj, void *buf, of
 	return -EAGAIN;
 }
 
+int _starpu_disk_full_read(unsigned src_node, unsigned dst_node, void * obj, void ** ptr, size_t * size)
+{
+	int pos = get_location_with_node(src_node);
+        return disk_register_list[pos]->functions->full_read(disk_register_list[pos]->base, obj, ptr, size);
+}
+
+int _starpu_disk_full_write(unsigned src_node, unsigned dst_node, void * obj, void * ptr, size_t size)
+{
+	int pos = get_location_with_node(dst_node);
+        return disk_register_list[pos]->functions->full_write(disk_register_list[pos]->base, obj, ptr, size);
+}
+
 /* src_node == STARPU_MAIN_RAM and dst_node == disk node */
 int 
 _starpu_disk_write(unsigned src_node, unsigned dst_node, void *obj, void *buf, off_t offset, size_t size, void * async_channel)

+ 3 - 0
src/core/disk.h

@@ -32,6 +32,9 @@ int _starpu_disk_read(unsigned src_node, unsigned dst_node, void *obj, void *buf
 /* src_node is for the moment the STARU_MAIN_RAM, dst_node is a disk node */ 
 int _starpu_disk_write(unsigned src_node, unsigned dst_node, void *obj, void *buf, off_t offset, size_t size, void * async_channel);
 
+int _starpu_disk_full_read(unsigned src_node, unsigned dst_node, void * obj, void ** ptr, size_t * size);
+int _starpu_disk_full_write(unsigned src_node, unsigned dst_node, void * obj, void * ptr, 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, void * async_channel);
 
 /* force the request to compute */

+ 16 - 2
src/datawizard/copy_driver.c

@@ -402,14 +402,28 @@ static int copy_data_1_to_1_generic(starpu_data_handle_t handle,
 			ret = copy_methods->any_to_any(src_interface, src_node, dst_interface, dst_node, req ? &req->async_channel : NULL);
 
 		else
-			STARPU_ABORT();
+		{
+			//TODO OBJ
+			void * obj;
+			void * ptr = NULL;
+			starpu_ssize_t size = 0;
+			handle->ops->pack_data(handle, src_node, &ptr, &size);
+			ret = _starpu_disk_full_write(src_node, dst_node, obj, ptr, size);
+		}
 		break;
 		
 	case _STARPU_MEMORY_NODE_TUPLE(STARPU_DISK_RAM,STARPU_CPU_RAM):
 		if(copy_methods->any_to_any) 
 			ret = copy_methods->any_to_any(src_interface, src_node, dst_interface, dst_node, req ? &req->async_channel : NULL);
 		else
-			STARPU_ABORT();
+		{
+			//TODO OBJ
+			void * obj;
+			void * ptr = NULL;
+			size_t size = 0;
+			ret = _starpu_disk_full_read(src_node, dst_node, obj, &ptr, &size);
+			handle->ops->unpack_data(handle, dst_node, ptr, size); 
+		}
 		break;
 
 	case _STARPU_MEMORY_NODE_TUPLE(STARPU_DISK_RAM,STARPU_DISK_RAM):	

+ 1 - 1
tests/disk/disk_compute.c

@@ -65,7 +65,7 @@ int main(int argc, char **argv)
 
 
 	/* register a disk */
-	int new_dd = starpu_disk_register(&starpu_disk_unistd_o_direct_ops, (void *) base, 1024*1024*1);
+	int new_dd = starpu_disk_register(&starpu_disk_stdio_ops, (void *) base, 1024*1024*1);
 	/* can't write on /tmp/ */
 	if (new_dd == -ENOENT) goto enoent;