14 #include <kvikio/buffer.hpp>
15 #include <kvikio/compat_mode.hpp>
16 #include <kvikio/compat_mode_manager.hpp>
17 #include <kvikio/cufile/config.hpp>
18 #include <kvikio/defaults.hpp>
19 #include <kvikio/error.hpp>
20 #include <kvikio/file_utils.hpp>
21 #include <kvikio/shim/cufile.hpp>
22 #include <kvikio/shim/cufile_h_wrapper.hpp>
23 #include <kvikio/stream.hpp>
24 #include <kvikio/threadpool_wrapper.hpp>
25 #include <kvikio/utils.hpp>
39 bool _initialized{
false};
41 mutable std::atomic<std::size_t> _nbytes{0};
44 std::string _file_path;
48 std::size_t read_impl(
void* devPtr_base,
50 std::size_t file_offset,
51 std::size_t devPtr_offset,
52 bool sync_default_stream);
55 std::size_t write_impl(
void const* devPtr_base,
57 std::size_t file_offset,
58 std::size_t devPtr_offset,
59 bool sync_default_stream);
65 static constexpr mode_t m644 = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
85 std::string
const& flags =
"r",
103 [[nodiscard]]
bool closed() const noexcept;
129 [[nodiscard]]
int fd(
bool o_direct = false) const noexcept;
150 [[nodiscard]] std::
size_t nbytes() const;
182 std::
size_t read(
void* devPtr_base,
184 std::
size_t file_offset,
185 std::
size_t devPtr_offset,
186 bool sync_default_stream = true);
219 std::
size_t write(
void const* devPtr_base,
221 std::
size_t file_offset,
222 std::
size_t devPtr_offset,
223 bool sync_default_stream = true);
259 std::future<std::
size_t>
pread(
void* buf,
261 std::
size_t file_offset = 0,
262 std::
size_t task_size =
defaults::task_size(),
263 std::
size_t gds_threshold =
defaults::gds_threshold(),
264 bool sync_default_stream = true,
301 std::future<std::
size_t>
pwrite(
void const* buf,
303 std::
size_t file_offset = 0,
304 std::
size_t task_size =
defaults::task_size(),
305 std::
size_t gds_threshold =
defaults::gds_threshold(),
306 bool sync_default_stream = true,
342 off_t* file_offset_p,
343 off_t* devPtr_offset_p,
344 ssize_t* bytes_read_p,
371 off_t file_offset = 0,
372 off_t devPtr_offset = 0,
373 CUstream stream =
nullptr);
409 off_t* file_offset_p,
410 off_t* devPtr_offset_p,
411 ssize_t* bytes_written_p,
438 off_t file_offset = 0,
439 off_t devPtr_offset = 0,
440 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.
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::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.
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, ThreadPool *thread_pool=&defaults::thread_pool())
Reads specified bytes from the file into the device or host memory in parallel.
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, ThreadPool *thread_pool=&defaults::thread_pool())
Writes specified bytes from device or host memory into the file in parallel.
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.
bool is_direct_io_supported() const noexcept
Whether Direct I/O is supported on this file handle. This is determined by two factors:
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.
BS::thread_pool ThreadPool
Thread pool type used for parallel I/O operations.
CompatMode
I/O compatibility mode.