19 #include <cudf/detail/utilities/cuda_memcpy.hpp>
20 #include <cudf/detail/utilities/vector_factories.hpp>
37 namespace CUDF_EXPORT
cudf {
56 template <
typename ColumnDeviceView,
typename HostTableView>
81 __device__ ColumnDeviceView*
begin() const noexcept {
return _columns; }
91 __device__ ColumnDeviceView*
end() const noexcept {
return _columns + _num_columns; }
101 assert(column_index >= 0);
102 assert(column_index < _num_columns);
103 return _columns[column_index];
114 assert(column_index >= 0);
115 assert(column_index < _num_columns);
116 return _columns[column_index];
142 ColumnDeviceView* _columns{};
241 template <
typename ColumnDeviceView,
typename HostTableView>
247 std::size_t views_size_bytes = std::accumulate(
248 source_view.begin(), source_view.end(), std::size_t{0}, [](std::size_t init,
auto col) {
249 return init + ColumnDeviceView::extent(col);
252 auto padded_views_size_bytes = views_size_bytes + std::size_t{
alignof(ColumnDeviceView) - 1};
256 auto h_buffer = cudf::detail::make_host_vector<int8_t>(padded_views_size_bytes, stream);
265 auto descendant_storage = std::make_unique<rmm::device_buffer>(padded_views_size_bytes, stream);
266 void* h_ptr = detail::align_ptr_for_type<ColumnDeviceView>(h_buffer.data());
267 void* d_ptr = detail::align_ptr_for_type<ColumnDeviceView>(descendant_storage->data());
268 auto d_columns = detail::child_columns_to_device_array<ColumnDeviceView>(
269 source_view.begin(), source_view.end(), h_ptr, d_ptr);
272 static_cast<int8_t const*
>(h_ptr) - h_buffer.data(), views_size_bytes);
274 cudf::detail::cuda_memcpy(d_span, h_span, stream);
275 return std::make_tuple(std::move(descendant_storage), d_columns);
作为元素列的设备数据的不可变、非拥有视图,可平凡复制且可用...
ColumnDeviceViews 设备表的基类。
size_type num_rows() const noexcept
返回行数。
ColumnDeviceView const & column(size_type column_index) const noexcept
返回指定列视图的引用。
table_device_view_base(table_device_view_base &&)=default
移动构造函数。
ColumnDeviceView * begin() const noexcept
返回表中第一个视图的迭代器。
void destroy()
销毁 table_device_view 对象。
table_device_view_base(table_device_view_base const &)=default
拷贝构造函数。
size_type num_columns() const noexcept
返回列数。
table_device_view_base & operator=(table_device_view_base const &)=default
拷贝赋值运算符。
ColumnDeviceView * end() const noexcept
返回表中最后一个列视图之后一个位置的迭代器。
table_device_view_base(HostTableView source_view, rmm::cuda_stream_view stream)
从 host table_view 构造一个新的 table device view base 对象。
table_device_view_base & operator=(table_device_view_base &&)=default
移动赋值运算符。
ColumnDeviceView & column(size_type column_index) noexcept
返回指定列视图的引用。
作为元素列的设备数据的可变、非拥有视图,可平凡复制且可用...
static auto create(mutable_table_view source_view, rmm::cuda_stream_view stream=cudf::get_default_stream())
在设备内存中构造可变表设备视图的工厂函数。
一组大小相同的 mutable_column_views。
static auto create(table_view source_view, rmm::cuda_stream_view stream=cudf::get_default_stream())
在设备内存中构造表设备视图的工厂函数。
一组大小相同的 cudf::column_view。
rmm::cuda_stream_view const get_default_stream()
获取当前默认流。
int32_t size_type
列和表的行索引类型。
auto contiguous_copy_column_device_views(HostTableView source_view, rmm::cuda_stream_view stream)
将 table_view 的内容复制到连续设备内存中的列设备视图。
C++20 std::span 的设备版本,具有简化的功能集。
C++20 std::span,具有简化的功能集。
constexpr CUDF_HOST_DEVICE host_span subspan(typename base::size_type offset, typename base::size_type count) const noexcept
获取一个 span,它是从 offset 开始的此 span 中 count 个元素的视图。
(mutable)_table_view 的类定义。