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 镜像中运行的情况下。