Classes | Namespaces | Macros | Typedefs | Functions
linalg.h File Reference

Linear algebra related utilities. More...

#include <dmlc/endian.h>
#include <xgboost/base.h>
#include <xgboost/host_device_vector.h>
#include <xgboost/json.h>
#include <xgboost/span.h>
#include <algorithm>
#include <cassert>
#include <limits>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
Include dependency graph for linalg.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


struct  xgboost::linalg::detail::ArrayInterfaceHandler
struct  xgboost::linalg::detail::AllTag
struct  xgboost::linalg::detail::IntTag
struct  xgboost::linalg::detail::RangeTag< I >
class  xgboost::linalg::TensorView< T, kDim >
 A tensor view with static type and dimension. It implements indexing and slicing. More...
class  xgboost::linalg::Tensor< T, kDim >
 A tensor storage. To use it for other functionality like slicing one needs to obtain a view first. This way we can use it on both host and device. More...


 namespace of xgboost


#define LINALG_HD


template<typename S >
using xgboost::linalg::detail::RemoveCRType = std::remove_const_t< std::remove_reference_t< S > >
template<typename S >
using xgboost::linalg::detail::IndexToTag = std::conditional_t< std::is_integral< RemoveCRType< S > >::value, IntTag, S >
template<typename T >
using xgboost::linalg::VectorView = TensorView< T, 1 >
 A view over a vector, specialization of Tensor. More...
template<typename T >
using xgboost::linalg::MatrixView = TensorView< T, 2 >
 A view over a matrix, specialization of Tensor. More...


template<size_t dim, typename S , typename Head , size_t D>
constexpr size_t xgboost::linalg::detail::Offset (S(&strides)[D], size_t n, Head head)
template<size_t dim, typename S , size_t D, typename Head , typename... Tail>
constexpr std::enable_if_t< sizeof...(Tail) !=0, size_t > xgboost::linalg::detail::Offset (S(&strides)[D], size_t n, Head head, Tail &&...rest)
template<int32_t D, bool f_array = false>
constexpr void xgboost::linalg::detail::CalcStride (size_t const (&shape)[D], size_t(&stride)[D])
template<typename T >
constexpr int32_t xgboost::linalg::detail::CalcSliceDim ()
 Calculate the dimension of sliced tensor. More...
template<typename T , typename... S>
constexpr std::enable_if_t< sizeof...(S) !=0, int32_t > xgboost::linalg::detail::CalcSliceDim ()
template<int32_t D>
constexpr size_t xgboost::linalg::detail::CalcSize (size_t(&shape)[D])
template<int32_t n, typename Fn >
constexpr LINALG_HD auto xgboost::linalg::detail::UnrollLoop (Fn fn)
template<typename T >
int32_t xgboost::linalg::detail::NativePopc (T v)
LINALG_HD int xgboost::linalg::detail::Popc (uint32_t v)
LINALG_HD int xgboost::linalg::detail::Popc (uint64_t v)
template<class T , std::size_t N, std::size_t... Idx>
constexpr auto xgboost::linalg::detail::Arr2Tup (T(&arr)[N], std::index_sequence< Idx... >)
template<class T , std::size_t N>
constexpr auto xgboost::linalg::detail::Arr2Tup (T(&arr)[N])
template<typename I , int32_t D>
LINALG_HD auto xgboost::linalg::detail::UnravelImpl (I idx, common::Span< size_t const, D > shape)
template<size_t dim, typename I , int32_t D>
void xgboost::linalg::detail::ReshapeImpl (size_t(&out_shape)[D], I s)
template<size_t dim, int32_t D, typename... S, typename I , std::enable_if_t< sizeof...(S) !=0 > * = nullptr>
void xgboost::linalg::detail::ReshapeImpl (size_t(&out_shape)[D], I &&s, S &&...rest)
template<typename Fn , typename Tup , size_t... I>
decltype(auto) constexpr LINALG_HD xgboost::linalg::detail::Apply (Fn &&f, Tup &&t, std::index_sequence< I... >)
template<typename Fn , typename Tup >
decltype(auto) constexpr LINALG_HD xgboost::linalg::detail::Apply (Fn &&f, Tup &&t)
constexpr detail::AllTag xgboost::linalg::All ()
 Specify all elements in the axis for slicing. More...
template<typename I >
constexpr detail::RangeTag< I > xgboost::linalg::Range (I beg, I end)
 Specify a range of elements in the axis for slicing. More...
template<typename Container , typename I , int32_t D, std::enable_if_t<!common::detail::IsSpan< Container >::value > * = nullptr>
auto xgboost::linalg::MakeTensorView (Container &data, I const (&shape)[D], int32_t device)
 Constructor for automatic type deduction. More...
template<typename T , typename I , int32_t D>
LINALG_HD auto xgboost::linalg::MakeTensorView (common::Span< T > data, I const (&shape)[D], int32_t device)
template<size_t D>
LINALG_HD auto xgboost::linalg::UnravelIndex (size_t idx, common::Span< size_t const, D > shape)
 Turns linear index into multi-dimension index. Similar to numpy unravel. More...
template<typename T >
auto xgboost::linalg::MakeVec (T *ptr, size_t s, int32_t device=-1)
 Create a vector view from contigious memory. More...
template<typename T >
auto xgboost::linalg::MakeVec (HostDeviceVector< T > *data)
template<typename T >
auto xgboost::linalg::MakeVec (HostDeviceVector< T > const *data)
template<typename T , int32_t D>
Json xgboost::linalg::ArrayInterface (TensorView< T const, D > const &t)
 Array Interface defined by numpy. More...
template<typename T , int32_t D>
Json xgboost::linalg::ArrayInterface (TensorView< T, D > const &t)
 Same as const version, but returns non-readonly data pointer. More...
template<typename T , int32_t D>
auto xgboost::linalg::ArrayInterfaceStr (TensorView< T const, D > const &t)
 Return string representation of array interface. More...
template<typename T , int32_t D>
auto xgboost::linalg::ArrayInterfaceStr (TensorView< T, D > const &t)
template<typename T , int32_t D>
void xgboost::linalg::Stack (Tensor< T, D > *l, Tensor< T, D > const &r)

Detailed Description

Linear algebra related utilities.

Copyright 2021-2022 by XGBoost Contributors

Macro Definition Documentation


#define LINALG_HD