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 | 形状数组的大小,可以小于或等于张量维度。 |
data | 原始数据输入,如果此张量的模板参数为 const 类型,则可以为 const。 |
shape | 张量的形状 |
device | 设备序号 |
|
inline |
|
inline |
使用数据、形状和步长创建一个张量。如果步长可以从形状计算得出,请勿使用此构造函数。
|
inline |
|
inline |
这是否是 C 连续数组。
|
inline |
这是否是连续数组,C 连续和 F 连续都返回 true。
|
inline |
获取 CUDA 设备序号。
|
inline |
|
inline |
LINALG_HD bool xgboost::linalg::TensorView< T, kDim >::FContiguous
|
inline |
索引张量以获取标量值。
|
inline |
索引张量以获取标量值。
|
inline |
|
inline |
LINALG_HD std::size_t xgboost::linalg::TensorView< T, kDim >::Size
|
inline |
slices
|
inline |
◆ Stride() [2/2]
|
inline |
const -> decltype(data_) const &
|
constexpr static size_t xgboost::linalg::TensorView< T, kDim >::kDimension = kDim |
|
constexpr static size_t xgboost::linalg::TensorView< T, kDim >::kDimension = kDim |