IO 数据接收器#
- group io_datasinks
-
class data_sink#
- #include <data_sink.hpp>
用于存储写入器输出数据的接口类。
公共函数
-
inline virtual ~data_sink()#
基类析构函数。
-
virtual void host_write(void const *data, size_t size) = 0#
将缓冲区内容附加到接收器。
- Parameters:
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);
在接收器类型本身是内存缓冲写入的情况下,这实际上变成了第二次内存复制。因此,对于“智能”自定义data_sink,一个有用的优化是自行管理CPU和GPU之间的数据传输;将写入器的内部简化为
sink->device_write(device_buffer, size)
如果此函数返回true,data_sink 将尽可能接收对 device_write() 的调用,而不是 write()。然而,仍然有可能接收到 write() 的调用。
- Returns:
如果此写入器支持 device_write() 调用
-
inline virtual bool is_device_write_preferred(size_t size) const#
估计直接设备写入对于给定大小是否更优。
- Parameters:
size – 要写入的字节数
- Returns:
设备写入是否预期对给定大小更高效
-
inline virtual void device_write(void const *gpu_data, size_t size, rmm::cuda_stream_view stream)#
将缓冲区内容从GPU地址附加到接收器。
为了获得最佳性能,只有在
is_device_write_preferred返回true时才应调用此函数。不支持直接设备写入的数据接收实现不需要重写此函数。- Throws:
cudf::logic_error – 该对象不支持直接设备写入,即
supports_device_write返回false。- Parameters:
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()
- Throws:
cudf::logic_error – 该对象不支持直接设备写入,即
supports_device_write返回false。cudf::logic_error –
- Parameters:
gpu_data – 指向要写入接收器对象的缓冲区的指针
size – 要写入的字节数
stream – 使用的CUDA流
- Returns:
一个可用于同步调用的未来
-
virtual void flush() = 0#
刷新写入接收器的数据。
-
virtual size_t bytes_written() = 0#
返回写入此接收器的总字节数。
- Returns:
写入此接收器的总字节数
公共静态函数
-
static std::unique_ptr<data_sink> create(std::string const &filepath)#
从文件路径创建一个接收器。
- Parameters:
filepath – [in] 要使用的文件的路径
- Returns:
构建的 data_sink 对象
-
static std::unique_ptr<data_sink> create(std::vector<char> *buffer)#
从 std::vector 创建一个 sink。
- Parameters:
buffer – [inout] 指向输出向量的指针
- Returns:
构建的 data_sink 对象
-
static std::unique_ptr<data_sink> create()#
创建一个空接收器(一个不进行实际输入输出的接收器)
一个用于基准测试的有用代码路径,以消除分析中的物理硬件随机性。
- Returns:
构建的 data_sink 对象
-
inline virtual ~data_sink()#
-
class data_sink#