19 #include <sys/types.h>
24 #include <system_error>
27 #include <kvikio/buffer.hpp>
28 #include <kvikio/compat_mode.hpp>
29 #include <kvikio/cufile/config.hpp>
30 #include <kvikio/defaults.hpp>
31 #include <kvikio/error.hpp>
32 #include <kvikio/file_utils.hpp>
33 #include <kvikio/parallel_operation.hpp>
34 #include <kvikio/posix_io.hpp>
35 #include <kvikio/shim/cufile.hpp>
36 #include <kvikio/shim/cufile_h_wrapper.hpp>
37 #include <kvikio/stream.hpp>
38 #include <kvikio/utils.hpp>
52 bool _initialized{
false};
53 mutable std::size_t _nbytes{0};
61 static constexpr mode_t m644 = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
81 std::string
const& flags =
"r",
99 [[nodiscard]]
bool closed() const noexcept;
125 [[nodiscard]]
int fd(
bool o_direct = false) const noexcept;
146 [[nodiscard]] std::
size_t nbytes() const;
178 std::
size_t read(
void* devPtr_base,
180 std::
size_t file_offset,
181 std::
size_t devPtr_offset,
182 bool sync_default_stream = true);
215 std::
size_t write(
void const* devPtr_base,
217 std::
size_t file_offset,
218 std::
size_t devPtr_offset,
219 bool sync_default_stream = true);
251 std::future<std::
size_t>
pread(
void* buf,
253 std::
size_t file_offset = 0,
254 std::
size_t task_size =
defaults::task_size(),
255 std::
size_t gds_threshold =
defaults::gds_threshold(),
256 bool sync_default_stream = true);
288 std::future<std::
size_t>
pwrite(
void const* buf,
290 std::
size_t file_offset = 0,
291 std::
size_t task_size =
defaults::task_size(),
292 std::
size_t gds_threshold =
defaults::gds_threshold(),
293 bool sync_default_stream = true);
331 off_t* file_offset_p,
332 off_t* devPtr_offset_p,
333 ssize_t* bytes_read_p,
363 off_t file_offset = 0,
364 off_t devPtr_offset = 0,
365 CUstream stream =
nullptr);
404 off_t* file_offset_p,
405 off_t* devPtr_offset_p,
406 ssize_t* bytes_written_p,
436 off_t file_offset = 0,
437 off_t devPtr_offset = 0,
438 CUstream stream =
nullptr);
存储和管理与 FileHandle 关联的兼容模式数据。
void close() noexcept
注销文件并关闭两个文件。
int fd(bool o_direct=false) const noexcept
获取其中一个文件描述符。
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)
从文件并行读取指定字节到设备或主机内存中。
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)
从文件异步读取指定字节到设备内存中。
int fd_open_flags(bool o_direct=false) const
获取其中一个文件描述符的标志 (参见 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)
从设备或主机内存并行写入指定字节到文件中。
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)
将指定字节从设备内存写入到文件中。
CUfileHandle_t handle()
获取底层的 cuFile 文件句柄。
const CompatModeManager & get_compat_mode_manager() const noexcept
获取关联的兼容模式管理器,可用于查询最初请求的兼容模式...
FileHandle(std::string const &file_path, std::string const &flags="r", mode_t mode=m644, CompatMode compat_mode=defaults::compat_mode())
从文件路径构造文件句柄。
bool closed() const noexcept
根据其初始化状态判断文件是否已关闭。
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)
从设备内存异步写入指定字节到文件中。
std::size_t nbytes() const
获取文件大小。
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)
从文件读取指定字节到设备内存中。
FileHandle(FileHandle const &)=delete
FileHandle 支持移动语义但不可复制。
static CompatMode compat_mode()
返回 KvikIO 库是否正在兼容模式下运行。