1#ifndef INFINI_OPS_BASE_GEMM_H_
2#define INFINI_OPS_BASE_GEMM_H_
15 std::optional<float> alpha, std::optional<float> beta,
16 std::optional<int> trans_a, std::optional<int> trans_b,
Tensor y)
17 :
alpha_{alpha.value_or(1.0)},
30 lda_{std::max(a.stride(-2), a.stride(-1))},
31 ldb_{std::max(b.stride(-2), b.stride(-1))},
32 ldy_{std::max(y.stride(-2), y.stride(-1))},
51 const std::optional<Tensor> c,
52 std::optional<float> alpha, std::optional<float> beta,
53 std::optional<int> trans_a,
54 std::optional<int> trans_b,
Tensor y)
const = 0;
57 return operator()(a, b, std::nullopt, std::nullopt, std::nullopt,
58 std::nullopt, std::nullopt, y);
61 template <
typename TensorLike>
63 Tensor::Shape y_shape{a.shape()[a.shape().size() - 2],
64 b.shape()[b.shape().size() - 1]};
65 return TensorLike::Empty(y_shape, a.dtype(), a.device());
70 std::optional<float> beta) {
71 static_cast<void>(beta);
72 assert(!c &&
"operator Gemm C input is not supported yet");
const DataType b_type_
Definition gemm.h:92
const DataType y_type_
Definition gemm.h:94
Tensor::Stride ldy_
Definition gemm.h:106
Tensor::Size n_
Definition gemm.h:86
Tensor::Strides b_strides_
Definition gemm.h:98
Tensor::Size batch_count_
Definition gemm.h:108
Tensor::Strides a_strides_
Definition gemm.h:96
Tensor::Size k_
Definition gemm.h:88
Tensor::Stride batch_stride_b_
Definition gemm.h:112
float alpha_
Definition gemm.h:76
virtual void operator()(const Tensor a, const Tensor b, const std::optional< Tensor > c, std::optional< float > alpha, std::optional< float > beta, std::optional< int > trans_a, std::optional< int > trans_b, Tensor y) const =0
static float EffectiveBeta(const std::optional< Tensor > &c, std::optional< float > beta)
Definition gemm.h:69
virtual void operator()(const Tensor a, const Tensor b, Tensor y) const
Definition gemm.h:56
Gemm(const Tensor a, const Tensor b, Tensor y)
Definition gemm.h:40
Tensor::Stride lda_
Definition gemm.h:102
const DataType a_type_
Definition gemm.h:90
Tensor::Stride batch_stride_a_
Definition gemm.h:110
bool trans_a_
Definition gemm.h:80
Tensor::Strides y_strides_
Definition gemm.h:100
Gemm(const Tensor a, const Tensor b, const std::optional< Tensor > c, std::optional< float > alpha, std::optional< float > beta, std::optional< int > trans_a, std::optional< int > trans_b, Tensor y)
Definition gemm.h:14
Tensor::Size m_
Definition gemm.h:84
bool trans_b_
Definition gemm.h:82
Tensor::Stride batch_stride_y_
Definition gemm.h:114
Tensor::Stride ldb_
Definition gemm.h:104
float beta_
Definition gemm.h:78
static auto MakeReturnValue(const TensorLike &a, const TensorLike &b)
Definition gemm.h:62
Definition generated/include/operator.h:282
Definition generated/include/operator.h:28
template void bool
Definition operator_call_instantiations.h:111
infini::rt::TensorView Tensor
Definition tensor.h:8