| 类型定义 | 枚举 | 函数 | 变量
kvikio 命名空间参考

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 >
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 命名空间。

枚举类型文档

◆ CompatMode

enum kvikio::CompatMode : uint8_t
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.hpp28 行。

函数文档

◆ buffer_deregister()

void kvikio::buffer_deregister ( void const *  devPtr_base)

从 cuFile 注销已注册的设备内存

参数
devPtr_base要注销的设备指针

◆ buffer_register()

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_REGISTEREDCU_FILE_INVALID_MAPPING_SIZE
注意
该内存将用于从支持的存储执行 GPU Direct DMA。
警告
此 API 旨在用于将内存用作流式缓冲区并在多个 cuFile IO 操作中重用的用例。

◆ config_path()

KVIKIO_EXPORT std::string const& kvikio::config_path ( )

获取 cuFile 配置文件 (cufile.json) 的文件路径或空字符串。

此查找已缓存。

返回
cufile.json 文件的文件路径,如果未找到则为空字符串。

◆ cufile_version()

constexpr int kvikio::cufile_version ( )
constexprnoexcept

获取 cuFile 版本 (如果早于 v1.8 则为零)。

版本以 (1000*major + 10*minor) 返回。例如,cuFile v1.8.0 将表示为 1080。

注意,这不是 CUDA 工具包的版本。cuFile 是工具包的一部分,但遵循自己的版本方案。

返回
版本 (1000*major + 10*minor),如果早于 1080 则为零。

定义于文件 cufile.hpp134 行。

◆ current_context_can_access_pointer()

bool kvikio::current_context_can_access_pointer ( CUdeviceptr  dev_ptr)

检查当前 CUDA 上下文是否可以访问给定的设备指针。

参数
dev_ptr要查询的设备指针
返回
布尔值结果

◆ get_context_associated_pointer()

std::optional<CUcontext> kvikio::get_context_associated_pointer ( CUdeviceptr  dev_ptr)

返回与给定设备指针关联的 CUDA 上下文 (如果有)。

参数
dev_ptr要查询的设备指针
返回
可用的 CUDA 上下文,如果找到的话。

◆ get_context_from_pointer()

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要查询的设备指针
返回
可用的 CUDA 上下文

◆ get_device_ordinal_from_pointer()

int kvikio::get_device_ordinal_from_pointer ( CUdeviceptr  dev_ptr)

返回拥有该指针的设备。

参数
ptr要查询的设备指针
返回
设备序号

◆ get_file_size()

std::size_t kvikio::get_file_size ( int  file_descriptor)

从文件描述符获取文件大小 fstat(3)

参数
file_descriptor打开的文件描述符
返回
字节数

◆ get_primary_cuda_context()

KVIKIO_EXPORT CUcontext kvikio::get_primary_cuda_context ( int  ordinal)

给定设备序号,返回该设备的主上下文。

此函数缓存检索到的主上下文,直到程序退出。

参数
ordinal设备序号 - 一个介于 0 和 CUDA 设备数量之间的整数
返回
主 CUDA 上下文

◆ get_symbol()

template<typename T >
void kvikio::get_symbol ( T &  handle,
void *  lib,
std::string const &  name 
)

使用 dlsym 获取符号

模板参数
T函数指针的类型。
参数
handle函数指针 (输出)。
libdlopen 返回的库句柄。
name要加载的符号/函数的名称。

定义于文件 shim/utils.hpp69 行。

◆ is_batch_api_available()

bool kvikio::is_batch_api_available ( )
noexcept

检查 cuFile 的批处理 API 是否可用。

由于 cuFileGetVersion() 在 cuFile v1.8 (CTK v12.3) 中首次可用,对于早于 v1.8 的版本,此函数返回 false,尽管批处理 API 在 v1.6 中已可用。

返回
布尔值结果

◆ is_cuda_available()

constexpr bool kvikio::is_cuda_available ( )
constexpr

检查 CUDA 库是否可用。

注意,这不检查运行时环境是否支持 CUDA。

返回
布尔值结果

定义于文件 cuda.hpp72 行。

◆ is_cufile_available()

bool kvikio::is_cufile_available ( )
noexcept

检查 cuFile 是否可用且预期工作正常。

除了检查 cuFile 库是否可用外,此函数还检查运行时环境。

返回
布尔值结果

◆ is_cufile_library_available()

constexpr bool kvikio::is_cufile_library_available ( )
constexprnoexcept

检查 cuFile 库是否可用。

注意,这不检查运行时环境是否支持 cuFile。

返回
布尔值结果

定义于文件 cufile.hpp107 行。

◆ is_future_done()

template<typename T >
bool kvikio::is_future_done ( T const &  future)

检查 future 对象的状态。True 表示结果在 future 的共享状态中可用。False 表示否则。

future 不应使用 std::async(std::launch::deferred) 创建。否则,此函数总是返回 true。

模板参数
Tfuture 的类型。
参数
futurefuture 的实例。
返回
表示 future 是否就绪的布尔值结果。

定义于文件 utils.hpp187 行。

◆ is_host_memory()

constexpr bool kvikio::is_host_memory ( void const *  ptr)
constexpr

检查 ptr 是否指向主机内存 (而不是设备内存)

在此上下文中,托管内存算作设备内存。

参数
ptr要查询的内存指针
返回
布尔值结果

定义于文件 utils.hpp80 行。

◆ is_running_in_wsl()

bool kvikio::is_running_in_wsl ( )
noexcept

尝试检测是否在适用于 Linux 的 Windows 子系统 (WSL) 中运行。

当无法确定环境时,false 返回。

返回
布尔值结果

◆ is_stream_api_available()

bool kvikio::is_stream_api_available ( )
noexcept

检查 cuFile 的流式 (异步) API 是否可用。

由于 cuFileGetVersion() 在 cuFile v1.8 (CTK v12.3) 中首次可用,对于早于 v1.8 的版本,此函数返回 false,尽管流式 API 在 v1.7 中已可用。

返回
布尔值结果

◆ load_library() [1/2]

void* kvikio::load_library ( std::string const &  name,
int  mode = RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE 
)

加载共享库。

参数
name要加载的库的名称。
返回
库句柄。

◆ load_library() [2/2]

void* kvikio::load_library ( std::vector< std::string > const &  names,
int  mode = RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE 
)

加载共享库。

参数
names加载共享库时要尝试的名称向量。
返回
库句柄。

◆ make_ready_future()

template<typename T >
std::future<std::decay_t<T> > kvikio::make_ready_future ( T &&  t)

在 future 对象中创建一个立即就绪的共享状态。

并发 TS (https://cppreference.cn/w/cpp/experimental/make_ready_future) 中同名函数的偏向实现。未实现 std::reference_wrappervoid 的情况。

模板参数
T提供的值的类型。
参数
t提供的对象。
返回
持有提供对象衰减副本的 future。

定义于文件 utils.hpp167 行。

◆ memory_deregister()

void kvikio::memory_deregister ( void const *  devPtr)

从 cuFile 注销已注册的设备内存。

参数
devPtr要注销的设备指针

◆ memory_register()

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_REGISTEREDCU_FILE_INVALID_MAPPING_SIZE
注意
该内存将用于从支持的存储执行 GPU Direct DMA。
警告
此 API 旨在用于将内存用作流式缓冲区并在多个 cuFile IO 操作中重用的用例。

◆ open_fd()

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访问模式
返回
文件描述符

◆ open_fd_parse_flags()

int kvikio::open_fd_parse_flags ( std::string const &  flags,
bool  o_direct 
)

解析以字符串形式给定的打开文件标志并返回 oflags。

参数
flags标志
o_direct将 O_DIRECT 追加到打开标志
返回
oflags
异常
std::invalid_argument如果指定的标志不受支持。
std::invalid_argument如果 o_direct 为 true,但 O_DIRECT 不受支持。

◆ open_flags()

int kvikio::open_flags ( int  fd)

获取文件描述符的标志 (参阅 open(2))

返回
打开标志

◆ parallel_io()

template<typename F , typename T >
std::future<std::size_t> kvikio::parallel_io ( op,
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每个任务的字节大小。
返回
一个 future,稍后用于检查操作是否已完成执行。

定义于文件 parallel_operation.hpp141 行。

◆ run_udev_readable()

bool kvikio::run_udev_readable ( )
noexcept

检查 /run/udev 是否可读。

/run/udev 不可读时,cuFile 会出现 internal error。这通常发生在未通过 --volume /run/udev:/run/udev:ro 启动的 docker 镜像中运行的情况下。

返回
布尔值结果