I/O 数据汇#
- group 数据汇
-
class data_sink#
- #include <data_sink.hpp>
用于存储写入器输出数据的接口类。
公有函数
-
inline virtual ~data_sink()#
基类析构函数。
-
virtual void host_write(void const *data, size_t size) = 0#
将缓冲区内容追加到数据汇。
- 参数:
data – [in] 指向要写入数据汇对象的缓冲区的指针
size – [in] 要写入的字节数
-
inline virtual bool supports_device_write() const#
此数据汇是否支持从 GPU 内存地址写入。
在某些文件格式写入器内部,我们有执行以下操作的代码,例如
tmp_buffer = alloc_temp_buffer(); cudaMemcpy(tmp_buffer, device_buffer, size); sink->write(tmp_buffer, size);
如果数据汇类型本身是内存缓冲写入,这实际上相当于第二次 memcpy。因此,对于一个“智能”的自定义 data_sink 来说,一个有用的优化是自行在 CPU 和 GPU 之间管理数据移动;将写入器内部逻辑简化为只调用
sink->device_write(device_buffer, size)
如果此函数返回 true,则 data_sink 将在可能的情况下接收 device_write() 调用而不是 write() 调用。但是,仍然可能接收 write() 调用。
- 返回:
此写入器是否支持 device_write() 调用
-
inline virtual bool is_device_write_preferred(size_t size) const#
估计对于给定大小,直接设备写入是否更优。
- 参数:
size – 要写入的字节数
- 返回:
对于给定大小,设备写入是否预期性能更优
-
inline virtual void device_write(void const *gpu_data, size_t size, rmm::cuda_stream_view stream)#
将缓冲区内容从 GPU 地址追加到数据汇。
为了获得最佳性能,仅当
is_device_write_preferred
返回true
时才应该调用此函数。不支持直接设备写入的数据汇实现无需重写此函数。- 抛出:
cudf::logic_error – 对象不支持直接设备写入,即
supports_device_write
返回false
。- 参数:
gpu_data – 指向要写入数据汇对象的缓冲区的指针
size – 要写入的字节数
stream – 要使用的 CUDA 流
-
inline virtual std::future<void> device_write_async(void const *gpu_data, size_t size, rmm::cuda_stream_view stream)#
将缓冲区内容从 GPU 地址异步追加到数据汇。
为了获得最佳性能,仅当
is_device_write_preferred
返回true
时才应该调用此函数。不支持直接设备写入的数据汇实现无需重写此函数。在同步此调用之前,不得释放
gpu_data
。auto result = device_write_async(gpu_data, size, stream); result.wait(); // OR result.get()
- 抛出:
cudf::logic_error – 对象不支持直接设备写入,即
supports_device_write
返回false
。cudf::logic_error –
- 参数:
gpu_data – 指向要写入数据汇对象的缓冲区的指针
size – 要写入的字节数
stream – 要使用的 CUDA 流
- 返回:
可用于同步此调用的 future 对象
-
virtual void flush() = 0#
刷新写入数据汇的数据。
-
virtual size_t bytes_written() = 0#
返回写入此数据汇的总字节数。
- 返回:
写入此数据汇的总字节数
公有静态函数
-
static std::unique_ptr<data_sink> create(std::string const &filepath)#
从文件路径创建数据汇。
- 参数:
filepath – [in] 要使用的文件路径
- 返回:
构造的 data_sink 对象
-
static std::unique_ptr<data_sink> create(std::vector<char> *buffer)#
从 std::vector 创建数据汇。
- 参数:
buffer – [inout] 指向输出 vector 的指针
- 返回:
构造的 data_sink 对象
-
static std::unique_ptr<data_sink> create()#
创建一个 void 数据汇(一个不执行实际 I/O 的数据汇)
这是基准测试的有用代码路径,用于消除性能分析中的物理硬件随机性。
- 返回:
构造的 data_sink 对象
-
inline virtual ~data_sink()#
-
class data_sink#