KvikIO 命名空间。 更多...
类 | |
| struct | BatchOp |
| 提交批处理时使用的 IO 操作。 更多... | |
| class | BatchHandle |
| class | AllocRetain |
| 用于保留主机内存分配的单例类。 更多... | |
| class | CompatModeManager |
| 存储和管理与 FileHandle 关联的兼容模式数据。 更多... | |
| struct | DriverInitializer |
| struct | DriverProperties |
| class | defaults |
| KvikIO 中使用的默认值单例类。 更多... | |
| struct | CUfileException |
| class | GenericSystemError |
| class | FileHandle |
| 向 cuFile 注册的打开文件的句柄。 更多... | |
| class | FileWrapper |
| 为文件处理提供 RAII 的类。 更多... | |
| class | CUFileHandleWrapper |
| 为 cuFile 句柄提供 RAII 的类。 更多... | |
| class | NvtxManager |
| 用于 NVTX 注解的实用单例类。 更多... | |
| class | RemoteEndpoint |
| 远程端点的抽象基类。 更多... | |
| class | HttpEndpoint |
| 使用 http 的远程端点。 更多... | |
| class | S3Endpoint |
| 使用 AWS S3 协议的远程端点。 更多... | |
| class | RemoteHandle |
| 远程文件的句柄。 更多... | |
| class | cudaAPI |
| cuda C-API 的 Shim 层。 更多... | |
| class | cuFileAPI |
| cuFile C-API 的 Shim 层。 更多... | |
| class | LibCurl |
| 用于初始化和清理 libcurl 全局状态的单例类。 更多... | |
| class | CurlHandle |
| curl easy 句柄指针及其操作的表示。 更多... | |
| class | StreamFuture |
| 异步 IO 操作的 Future。 更多... | |
| class | thread_pool_wrapper |
| class | PushAndPopContext |
| 在创建时推入 CUDA 上下文并在销毁时弹出。 更多... | |
类型定义 | |
| using | nvtx_color_type = int |
| using | BS_thread_pool = thread_pool_wrapper< BS::thread_pool > |
枚举 | |
| enum class | CompatMode : uint8_t { OFF , ON , AUTO } |
| I/O 兼容模式。 更多... | |
函数 | |
| void | buffer_register (void const *devPtr_base, std::size_t size, int flags=0, std::vector< int > const &errors_to_ignore=std::vector< int >()) |
| 将现有的 cudaMalloced 内存注册到 cuFile 以固定用于 GPUDirect Storage 访问。 更多... | |
| void | buffer_deregister (void const *devPtr_base) |
| 从 cuFile 注销已注册的设备内存。 更多... | |
| void | memory_register (void const *devPtr, int flags=0, std::vector< int > const &errors_to_ignore={}) |
| 注册作为 devPtr 一部分的设备内存分配。与 FileHandle::pread() 和 FileHandle::pwrite() 一起使用。 更多... | |
| void | memory_deregister (void const *devPtr) |
| 从 cuFile 注销已注册的设备内存。 更多... | |
| KVIKIO_EXPORT std::string const & | config_path () |
获取 cuFile 配置文件 (cufile.json) 的文件路径或空字符串。 更多... | |
| template<typename T > | |
| T | getenv_or (std::string_view env_var_name, T default_val) |
| template<> | |
| bool | getenv_or (std::string_view env_var_name, bool default_val) |
| template<> | |
| CompatMode | getenv_or (std::string_view env_var_name, CompatMode default_val) |
| template<> | |
| std::vector< int > | getenv_or (std::string_view env_var_name, std::vector< int > default_val) |
| int | open_fd_parse_flags (std::string const &flags, bool o_direct) |
| 解析以字符串形式给定的打开文件标志并返回 oflags。 更多... | |
| int | open_fd (std::string const &file_path, std::string const &flags, bool o_direct, mode_t mode) |
使用 open(2) 打开文件。 更多... | |
| int | open_flags (int fd) |
获取文件描述符的标志 (参阅 open(2))。 更多... | |
| std::size_t | get_file_size (int file_descriptor) |
从文件描述符获取文件大小 fstat(3)。 更多... | |
| template<typename F , typename T > | |
| std::future< std::size_t > | parallel_io (F op, T buf, std::size_t size, std::size_t file_offset, std::size_t task_size, std::size_t devPtr_offset, std::uint64_t call_idx=0, nvtx_color_type nvtx_color=NvtxManager::default_color()) |
| 并行应用读或写操作。 更多... | |
| constexpr bool | is_cuda_available () |
| 检查 CUDA 库是否可用。 更多... | |
| constexpr bool | is_cufile_library_available () noexcept |
| 检查 cuFile 库是否可用。 更多... | |
| bool | is_cufile_available () noexcept |
| 检查 cuFile 是否可用且预期工作正常。 更多... | |
| constexpr int | cufile_version () noexcept |
| 获取 cuFile 版本 (如果早于 v1.8 则为零)。 更多... | |
| bool | is_batch_api_available () noexcept |
| 检查 cuFile 的批处理 API 是否可用。 更多... | |
| bool | is_stream_api_available () noexcept |
| 检查 cuFile 的流式 (异步) API 是否可用。 更多... | |
| void * | load_library (std::string const &name, int mode=RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE) |
| 加载共享库。 更多... | |
| void * | load_library (std::vector< std::string > const &names, int mode=RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE) |
| 加载共享库。 更多... | |
| template<typename T > | |
| void | get_symbol (T &handle, void *lib, std::string const &name) |
使用 dlsym 获取符号。 更多... | |
| bool | is_running_in_wsl () noexcept |
| 尝试检测是否在适用于 Linux 的 Windows 子系统 (WSL) 中运行。 更多... | |
| bool | run_udev_readable () noexcept |
检查 /run/udev 是否可读。 更多... | |
| off_t | convert_size2off (std::size_t x) |
| ssize_t | convert_size2ssize (std::size_t x) |
| CUdeviceptr | convert_void2deviceptr (void const *devPtr) |
| template<typename T , std::enable_if_t< std::is_integral_v< T >> * = nullptr> | |
| std::int64_t | convert_to_64bit (T value) |
| 辅助函数,将值转换为 64 位有符号整数。 | |
| std::uint64_t | convert_to_64bit (std::uint64_t value) |
| 辅助函数,允许 std::uint64_t 类型的 NVTX payload 直接通过,不进行任何操作。 | |
| template<typename T , std::enable_if_t< std::is_floating_point_v< T >> * = nullptr> | |
| double | convert_to_64bit (T value) |
| 辅助函数,将值转换为 64 位浮点数。 | |
| constexpr bool | is_host_memory (void const *ptr) |
检查 ptr 是否指向主机内存 (而不是设备内存)。 更多... | |
| int | get_device_ordinal_from_pointer (CUdeviceptr dev_ptr) |
| 返回拥有该指针的设备。 更多... | |
| KVIKIO_EXPORT CUcontext | get_primary_cuda_context (int ordinal) |
| 给定设备序号,返回该设备的主上下文。 更多... | |
| std::optional< CUcontext > | get_context_associated_pointer (CUdeviceptr dev_ptr) |
| 返回与给定设备指针关联的 CUDA 上下文 (如果有)。 更多... | |
| bool | current_context_can_access_pointer (CUdeviceptr dev_ptr) |
| 检查当前 CUDA 上下文是否可以访问给定的设备指针。 更多... | |
| CUcontext | get_context_from_pointer (void const *devPtr) |
| 返回可与给定设备指针一起使用的 CUDA 上下文。 更多... | |
| std::tuple< void *, std::size_t, std::size_t > | get_alloc_info (void const *devPtr, CUcontext *ctx=nullptr) |
| template<typename T > | |
| std::future< std::decay_t< T > > | make_ready_future (T &&t) |
| 在 future 对象中创建一个立即就绪的共享状态。 更多... | |
| template<typename T > | |
| bool | is_future_done (T const &future) |
| 检查 future 对象的状态。True 表示结果在 future 的共享状态中可用。False 表示否则。 更多... | |
变量 | |
| constexpr std::size_t | page_size = 4096 |
KvikIO 命名空间。
|
strong |
I/O 兼容模式。
| 枚举成员 | |
|---|---|
| OFF | 强制使用 cuFile I/O。如果系统满足 cuFile 要求并且 cuFile 已正确配置,将激活 GDS。但是,如果系统不适合 cuFile,OFF 选项下的 I/O 操作可能会出错。 |
| ON | 强制使用 POSIX I/O。 |
| AUTO | 首先尝试 cuFile I/O,如果系统不满足 cuFile 要求,则回退到 POSIX I/O。 |
定义于文件 compat_mode.hpp 的 28 行。
| void kvikio::buffer_deregister | ( | void const * | devPtr_base | ) |
从 cuFile 注销已注册的设备内存
| devPtr_base | 要注销的设备指针 |
| void kvikio::buffer_register | ( | void const * | devPtr_base, |
| std::size_t | size, | ||
| int | flags = 0, |
||
| std::vector< int > const & | errors_to_ignore = std::vector< int >() |
||
| ) |
将现有的 cudaMalloced 内存注册到 cuFile 以固定用于 GPUDirect Storage 访问。
| devPtr_base | 要分配的设备指针 |
| 长度 | 上述指定 devPtr 的内存区域大小 |
| flags | 应为零或 CU_FILE_RDMA_REGISTER (实验性) |
| errors_to_ignore | 要忽略的 CuFile 错误,例如 CU_FILE_MEMORY_ALREADY_REGISTERED 或 CU_FILE_INVALID_MAPPING_SIZE |
| KVIKIO_EXPORT std::string const& kvikio::config_path | ( | ) |
获取 cuFile 配置文件 (cufile.json) 的文件路径或空字符串。
此查找已缓存。
|
constexprnoexcept |
获取 cuFile 版本 (如果早于 v1.8 则为零)。
版本以 (1000*major + 10*minor) 返回。例如,cuFile v1.8.0 将表示为 1080。
注意,这不是 CUDA 工具包的版本。cuFile 是工具包的一部分,但遵循自己的版本方案。
定义于文件 cufile.hpp 的 134 行。
| bool kvikio::current_context_can_access_pointer | ( | CUdeviceptr | dev_ptr | ) |
检查当前 CUDA 上下文是否可以访问给定的设备指针。
| dev_ptr | 要查询的设备指针 |
| std::optional<CUcontext> kvikio::get_context_associated_pointer | ( | CUdeviceptr | dev_ptr | ) |
返回与给定设备指针关联的 CUDA 上下文 (如果有)。
| dev_ptr | 要查询的设备指针 |
| CUcontext kvikio::get_context_from_pointer | ( | void const * | devPtr | ) |
返回可与给定设备指针一起使用的 CUDA 上下文。
为了鲁棒性,我们按以下顺序查找可用的上下文:1) 如果 devPtr 已关联上下文,则返回该上下文。2) 如果当前上下文存在并且可以访问 devPtr,则返回该上下文。3) 返回拥有 devPtr 的设备的主上下文。我们假定主上下文可以访问 devPtr,但这在 CUDA 文档[1]中提到的特殊不连续寻址情况下可能不成立。在这些情况下,用户必须在使用 KvikIO 进行读/写之前设置一个可用的当前上下文。
[1] https://docs.nvda.net.cn/cuda/cuda-driver-api/group__CUDA__UNIFIED.html
| devPtr | 要查询的设备指针 |
| int kvikio::get_device_ordinal_from_pointer | ( | CUdeviceptr | dev_ptr | ) |
返回拥有该指针的设备。
| ptr | 要查询的设备指针 |
| std::size_t kvikio::get_file_size | ( | int | file_descriptor | ) |
从文件描述符获取文件大小 fstat(3)
| file_descriptor | 打开的文件描述符 |
| KVIKIO_EXPORT CUcontext kvikio::get_primary_cuda_context | ( | int | ordinal | ) |
给定设备序号,返回该设备的主上下文。
此函数缓存检索到的主上下文,直到程序退出。
| ordinal | 设备序号 - 一个介于 0 和 CUDA 设备数量之间的整数 |
| void kvikio::get_symbol | ( | T & | handle, |
| void * | lib, | ||
| std::string const & | name | ||
| ) |
使用 dlsym 获取符号
| T | 函数指针的类型。 |
| handle | 函数指针 (输出)。 |
| lib | dlopen 返回的库句柄。 |
| name | 要加载的符号/函数的名称。 |
定义于文件 shim/utils.hpp 的 69 行。
|
noexcept |
检查 cuFile 的批处理 API 是否可用。
由于 cuFileGetVersion() 在 cuFile v1.8 (CTK v12.3) 中首次可用,对于早于 v1.8 的版本,此函数返回 false,尽管批处理 API 在 v1.6 中已可用。
|
constexpr |
|
noexcept |
检查 cuFile 是否可用且预期工作正常。
除了检查 cuFile 库是否可用外,此函数还检查运行时环境。
|
constexprnoexcept |
| bool kvikio::is_future_done | ( | T const & | future | ) |
|
constexpr |
|
noexcept |
尝试检测是否在适用于 Linux 的 Windows 子系统 (WSL) 中运行。
当无法确定环境时,false 返回。
|
noexcept |
检查 cuFile 的流式 (异步) API 是否可用。
由于 cuFileGetVersion() 在 cuFile v1.8 (CTK v12.3) 中首次可用,对于早于 v1.8 的版本,此函数返回 false,尽管流式 API 在 v1.7 中已可用。
| void* kvikio::load_library | ( | std::string const & | name, |
| int | mode = RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE |
||
| ) |
加载共享库。
| name | 要加载的库的名称。 |
| void* kvikio::load_library | ( | std::vector< std::string > const & | names, |
| int | mode = RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE |
||
| ) |
加载共享库。
| names | 加载共享库时要尝试的名称向量。 |
| std::future<std::decay_t<T> > kvikio::make_ready_future | ( | T && | t | ) |
| void kvikio::memory_deregister | ( | void const * | devPtr | ) |
从 cuFile 注销已注册的设备内存。
| devPtr | 要注销的设备指针 |
| void kvikio::memory_register | ( | void const * | devPtr, |
| int | flags = 0, |
||
| std::vector< int > const & | errors_to_ignore = {} |
||
| ) |
注册作为 devPtr 一部分的设备内存分配。与 FileHandle::pread() 和 FileHandle::pwrite() 一起使用。
| devPtr | 设备指针 |
| flags | 应为零或 CU_FILE_RDMA_REGISTER (实验性) |
| errors_to_ignore | 要忽略的 CuFile 错误,例如 CU_FILE_MEMORY_ALREADY_REGISTERED 或 CU_FILE_INVALID_MAPPING_SIZE |
| int kvikio::open_fd | ( | std::string const & | file_path, |
| std::string const & | flags, | ||
| bool | o_direct, | ||
| mode_t | mode | ||
| ) |
使用 open(2) 打开文件
| flags | 以字符串形式给出的打开标志 |
| o_direct | 将 O_DIRECT 追加到 flags |
| mode | 访问模式 |
| int kvikio::open_fd_parse_flags | ( | std::string const & | flags, |
| bool | o_direct | ||
| ) |
解析以字符串形式给定的打开文件标志并返回 oflags。
| flags | 标志 |
| o_direct | 将 O_DIRECT 追加到打开标志 |
| std::invalid_argument | 如果指定的标志不受支持。 |
| std::invalid_argument | 如果 o_direct 为 true,但 O_DIRECT 不受支持。 |
| int kvikio::open_flags | ( | int | fd | ) |
获取文件描述符的标志 (参阅 open(2))
| std::future<std::size_t> kvikio::parallel_io | ( | F | op, |
| T | buf, | ||
| std::size_t | size, | ||
| std::size_t | file_offset, | ||
| std::size_t | task_size, | ||
| std::size_t | devPtr_offset, | ||
| std::uint64_t | call_idx = 0, |
||
| nvtx_color_type | nvtx_color = NvtxManager::default_color() |
||
| ) |
并行应用读或写操作。
| F | 应用读或写操作的函数的类型。 |
| T | 内存指针的类型。 |
| op | 应用读或写操作的函数。 |
| buf | 要读或写的缓冲区指针。 |
| size | 要读或写的字节数。 |
| file_offset | 文件起始处的字节偏移量。 |
| task_size | 每个任务的字节大小。 |
定义于文件 parallel_operation.hpp 的 141 行。
|
noexcept |
检查 /run/udev 是否可读。
当 /run/udev 不可读时,cuFile 会出现 internal error。这通常发生在未通过 --volume /run/udev:/run/udev:ro 启动的 docker 镜像中运行的情况下。