19 #include <sys/types.h>
24 #include <kvikio/buffer.hpp>
25 #include <kvikio/compat_mode.hpp>
26 #include <kvikio/compat_mode_manager.hpp>
27 #include <kvikio/cufile/config.hpp>
28 #include <kvikio/defaults.hpp>
29 #include <kvikio/error.hpp>
30 #include <kvikio/file_utils.hpp>
31 #include <kvikio/parallel_operation.hpp>
32 #include <kvikio/posix_io.hpp>
33 #include <kvikio/shim/cufile.hpp>
34 #include <kvikio/shim/cufile_h_wrapper.hpp>
35 #include <kvikio/stream.hpp>
36 #include <kvikio/utils.hpp>
50 bool _initialized{
false};
51 mutable std::size_t _nbytes{0};
59 static constexpr mode_t m644 = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
79 std::string
const& flags =
"r",
97 [[nodiscard]]
bool closed() const noexcept;
123 [[nodiscard]]
int fd(
bool o_direct = false) const noexcept;
144 [[nodiscard]] std::
size_t nbytes() const;
176 std::
size_t read(
void* devPtr_base,
178 std::
size_t file_offset,
179 std::
size_t devPtr_offset,
180 bool sync_default_stream = true);
213 std::
size_t write(
void const* devPtr_base,
215 std::
size_t file_offset,
216 std::
size_t devPtr_offset,
217 bool sync_default_stream = true);
249 std::future<std::
size_t>
pread(
void* buf,
251 std::
size_t file_offset = 0,
252 std::
size_t task_size =
defaults::task_size(),
253 std::
size_t gds_threshold =
defaults::gds_threshold(),
254 bool sync_default_stream = true);
286 std::future<std::
size_t>
pwrite(
void const* buf,
288 std::
size_t file_offset = 0,
289 std::
size_t task_size =
defaults::task_size(),
290 std::
size_t gds_threshold =
defaults::gds_threshold(),
291 bool sync_default_stream = true);
329 off_t* file_offset_p,
330 off_t* devPtr_offset_p,
331 ssize_t* bytes_read_p,
361 off_t file_offset = 0,
362 off_t devPtr_offset = 0,
363 CUstream stream =
nullptr);
402 off_t* file_offset_p,
403 off_t* devPtr_offset_p,
404 ssize_t* bytes_written_p,
434 off_t file_offset = 0,
435 off_t devPtr_offset = 0,
436 CUstream stream =
nullptr);
Class that provides RAII for the cuFile handle.
Store and manage the compatibility mode data associated with a FileHandle.
Handle of an open file registered with cufile.
void close() noexcept
Deregister the file and close the two files.
int fd(bool o_direct=false) const noexcept
Get one of the file descriptors.
std::future< std::size_t > pread(void *buf, std::size_t size, std::size_t file_offset=0, std::size_t task_size=defaults::task_size(), std::size_t gds_threshold=defaults::gds_threshold(), bool sync_default_stream=true)
Reads specified bytes from the file into the device or host memory in parallel.
void read_async(void *devPtr_base, std::size_t *size_p, off_t *file_offset_p, off_t *devPtr_offset_p, ssize_t *bytes_read_p, CUstream stream)
Reads specified bytes from the file into the device memory asynchronously.
int fd_open_flags(bool o_direct=false) const
Get the flags of one of the file descriptors (see open(2))
std::future< std::size_t > pwrite(void const *buf, std::size_t size, std::size_t file_offset=0, std::size_t task_size=defaults::task_size(), std::size_t gds_threshold=defaults::gds_threshold(), bool sync_default_stream=true)
Writes specified bytes from device or host memory into the file in parallel.
std::size_t write(void const *devPtr_base, std::size_t size, std::size_t file_offset, std::size_t devPtr_offset, bool sync_default_stream=true)
Writes specified bytes from the device memory into the file.
CUfileHandle_t handle()
Get the underlying cuFile file handle.
const CompatModeManager & get_compat_mode_manager() const noexcept
Get the associated compatibility mode manager, which can be used to query the original requested comp...
FileHandle(std::string const &file_path, std::string const &flags="r", mode_t mode=m644, CompatMode compat_mode=defaults::compat_mode())
Construct a file handle from a file path.
bool closed() const noexcept
Whether the file is closed according to its initialization status.
void write_async(void *devPtr_base, std::size_t *size_p, off_t *file_offset_p, off_t *devPtr_offset_p, ssize_t *bytes_written_p, CUstream stream)
Writes specified bytes from the device memory into the file asynchronously.
std::size_t nbytes() const
Get the file size.
std::size_t read(void *devPtr_base, std::size_t size, std::size_t file_offset, std::size_t devPtr_offset, bool sync_default_stream=true)
Reads specified bytes from the file into the device memory.
FileHandle(FileHandle const &)=delete
FileHandle support move semantic but isn't copyable.
Class that provides RAII for file handling.
Future of an asynchronous IO operation.
Singleton class of default values used throughout KvikIO.
static CompatMode compat_mode()
Return whether the KvikIO library is running in compatibility mode or not.
CompatMode
I/O compatibility mode.