公共成员函数 | 静态公共成员函数 | 所有成员列表
cudf::io::data_sink 类参考abstract (抽象类)

用于存储写入器输出数据的接口类。更多...

#include <data_sink.hpp>

公共成员函数

virtual ~data_sink ()
 基类析构函数。
 
virtual void host_write (void const *data, size_t size)=0
 将缓冲区内容追加到接收器。更多...
 
virtual bool supports_device_write () const
 此接收器是否支持从 GPU 内存地址写入。更多...
 
virtual bool is_device_write_preferred (size_t size) const
 估计直接设备写入对于给定大小是否更优。更多...
 
virtual void device_write (void const *gpu_data, size_t size, rmm::cuda_stream_view stream)
 将缓冲区内容从 GPU 地址追加到接收器。更多...
 
virtual std::future< void > device_write_async (void const *gpu_data, size_t size, rmm::cuda_stream_view stream)
 从 GPU 地址异步地将缓冲区内容追加到接收器。更多...
 
virtual void flush ()=0
 将写入接收器的数据刷新。
 
virtual size_t bytes_written ()=0
 返回写入此接收器的总字节数。更多...
 

静态公共成员函数

static std::unique_ptr< data_sinkcreate (std::string const &filepath)
 从文件路径创建接收器。更多...
 
static std::unique_ptr< data_sinkcreate (std::vector< char > *buffer)
 从 std::vector 创建接收器。更多...
 
static std::unique_ptr< data_sinkcreate ()
 创建一个空接收器(不执行实际 IO 的接收器)。更多...
 
static std::unique_ptr< data_sinkcreate (cudf::io::data_sink *const user_sink)
 创建一个包装过的自定义用户数据接收器。更多...
 
template<typename T >
static std::vector< std::unique_ptr< data_sink > > create (std::vector< T > const &args)
 创建数据接收器向量,输入向量中的每个元素对应一个接收器。更多...
 

详细描述

用于存储写入器输出数据的接口类。

定义在文件 data_sink.hpp 的第 43 行。

成员函数文档

◆ bytes_written()

virtual size_t cudf::io::data_sink::bytes_written ( )
纯虚函数

返回写入此接收器的总字节数。

返回值
写入此接收器的总字节数

◆ create() [1/5]

static std::unique_ptr<data_sink> cudf::io::data_sink::create ( )
静态

创建一个空接收器(不执行实际 IO 的接收器)

这是一个用于性能测试的有用代码路径,可以消除物理硬件随机性对分析的影响。

返回值
构造的 data_sink 对象

◆ create() [2/5]

static std::unique_ptr<data_sink> cudf::io::data_sink::create ( cudf::io::data_sink *const  user_sink)
静态

创建一个包装过的自定义用户数据接收器。

参数
[in]user_sink用户提供的数据接收器(通常是自定义类)

此处返回的数据接收器不是用户传入的那个。它是一个包装用户指针的内部类。其原理是允许用户声明一个自定义接收器实例并在多次 write() 调用中重复使用。

返回值
构造的 data_sink 对象

◆ create() [3/5]

static std::unique_ptr<data_sink> cudf::io::data_sink::create ( std::string const &  filepath)
静态

从文件路径创建接收器。

参数
[in]filepath要使用的文件路径
返回值
构造的 data_sink 对象

◆ create() [4/5]

static std::unique_ptr<data_sink> cudf::io::data_sink::create ( std::vector< char > *  buffer)
静态

从 std::vector 创建接收器。

参数
[in,out]buffer指向输出向量的指针
返回值
构造的 data_sink 对象

◆ create() [5/5]

template<typename T >
static std::vector<std::unique_ptr<data_sink> > cudf::io::data_sink::create ( std::vector< T > const &  args)
inlinestatic

创建数据接收器向量,输入向量中的每个元素对应一个接收器。

参数
[in]args参数向量
返回值
构造的数据接收器向量

定义在文件 data_sink.hpp 的第 91 行。

◆ device_write()

virtual void cudf::io::data_sink::device_write ( void const *  gpu_data,
size_t  size,
rmm::cuda_stream_view  stream 
)
inlinevirtual

将缓冲区内容从 GPU 地址追加到接收器。

为获得最佳性能,应仅在 is_device_write_preferred 返回 true 时调用。不支持直接设备写入的数据接收器实现无需重写此函数。

异常
cudf::logic_error对象不支持直接设备写入,即 supports_device_write 返回 false
参数
gpu_data指向要写入接收器对象的缓冲区的指针
size要写入的字节数
要使用的 CUDA 流

定义在文件 data_sink.hpp 的第 163 行。

◆ device_write_async()

virtual std::future<void> cudf::io::data_sink::device_write_async ( void const *  gpu_data,
size_t  size,
rmm::cuda_stream_view  stream 
)
inlinevirtual

从 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要写入的字节数
要使用的 CUDA 流
返回值
可用于同步此调用的 future 对象

定义在文件 data_sink.hpp 的第 190 行。

◆ host_write()

virtual void cudf::io::data_sink::host_write ( void const *  data,
size_t  size 
)
纯虚函数

将缓冲区内容追加到接收器。

参数
[in]data指向要写入接收器对象的缓冲区的指针
[in]size要写入的字节数

◆ is_device_write_preferred()

virtual bool cudf::io::data_sink::is_device_write_preferred ( size_t  size) const
inlinevirtual

估计直接设备写入对于给定大小是否更优。

参数
size要写入的字节数
返回值
对于给定大小,设备写入是否预计性能更佳

定义在文件 data_sink.hpp 的第 144 行。

◆ supports_device_write()

virtual bool cudf::io::data_sink::supports_device_write ( ) const
inlinevirtual

此接收器是否支持从 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() 调用

定义在文件 data_sink.hpp 的第 136 行。


此类的文档生成自以下文件