| xgboost | 
具有静态类型和维度的张量视图。它实现了索引和切片。 更多...
#include <linalg.h>

| 公共类型 | |
| 使用 | ShapeT = std::size_t[kDim] | 
| 使用 | StrideT = ShapeT | 
| 使用 | element_type = T | 
| 使用 | value_type = std::remove_cv_t< T > | 
| 公共成员函数 | |
| template<typename I , std::int32_t D> | |
| LINALG_HD | TensorView (common::Span< T > data, I const (&shape)[D], DeviceOrd device) | 
| 使用数据和形状创建张量。 更多... | |
| template<typename I , int32_t D> | |
| LINALG_HD | TensorView (common::Span< T > data, I const (&shape)[D], DeviceOrd device, Order order) | 
| template<typename I , std::int32_t D> | |
| LINALG_HD | TensorView (common::Span< T > data, I const (&shape)[D], I const (&stride)[D], DeviceOrd device) | 
| 使用数据、形状和步幅创建张量。如果步幅可以从形状计算出来,请勿使用此构造函数。 更多... | |
| template<typename U , std::enable_if_t< common::detail::IsAllowedElementTypeConversion< U, T >::value > * = nullptr> | |
| LINALG_HD | TensorView (TensorView< U, kDim > const &that) | 
| template<typename... Index, detail::EnableIfIntegral< Index... > * = nullptr> | |
| LINALG_HD T & | operator() (Index &&...index) | 
| 对张量进行索引以获取标量值。 更多... | |
| template<typename... Index, detail::EnableIfIntegral< Index... > * = nullptr> | |
| LINALG_HD T const & | operator() (Index &&...index) const | 
| 对张量进行索引以获取标量值。 更多... | |
| template<typename... S> | |
| LINALG_HD auto | Slice (S &&...slices) const | 
| 切片张量。返回的张量具有推断的维度和形状。不支持标量结果。 更多... | |
| LINALG_HD auto | Shape () const | 
| LINALG_HD auto | Shape (size_t i) const | 
| LINALG_HD auto | Stride () const | 
| LINALG_HD auto | Stride (size_t i) const | 
| LINALG_HD std::size_t | Size () const | 
| 张量中的项数。 更多... | |
| bool | Empty () const | 
| LINALG_HD bool | Contiguous () const | 
| 这是否是一个连续数组,C 连续和 F 连续都返回 true。 更多... | |
| LINALG_HD bool | CContiguous () const | 
| 它是否是 C 连续数组。 更多... | |
| LINALG_HD bool | FContiguous () const | 
| 它是否是 F 连续数组。 更多... | |
| LINALG_HD auto | Values () const -> decltype(data_) const & | 
| 获取原始数据的引用。 更多... | |
| LINALG_HD auto | Device () const | 
| 获取 CUDA 设备序号。 更多... | |
| 静态公共属性 | |
| constexpr static size_t | kValueSize = sizeof(T) | 
| constexpr static size_t | kDimension = kDim | 
具有静态类型和维度的张量视图。它实现了索引和切片。
XGBoost 中的大多数算法都是为 CPU 和 GPU 实现的,没有使用太多线性代数例程,这个类是一个辅助工具,旨在简化一些高级操作,例如对预测张量或梯度矩阵进行索引。它可以作为普通参数传递给 CUDA 内核,用于 GPU 算法。
理想情况下,我们应该添加一个模板参数 bool on_host,以便编译器可以防止传递/访问错误的视图,但 XGBoost 中大量使用继承,因此一些函数需要可以在任何地方使用的数据类型(例如更新预测缓存)。
| using xgboost::linalg::TensorView< T, kDim >::element_type = T | 
| using xgboost::linalg::TensorView< T, kDim >::ShapeT = std::size_t[kDim] | 
| using xgboost::linalg::TensorView< T, kDim >::StrideT = ShapeT | 
| using xgboost::linalg::TensorView< T, kDim >::value_type = std::remove_cv_t<T> | 
| 
 | inline | 
使用数据和形状创建张量。
| I | 形状数组元素的类型。 | 
| D | 形状数组的大小,可以小于或等于张量维度。 | 
| 数据 | 原始数据输入,如果此张量的模板参数中具有 const 类型,则可以是 const。 | 
| shape | 张量的形状 | 
| device | 设备序号 | 
| 
 | inline | 
| 
 | inline | 
使用数据、形状和步幅创建张量。如果步幅可以从形状计算出来,请勿使用此构造函数。
| 
 | inline | 
| 
 | inline | 
它是否是 C 连续数组。
| 
 | inline | 
这是否是一个连续数组,C 连续和 F 连续都返回 true。
| 
 | inline | 
获取 CUDA 设备序号。
| 
 | inline | 
| 
 | inline | 
它是否是 F 连续数组。
| 
 | inline | 
对张量进行索引以获取标量值。
| 
 | inline | 
对张量进行索引以获取标量值。
| 
 | inline | 
| 
 | inline | 
获取第 i 维度的形状
| 
 | inline | 
张量中的项数。
| 
 | inline | 
切片张量。返回的张量具有推断的维度和形状。不支持标量结果。
| 
 | inline | 
| 
 | inline | 
获取第 i 维度的步幅,步幅指定为项数而不是字节数。
| 
 | inline | 
获取原始数据的引用。
| 
 | staticconstexpr | 
| 
 | staticconstexpr |