interop.hpp
查看此文件的文档。
1 /*
2  * 版权所有 (c) 2020-2025, NVIDIA CORPORATION。
3  *
4  * 根据 Apache 许可,版本 2.0(“许可”)获得许可;
5  * 除非遵守许可,否则您不得使用此文件。
6  * 您可以在以下位置获取许可副本
7  *
8  * https://apache.ac.cn/licenses/LICENSE-2.0
9  *
10  * 除非适用法律要求或书面同意,否则软件
11  * 根据许可分发,基础是“按原样”分发,
12  * 不附带任何明示或暗示的保证或条件。
13  * 请参阅许可,了解特定语言的权限和
14  * 限制。
15  */
16 
17 #pragma once
18 
19 #include <cudf/column/column.hpp>
20 #include <cudf/detail/transform.hpp>
21 #include <cudf/table/table.hpp>
23 #include <cudf/types.hpp>
24 #include <cudf/utilities/export.hpp>
26 #include <cudf/utilities/span.hpp>
27 
28 #include <rmm/resource_ref.hpp>
29 
30 #include <utility>
31 
32 struct DLManagedTensor;
33 
34 struct ArrowDeviceArray;
35 
36 struct ArrowSchema;
37 
38 struct ArrowArray;
39 
40 struct ArrowArrayStream;
41 
43 // 这些是来自 Arrow 的类型,我们在此前置声明是为了避免 API 需要包含 nanoarrow 头文件。
44 // avoid needing to include nanoarrow headers.
45 typedef int32_t ArrowDeviceType; // NOLINT
46 
47 #define ARROW_DEVICE_CUDA 2 // NOLINT
49 
50 namespace CUDF_EXPORT cudf {
75 std::unique_ptr<table> from_dlpack(
76  DLManagedTensor const* managed_tensor,
79 
99 DLManagedTensor* to_dlpack(
100  table_view const& input,
103  // end of group
105 
119  std::string name;
120  std::vector<column_metadata> children_meta;
121 
127  column_metadata(std::string _name) : name(std::move(_name)) {}
128  column_metadata() = default;
129 };
130 
135 using unique_schema_t = std::unique_ptr<ArrowSchema, void (*)(ArrowSchema*)>;
136 
141 using unique_device_array_t = std::unique_ptr<ArrowDeviceArray, void (*)(ArrowDeviceArray*)>;
142 
147 using owned_columns_t = std::vector<std::unique_ptr<cudf::column>>;
148 
157 template <typename ViewType>
164  explicit custom_view_deleter(owned_columns_t&& owned) : owned_mem_{std::move(owned)} {}
165 
171  void operator()(ViewType* ptr) const { delete ptr; }
172 
174 };
175 
181  std::unique_ptr<cudf::table_view, custom_view_deleter<cudf::table_view>>;
182 
188  std::unique_ptr<cudf::column_view, custom_view_deleter<cudf::column_view>>;
189 
190 namespace interop {
191 
192 struct arrow_array_container;
193 
208 
222 std::vector<cudf::column_metadata> get_table_metadata(cudf::table_view const& input);
223 
233  public
246  column_metadata const& metadata,
249 
262  arrow_column(ArrowSchema&& schema,
263  ArrowDeviceArray&& input,
266 
279  arrow_column(ArrowSchema&& schema,
280  ArrowArray&& input,
283 
295  ArrowSchema* output,
298 
307  void to_arrow(ArrowDeviceArray* output,
308  ArrowDeviceType device_type = ARROW_DEVICE_CUDA,
311 
319  [[nodiscard]] column_view view() const;
320 
321  private
322  std::shared_ptr<arrow_array_container>
323  container;
325  owned_columns_t view_columns;
326  column_view cached_view;
327 };
328 
337 class arrow_table {
338  public
354 
367  arrow_table(ArrowSchema&& schema,
368  ArrowDeviceArray&& input,
371 
384  arrow_table(ArrowSchema&& schema,
385  ArrowArray&& input,
388 
400  arrow_table(ArrowArrayStream&& input,
403 
415  ArrowSchema* output,
418 
427  void to_arrow(ArrowDeviceArray* output,
428  ArrowDeviceType device_type = ARROW_DEVICE_CUDA,
431 
439  [[nodiscard]] table_view view() const;
440 
441  private
442  std::shared_ptr<arrow_array_container>
443  container;
445  owned_columns_t view_columns;
446  table_view cached_view;
447 };
448 
449 } // namespace interop
450 
468 
494  cudf::table&& table,
497 
523  cudf::column&& col,
526 
555  cudf::table_view const& table,
558 
587  cudf::column_view const& col,
590 
612  cudf::table_view const& table,
615 
637  cudf::column_view const& col,
640 
658 std::unique_ptr<cudf::table> from_arrow(
659  ArrowSchema const* schema,
660  ArrowArray const* input,
663 
677 std::unique_ptr<cudf::column> from_arrow_column(
678  ArrowSchema const* schema,
679  ArrowArray const* input,
682 
703 std::unique_ptr<table> from_arrow_host(
704  ArrowSchema const* schema,
705  ArrowDeviceArray const* input,
708 
722 std::unique_ptr<table> from_arrow_stream(
723  ArrowArrayStream* input,
726 
746 std::unique_ptr<column> from_arrow_host_column(
747  ArrowSchema const* schema,
748  ArrowDeviceArray const* input,
751 
790  ArrowSchema const* schema,
791  ArrowDeviceArray const* input,
794 
828  ArrowSchema const* schema,
829  ArrowDeviceArray const* input,
832  // end of group
834 } // namespace CUDF_EXPORT cudf
作为元素列的非拥有、不可变设备数据视图,其中一些元素可能为 null,如 ind...
包含可空设备数据作为元素列的容器。
定义: column.hpp:47
cudf 中 ArrowDeviceArray 数据的一种标准交换媒介。
定义: interop.hpp:232
构造新的 Arrow 列对象。
arrow_column(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_column(ArrowSchema &&schema, ArrowArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_column(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
column_view view() const
获取列数据的视图。
void to_arrow(ArrowDeviceArray *output, ArrowDeviceType device_type=ARROW_DEVICE_CUDA, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref()) const
将列转换为 ArrowDeviceArray。
arrow_column(cudf::column &&input, column_metadata const &metadata, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_column(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
void to_arrow_schema(ArrowSchema *output, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref()) const
将列转换为 ArrowSchema。
cudf 中 ArrowDeviceArray 数据的一种标准交换媒介。
定义: interop.hpp:337
构造新的 Arrow 表对象。
arrow_table(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_table(ArrowArrayStream &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_table(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_table(cudf::table &&input, cudf::host_span< column_metadata const > metadata, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_table(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
void to_arrow(ArrowDeviceArray *output, ArrowDeviceType device_type=ARROW_DEVICE_CUDA, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref()) const
将表转换为 ArrowDeviceArray。
arrow_table(ArrowSchema &&schema, ArrowArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
arrow_table(ArrowSchema &&schema, ArrowDeviceArray &&input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
table_view view() const
获取表数据的视图。
void to_arrow_schema(ArrowSchema *output, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref()) const
将表转换为 ArrowSchema。
一组大小相同的 cudf::column_view。
一组大小相同的 cudf::column。
定义: table.hpp:40
cudf::column 的类定义。
rmm::cuda_stream_view const get_default_stream()
获取当前默认流。
std::unique_ptr< cudf::table_view, custom_view_deleter< cudf::table_view > > unique_table_view_t
带有自定义删除器的 cudf::table_view 的 unique_ptr 的类型别名
定义: interop.hpp:181
std::vector< std::unique_ptr< cudf::column > > owned_columns_t
拥有列向量的类型别名,用于从 ArrowDeviceArray 转换
定义: interop.hpp:147
std::unique_ptr< column > from_arrow_host_column(ArrowSchema const *schema, ArrowDeviceArray const *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowDeviceArray 输入创建 cudf::column。
std::unique_ptr< cudf::column > from_arrow_column(ArrowSchema const *schema, ArrowArray const *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowArray 和 ArrowSchema 输入创建 cudf::column。
unique_schema_t to_arrow_schema(cudf::table_view const &input, cudf::host_span< column_metadata const > metadata)
根据 cudf 表和元数据创建 ArrowSchema。
std::unique_ptr< table > from_arrow_stream(ArrowArrayStream *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowArrayStream 输入创建 cudf::table。
unique_table_view_t from_arrow_device(ArrowSchema const *schema, ArrowDeviceArray const *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowDeviceArray 和 ArrowSchema 创建 cudf::table_view
unique_column_view_t from_arrow_device_column(ArrowSchema const *schema, ArrowDeviceArray const *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowDeviceArray 和 ArrowSchema 创建 cudf::column_view
unique_device_array_t to_arrow_host(cudf::column_view const &col, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
将列视图数据复制到主机并为其创建 ArrowDeviceArray。
unique_device_array_t to_arrow_device(cudf::column_view const &col, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
从列视图创建 ArrowDeviceArray。
std::unique_ptr< cudf::column_view, custom_view_deleter< cudf::column_view > > unique_column_view_t
带有自定义删除器的 cudf::column_view 的 unique_ptr 的类型别名
定义: interop.hpp:188
std::unique_ptr< ArrowSchema, void(*)(ArrowSchema *)> unique_schema_t
带有自定义删除器的 ArrowSchema 的 unique_ptr 的类型别名
定义: interop.hpp:135
std::unique_ptr< ArrowDeviceArray, void(*)(ArrowDeviceArray *)> unique_device_array_t
带有自定义删除器的 ArrowDeviceArray 的 unique_ptr 的类型别名
定义: interop.hpp:141
std::unique_ptr< table > from_arrow_host(ArrowSchema const *schema, ArrowDeviceArray const *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowDeviceArray 输入创建 cudf::table。
std::unique_ptr< cudf::table > from_arrow(ArrowSchema const *schema, ArrowArray const *input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
根据给定的 ArrowArray 和 ArrowSchema 输入创建 cudf::table。
std::unique_ptr< table > from_dlpack(DLManagedTensor const *managed_tensor, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
将 DLPack DLTensor 转换为 cudf 表。
DLManagedTensor * to_dlpack(table_view const &input, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
将 cudf 表转换为 DLPack DLTensor。
rmm::device_async_resource_ref get_current_device_resource_ref()
获取当前设备内存资源引用。
cuda::mr::async_resource_ref< cuda::mr::device_accessible > device_async_resource_ref
std::vector< cudf::column_metadata > get_table_metadata(cudf::table_view const &input)
用于为 Arrow 转换生成空表元数据(所有列无名称)的辅助函数。
cudf::column_metadata get_column_metadata(cudf::column_view const &input)
用于为 Arrow 转换生成空列元数据(无名称列)的辅助函数。
cuDF 接口
定义: host_udf.hpp:37
span 的 API。
Arrow 数组的详细元数据信息。
定义: interop.hpp:118
column_metadata(std::string _name)
构造新的列元数据对象。
定义: interop.hpp:127
std::vector< column_metadata > children_meta
列子项的元数据。
定义: interop.hpp:120
std::string name
列的名称。
定义: interop.hpp:119
table_view 的 unique_ptr 的自定义删除器的函数对象
定义: interop.hpp:158
void operator()(ViewType *ptr) const
删除 unique_ptr 的操作符
定义: interop.hpp:171
owned_columns_t owned_mem_
必须删除的拥有列。
定义: interop.hpp:173
custom_view_deleter(owned_columns_t &&owned)
构造新的自定义视图删除器对象。
定义: interop.hpp:164
精简功能集的 C++20 std::span。
定义: span.hpp:194
cudf::table 的类定义。
(mutable)_table_view 的类定义
libcudf 的类型声明。