Explorar o código

add async full write/read functions to backends unistd with O_DIRECT and HDF5

Corentin Salingue %!s(int64=7) %!d(string=hai) anos
pai
achega
f8316c1c95
Modificáronse 2 ficheiros con 35 adicións e 0 borrados
  1. 33 0
      src/core/disk_ops/disk_hdf5.c
  2. 2 0
      src/core/disk_ops/disk_unistd_o_direct.c

+ 33 - 0
src/core/disk_ops/disk_hdf5.c

@@ -849,6 +849,37 @@ static void * starpu_hdf5_async_write(void *base, void *obj, void *buf, off_t of
         return finished;
 }
 
+void * starpu_hdf5_async_full_read (void * base, void * obj, void ** ptr, size_t * size, unsigned dst_node)
+{
+        struct starpu_hdf5_obj * dataObj = (struct starpu_hdf5_obj *) obj;
+
+        starpu_sem_t * finished;
+        _STARPU_MALLOC(finished, sizeof(*finished));
+        starpu_sem_init(finished, 0, 0);
+
+        _starpu_hdf5_protect_start(base);
+        *size = _starpu_get_size_obj(dataObj);
+        _starpu_hdf5_protect_stop(base);
+
+        _starpu_malloc_flags_on_node(dst_node, ptr, *size, 0); 
+
+        starpu_hdf5_send_work(base, obj, 0, NULL, NULL, 0, *ptr, *size, (void*) finished, FULL_READ);
+        
+        return finished;
+}
+
+void * starpu_hdf5_async_full_write (void * base, void * obj, void * ptr, size_t size)
+{
+        starpu_sem_t * finished;
+        _STARPU_MALLOC(finished, sizeof(*finished));
+        starpu_sem_init(finished, 0, 0);
+
+        starpu_hdf5_send_work(NULL, NULL, 0, base, obj, 0, ptr, size, (void*) finished, FULL_WRITE);
+
+        return finished;
+
+}
+
 void *  starpu_hdf5_copy(void *base_src, void* obj_src, off_t offset_src,  void *base_dst, void* obj_dst, off_t offset_dst, size_t size)
 {
         starpu_sem_t * finished;
@@ -940,6 +971,8 @@ struct starpu_disk_ops starpu_disk_hdf5_ops =
 
 	.async_read = starpu_hdf5_async_read,
 	.async_write = starpu_hdf5_async_write,
+	.async_full_read = starpu_hdf5_async_full_read,
+	.async_full_write = starpu_hdf5_async_full_write,
 	.wait_request = starpu_hdf5_wait,
 	.test_request = starpu_hdf5_test,
 	.free_request = starpu_hdf5_free_request

+ 2 - 0
src/core/disk_ops/disk_unistd_o_direct.c

@@ -134,6 +134,8 @@ struct starpu_disk_ops starpu_disk_unistd_o_direct_ops =
         .wait_request = starpu_unistd_global_wait_request,
         .test_request = starpu_unistd_global_test_request,
 	.free_request = starpu_unistd_global_free_request,
+	.async_full_read = starpu_unistd_global_async_full_read,
+	.async_full_write = starpu_unistd_global_async_full_write,
 #endif
 	.full_read = starpu_unistd_global_full_read,
 	.full_write = starpu_unistd_global_full_write