使用用户提供的、大小为 user_buffer_size
的缓冲区,对输入的 table_view
执行分块的“打包”操作。 更多...
#include <contiguous_split.hpp>
公共成员函数 | |
chunked_pack (cudf::table_view const &input, std::size_t user_buffer_size, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref temp_mr=cudf::get_current_device_resource_ref()) | |
构造一个 chunked_pack 类。 更多... | |
~chunked_pack () | |
析构函数,将作为默认实现。在此处声明并定义,因为 contiguous_split_state 在此阶段不完整。 | |
std::size_t | get_total_contiguous_size () const |
获取连续打包的 table_view 的总大小。 更多... | |
bool | has_next () const |
检查是否还有剩余分块需要复制的函数。 更多... | |
std::size_t | next (cudf::device_span< uint8_t > const &user_buffer) |
将下一个分块打包到 user_buffer 中。只要 has_next 返回 true,就应该调用此函数。如果在 has_next 返回 false 时调用 next ,则会抛出异常。 更多... | |
std::unique_ptr< std::vector< uint8_t > > | build_metadata () const |
构建所有已添加列的不透明元数据。 更多... | |
静态公共成员函数 | |
static std::unique_ptr< chunked_pack > | create (cudf::table_view const &input, std::size_t user_buffer_size, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref temp_mr=cudf::get_current_device_resource_ref()) |
创建一个 chunked_pack 实例,用于对 table_view "input" 执行“打包”操作,其中大小为 user_buffer_size 的缓冲区会填充整体操作的各个分块。此操作可在 GPU 内存受限的情况下使用。 更多... | |
使用用户提供的、大小为 user_buffer_size
的缓冲区,对输入的 table_view
执行分块的“打包”操作。
此操作旨在在 GPU 内存不足时以流式方式使用,在此情况下,我们希望最大程度地减少小的 cudaMemcpy 调用次数以及与 cudf 表相关联的所有元数据的跟踪。由于内存限制,所有 thrust 和 scratch 内存分配都仅使用传入的内存资源,而不使用每设备内存资源。
此类定义了两个必须协同使用的函数来执行 chunked_pack
:has_next 和 next。示例如下:
chunked_pack
预留 scratch 内存。cudf::chunked_pack
时,user_buffer_size
缓冲区计算遍历所有这些批次(分块)所需的迭代次数。user_buffer_size
的用户缓冲区user_buffer_size
字节的连续打包输入 table_view
的内容。此类的文档生成自以下文件:
|
explicit |
构造一个 chunked_pack
类。
input | 要打包的源 table_view |
user_buffer_size | 缓冲区大小(以字节为单位),将在 next 时传递。必须至少为 1MB |
stream | 用于设备内存操作和内核启动的 CUDA stream |
temp_mr | 一个可选的内存资源,仅用于临时和 scratch 分配 |
std::unique_ptr<std::vector<uint8_t> > cudf::chunked_pack::build_metadata | ( | ) | const |
为所有添加的列构建不透明元数据。
|
static |
创建一个 chunked_pack
实例,用于对 table_view
"input" 执行“打包”操作,其中大小为 user_buffer_size
的缓冲区会填充整体操作的各个 chunk。此操作可在 GPU 内存受限的情况下使用。
内存资源 (temp_mr
) 可以是用于在 GPU 内存不足时,希望从一小块保留内存池中进行 scratch 和临时分配的特殊内存资源。注意,它默认为常规的 cuDF 每设备资源。
cudf::logic_error | 当 user_buffer_size 小于 1MB 时 |
input | 要打包的源 table_view |
user_buffer_size | 缓冲区大小(以字节为单位),将在 next 时传递。必须至少为 1MB |
stream | 用于设备内存操作和内核启动的 CUDA stream |
temp_mr | 仅用于临时和 scratch 分配的 RMM 内存资源 |
chunked_pack
的 unique_ptrstd::size_t cudf::chunked_pack::get_total_contiguous_size | ( | ) | const |
获取连续打包的 table_view
的总大小。
bool cudf::chunked_pack::has_next | ( | ) | const |
检查是否还有 chunk 剩余可供复制的函数。
std::size_t cudf::chunked_pack::next | ( | cudf::device_span< uint8_t > const & | user_buffer | ) |
将下一个 chunk 打包到 user_buffer
中。只要 has_next
返回 true,就应调用此函数。如果在 has_next
返回 false 时调用 next
,则会抛出异常。
cudf::logic_error | 如果 user_buffer 的大小与 user_buffer_size 不同 |
cudf::logic_error | 如果在所有 chunk 都已复制后调用 |
user_buffer | chunk 的 device span 目标。此 span 的大小必须等于构造时传递的 user_buffer_size 参数。 |
user_buffer
的字节数(最多为 user_buffer_size
)