| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | 
							- /* StarPU --- Runtime system for heterogeneous multicore architectures.
 
-  *
 
-  * Copyright (C) 2013-2020  Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
 
-  * 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 __STARPU_DISK_H__
 
- #define __STARPU_DISK_H__
 
- #include <sys/types.h>
 
- #include <starpu_config.h>
 
- /**
 
-    @defgroup API_Out_Of_Core Out Of Core
 
-    @{
 
- */
 
- /**
 
-    Set of functions to manipulate datas on disk.
 
- */
 
- struct starpu_disk_ops
 
- {
 
- 	/**
 
- 	   Connect a disk memory at location \p parameter with size \p size, and return a
 
- 	   base as void*, which will be passed by StarPU to all other methods.
 
- 	*/
 
- 	void *  (*plug)   (void *parameter, starpu_ssize_t size);
 
- 	/**
 
- 	   Disconnect a disk memory \p base.
 
- 	*/
 
- 	void    (*unplug) (void *base);
 
- 	/**
 
- 	   Measure the bandwidth and the latency for the disk \p node and save it. Returns
 
- 	   1 if it could measure it.
 
- 	*/
 
- 	int    (*bandwidth)    (unsigned node, void *base);
 
- 	/**
 
- 	   Create a new location for datas of size \p size. Return an opaque object pointer.
 
- 	*/
 
- 	void *  (*alloc)  (void *base, size_t size);
 
- 	/**
 
- 	   Free a data \p obj previously allocated with starpu_disk_ops::alloc.
 
- 	*/
 
- 	void    (*free)   (void *base, void *obj, size_t size);
 
- 	/**
 
- 	   Open an existing location of datas, at a specific position \p pos dependent on the backend.
 
- 	*/
 
- 	void *  (*open)   (void *base, void *pos, size_t size);
 
- 	/**
 
- 	   Close, without deleting it, a location of datas \p obj.
 
- 	*/
 
- 	void    (*close)  (void *base, void *obj, size_t size);
 
- 	/**
 
- 	   Read \p size bytes of data from \p obj in \p base, at offset \p offset, and put
 
- 	   into \p buf. Return the actual number of read bytes.
 
- 	*/
 
- 	int     (*read)   (void *base, void *obj, void *buf, off_t offset, size_t size);
 
- 	/**
 
- 	   Write \p size bytes of data to \p obj in \p base, at offset \p offset, from \p buf. Return 0 on success.
 
- 	*/
 
- 	int     (*write)  (void *base, void *obj, const void *buf, off_t offset, size_t size);
 
- 	/**
 
- 	   Read all data from \p obj of \p base, from offset 0. Returns it in an allocated buffer \p ptr, of size \p size
 
- 	*/
 
- 	int	(*full_read)    (void * base, void * obj, void ** ptr, size_t * size, unsigned dst_node);
 
- 	/**
 
- 	   Write data in \p ptr to \p obj of \p base, from offset 0, and truncate \p obj to
 
- 	   \p size, so that a \c full_read will get it.
 
- 	*/
 
- 	int 	(*full_write)   (void * base, void * obj, void * ptr, size_t size);
 
- 	/**
 
- 	   Asynchronously write \p size bytes of data to \p obj in \p base, at offset \p
 
- 	   offset, from \p buf. Return a void* pointer that StarPU will pass to \c
 
- 	   xxx_request methods for testing for the completion.
 
- 	*/
 
- 	void *  (*async_write)  (void *base, void *obj, void *buf, off_t offset, size_t size);
 
- 	/**
 
- 	   Asynchronously read \p size bytes of data from \p obj in \p base, at offset \p
 
- 	   offset, and put into \p buf. Return a void* pointer that StarPU will pass to \c
 
- 	   xxx_request methods for testing for the completion.
 
- 	*/
 
- 	void *  (*async_read)   (void *base, void *obj, void *buf, off_t offset, size_t size);
 
- 	/**
 
- 	   Read all data from \p obj of \p base, from offset 0. Return it in an allocated buffer \p ptr, of size \p size
 
- 	*/
 
- 	void *	(*async_full_read)    (void * base, void * obj, void ** ptr, size_t * size, unsigned dst_node);
 
- 	/**
 
- 	   Write data in \p ptr to \p obj of \p base, from offset 0, and truncate \p obj to
 
- 	   \p size, so that a starpu_disk_ops::full_read will get it.
 
- 	*/
 
- 	void *	(*async_full_write)   (void * base, void * obj, void * ptr, size_t size);
 
- 	/**
 
- 	   Copy from offset \p offset_src of disk object \p obj_src in \p base_src to
 
- 	   offset \p offset_dst of disk object \p obj_dst in \p base_dst. Return a void*
 
- 	   pointer that StarPU will pass to \c xxx_request methods for testing for the
 
- 	   completion.
 
- 	*/
 
- 	void *  (*copy)   (void *base_src, void* obj_src, off_t offset_src,  void *base_dst, void* obj_dst, off_t offset_dst, size_t size);
 
- 	/**
 
- 	   Wait for completion of request \p async_channel returned by a previous
 
- 	   asynchronous read, write or copy.
 
- 	*/
 
- 	void   (*wait_request) (void * async_channel);
 
- 	/**
 
- 	   Test for completion of request \p async_channel returned by a previous
 
- 	   asynchronous read, write or copy. Return 1 on completion, 0 otherwise.
 
- 	*/
 
- 	int    (*test_request) (void * async_channel);
 
- 	/**
 
- 	   Free the request allocated by a previous asynchronous read, write or copy.
 
- 	*/
 
- 	void   (*free_request)(void * async_channel);
 
- 	/* TODO: readv, writev, read2d, write2d, etc. */
 
- };
 
- /**
 
-    Use the stdio library (fwrite, fread...) to read/write on disk.
 
-    <strong>Warning: It creates one file per allocation !</strong>
 
-    Do not support asynchronous transfers.
 
- */
 
- extern struct starpu_disk_ops starpu_disk_stdio_ops;
 
- /**
 
-    Use the HDF5 library.
 
-    <strong>It doesn't support multiple opening from different processes. </strong>
 
-    You may only allow one process to write in the HDF5 file.
 
-    <strong>If HDF5 library is not compiled with --thread-safe you can't open more than one HDF5 file at the same time. </strong>
 
- */
 
- extern struct starpu_disk_ops starpu_disk_hdf5_ops;
 
- /**
 
-    Use the unistd library (write, read...) to read/write on disk.
 
-    <strong>Warning: It creates one file per allocation !</strong>
 
- */
 
- extern struct starpu_disk_ops starpu_disk_unistd_ops;
 
- /**
 
-    Use the unistd library (write, read...) to read/write on disk with the O_DIRECT flag.
 
-    <strong>Warning: It creates one file per allocation !</strong>
 
-    Only available on Linux systems.
 
- */
 
- extern struct starpu_disk_ops starpu_disk_unistd_o_direct_ops;
 
- /**
 
-    Use the leveldb created by Google. More information at https://code.google.com/p/leveldb/
 
-    Do not support asynchronous transfers.
 
- */
 
- extern struct starpu_disk_ops starpu_disk_leveldb_ops;
 
- /**
 
-    Close an existing data opened with starpu_disk_open().
 
- */
 
- void starpu_disk_close(unsigned node, void *obj, size_t size);
 
- /**
 
-    Open an existing file memory in a disk node. \p size is the size of
 
-    the file. \p pos is the specific position dependent on the backend,
 
-    given to the \c open  method of the disk operations. Return an
 
-    opaque object pointer.
 
- */
 
- void *starpu_disk_open(unsigned node, void *pos, size_t size);
 
- /**
 
-    Register a disk memory node with a set of functions to manipulate
 
-    datas. The \c plug member of \p func will be passed \p parameter,
 
-    and return a \c base which will be passed to all \p func methods.
 
-    <br />
 
-    SUCCESS: return the disk node. <br />
 
-    FAIL: return an error code. <br />
 
-    \p size must be at least \ref STARPU_DISK_SIZE_MIN bytes ! \p size
 
-    being negative means infinite size.
 
- */
 
- int starpu_disk_register(struct starpu_disk_ops *func, void *parameter, starpu_ssize_t size);
 
- /**
 
-    Minimum size of a registered disk. The size of a disk is the last
 
-    parameter of the function starpu_disk_register().
 
- */
 
- #define STARPU_DISK_SIZE_MIN (16*1024*1024)
 
- /**
 
-    Contain the node number of the disk swap, if set up through the
 
-    \ref STARPU_DISK_SWAP variable.
 
- */
 
- extern int starpu_disk_swap_node;
 
- /** @} */
 
- #endif /* __STARPU_DISK_H__ */
 
 
  |