Eigen::internal::TensorBlockResourceRequirements Struct Reference

#include <TensorBlock.h>

Public Member Functions

EIGEN_DEVICE_FUNC TensorBlockResourceRequirementsaddCostPerCoeff (TensorOpCost cost)
 

Static Public Member Functions

template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements withShapeAndSize (TensorBlockShapeType shape_type, size_t size_in_bytes, TensorOpCost cost)
 
template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements withShapeAndSize (TensorBlockShapeType shape_type, size_t size_in_bytes)
 
template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements skewed (size_t size_in_bytes)
 
template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements uniform (size_t size_in_bytes)
 
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements merge (const TensorBlockResourceRequirements &lhs, const TensorBlockResourceRequirements &rhs)
 
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements any ()
 

Public Attributes

TensorBlockShapeType shape_type
 
size_t size
 
TensorOpCost cost_per_coeff
 

Private Types

using Requirements = TensorBlockResourceRequirements
 

Static Private Member Functions

static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t merge (size_t lhs_size, size_t rhs_size)
 
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockShapeType merge (TensorBlockShapeType lhs, TensorBlockShapeType rhs)
 
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost merge (TensorOpCost lhs_cost, TensorOpCost rhs_cost)
 

Member Typedef Documentation

◆ Requirements

Member Function Documentation

◆ addCostPerCoeff()

◆ any()

◆ merge() [1/4]

static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements Eigen::internal::TensorBlockResourceRequirements::merge ( const TensorBlockResourceRequirements lhs,
const TensorBlockResourceRequirements rhs 
)
inlinestatic

◆ merge() [2/4]

static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t Eigen::internal::TensorBlockResourceRequirements::merge ( size_t  lhs_size,
size_t  rhs_size 
)
inlinestaticprivate
150  {
151  return numext::maxi(lhs_size, rhs_size);
152  }
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926

References Eigen::numext::maxi().

◆ merge() [3/4]

◆ merge() [4/4]

static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost Eigen::internal::TensorBlockResourceRequirements::merge ( TensorOpCost  lhs_cost,
TensorOpCost  rhs_cost 
)
inlinestaticprivate
161  {
162  return lhs_cost + rhs_cost;
163  }

◆ skewed()

template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements Eigen::internal::TensorBlockResourceRequirements::skewed ( size_t  size_in_bytes)
inlinestatic
119  {
120  return withShapeAndSize<Scalar>(TensorBlockShapeType::kSkewedInnerDims, size_in_bytes);
121  }

References Eigen::internal::kSkewedInnerDims.

◆ uniform()

template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements Eigen::internal::TensorBlockResourceRequirements::uniform ( size_t  size_in_bytes)
inlinestatic
124  {
125  return withShapeAndSize<Scalar>(TensorBlockShapeType::kUniformAllDims, size_in_bytes);
126  }

References Eigen::internal::kUniformAllDims.

◆ withShapeAndSize() [1/2]

template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements Eigen::internal::TensorBlockResourceRequirements::withShapeAndSize ( TensorBlockShapeType  shape_type,
size_t  size_in_bytes 
)
inlinestatic
97  {
98  // This default cost per coefficient is valid for most materialized tensor
99  // block evaluation implementations, because they typically just read
100  // coefficients from the underlying tensor storage, and write to the tensor
101  // block buffer (scratch or destination memory, reads and writes have linear
102  // access pattern). We ignore the fixed cost of block evaluation, because in
103  // practice it should negligible.
104  //
105  // Lazy block evaluation adds the cost of calling a functor for each
106  // coefficient.
107  //
108  // All non-trivial block evaluation implementations must provide their own
109  // cost approximation (e.g. shuffling inner dimension has a much higher cost
110  // because it reads memory randomly, although the total number of moved
111  // bytes is the same).
112  return withShapeAndSize<Scalar>(shape_type, size_in_bytes,
113  {/*bytes_loaded=*/sizeof(Scalar),
114  /*bytes_stored=*/sizeof(Scalar),
115  /*compute_cycles=*/0});
116  }
SCALAR Scalar
Definition: bench_gemm.cpp:45
TensorBlockShapeType shape_type
Definition: TensorBlock.h:76

References shape_type.

◆ withShapeAndSize() [2/2]

template<typename Scalar >
static EIGEN_DEVICE_FUNC TensorBlockResourceRequirements Eigen::internal::TensorBlockResourceRequirements::withShapeAndSize ( TensorBlockShapeType  shape_type,
size_t  size_in_bytes,
TensorOpCost  cost 
)
inlinestatic
90  {
91  const size_t size = numext::maxi(size_t(1), size_in_bytes / sizeof(Scalar));
92  return {shape_type, size, cost};
93  }
size_t size
Definition: TensorBlock.h:77

References Eigen::numext::maxi(), shape_type, and size.

Member Data Documentation

◆ cost_per_coeff

TensorOpCost Eigen::internal::TensorBlockResourceRequirements::cost_per_coeff

Referenced by addCostPerCoeff(), and merge().

◆ shape_type

◆ size

size_t Eigen::internal::TensorBlockResourceRequirements::size

The documentation for this struct was generated from the following file: