用于存储写入器输出数据的接口类。更多...
#include <data_sink.hpp>
用于存储写入器输出数据的接口类。
定义在文件 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]
创建一个包装过的自定义用户数据接收器。
- 参数
-
[in] | user_sink | 用户提供的数据接收器(通常是自定义类) |
此处返回的数据接收器不是用户传入的那个。它是一个包装用户指针的内部类。其原理是允许用户声明一个自定义接收器实例并在多次 write() 调用中重复使用。
- 返回值
- 构造的 data_sink 对象
◆ create() [3/5]
static std::unique_ptr<data_sink> cudf::io::data_sink::create |
( |
std::string const & |
filepath | ) |
|
|
静态 |
◆ create() [4/5]
static std::unique_ptr<data_sink> cudf::io::data_sink::create |
( |
std::vector< char > * |
buffer | ) |
|
|
静态 |
◆ 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 |
◆ 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
时调用。不支持直接设备写入的数据接收器实现无需重写此函数。
- 异常
-
- 参数
-
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()
- 异常
-
- 参数
-
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 |
◆ 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 行。
此类的文档生成自以下文件