Browse Source

add async hdf5 functions

Corentin Salingue 8 years ago
parent
commit
4c9db67271
1 changed files with 41 additions and 1 deletions
  1. 41 1
      src/core/disk_ops/disk_hdf5.c

+ 41 - 1
src/core/disk_ops/disk_hdf5.c

@@ -559,6 +559,13 @@ static void starpu_hdf5_wait(void * event)
                 ;
 }
 
+static int starpu_hdf5_test(void * event)
+{
+        volatile int * finished = (int *) event;
+
+        return *finished == 1;
+}
+
 static int starpu_hdf5_full_read(void *base, void *obj, void **ptr, size_t *size)
 {
         struct starpu_hdf5_obj * dataObj = (struct starpu_hdf5_obj *) obj;
@@ -611,6 +618,33 @@ static int starpu_hdf5_write(void *base, void *obj, const void *buf, off_t offse
         return 0;
 }
 
+static void * starpu_hdf5_async_read(void *base, void *obj, void *buf, off_t offset, size_t size)
+{
+        int * finished;
+        _STARPU_MALLOC(finished, sizeof(*finished));
+        *finished = 0;
+
+        starpu_hdf5_send_work(base, obj, buf, offset, size, (void*) finished, READ);
+
+        return finished;
+}
+
+static void * starpu_hdf5_async_write(void *base, void *obj, void *buf, off_t offset, size_t size)
+{
+        int * finished;
+        _STARPU_MALLOC(finished, sizeof(*finished));
+        *finished = 0;
+
+        starpu_hdf5_send_work(base, obj, (void *) buf, offset, size, (void*) finished, WRITE);
+
+        return finished;
+}
+
+static void starpu_hdf5_free_request(void * event)
+{
+        free(event);
+}
+
 static int get_hdf5_bandwidth_between_disk_and_main_ram(unsigned node)
 {
 	unsigned iter;
@@ -679,5 +713,11 @@ struct starpu_disk_ops starpu_disk_hdf5_ops =
 	.copy = NULL,
 	.bandwidth = get_hdf5_bandwidth_between_disk_and_main_ram,
 	.full_read = starpu_hdf5_full_read,
-	.full_write = starpu_hdf5_full_write
+	.full_write = starpu_hdf5_full_write,
+
+	.async_read = starpu_hdf5_async_read,
+	.async_write = starpu_hdf5_async_write,
+	.wait_request = starpu_hdf5_wait,
+	.test_request = starpu_hdf5_test,
+	.free_request = starpu_hdf5_free_request
 };