docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
einsum2matmul.h
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <string>
5#include <vector>
6
8
11#include "sdfg/types/type.h"
12
13namespace sdfg::einsum {
14
26public:
27 std::string name() const override {
28 return "Einsum2MatMul";
29 }
30
32 const EinsumIndexing& indexing,
33 bool swapped,
34 const symbolic::Expression& outer_dim,
35 const symbolic::Expression& inner_dim,
36 const symbolic::Expression& outer_offset,
37 const symbolic::Expression& inner_offset,
38 const symbolic::Expression& external_offset
39 ) const;
40
41 ReplaceOutcome replace(EinsumReplacementContext& context, const EinsumCluster& cluster) const override;
42
48 virtual bool can_be_applied(const EinsumCluster& cluster) const;
49
54 symbolic::Symbol indvar_inner = SymEngine::null;
55 symbolic::Expression m = SymEngine::null;
56 symbolic::Expression n = SymEngine::null;
57 symbolic::Expression k = SymEngine::null;
58 symbolic::Expression m_init = SymEngine::null;
59 symbolic::Expression n_init = SymEngine::null;
60 symbolic::Expression k_init = SymEngine::null;
61 int a_idx = -1;
62 int b_idx = -1;
63 std::optional<math::tensor::TensorLayout> layout_a;
64 std::optional<math::tensor::TensorLayout> layout_b;
65 std::optional<math::tensor::TensorLayout> layout_y;
71 };
72
76 bool analyze(const EinsumCluster& cluster, MatMulAnalysis& result) const;
77};
78
79} // namespace sdfg::einsum
Proof-of-concept replacer that turns a matmul-shaped EinsumCluster into a MatMulNode.
Definition einsum2matmul.h:25
std::string name() const override
Definition einsum2matmul.h:27
ReplaceOutcome replace(EinsumReplacementContext &context, const EinsumCluster &cluster) const override
bool analyze(const EinsumCluster &cluster, MatMulAnalysis &result) const
Runs the applicability analysis for the canonical MatMul form.
math::tensor::TensorLayout build_tensor_layout(const EinsumIndexing &indexing, bool swapped, const symbolic::Expression &outer_dim, const symbolic::Expression &inner_dim, const symbolic::Expression &outer_offset, const symbolic::Expression &inner_offset, const symbolic::Expression &external_offset) const
virtual bool can_be_applied(const EinsumCluster &cluster) const
Checks whether this replacer could be applied to the given cluster.
Non-destructive counterpart of an EinsumNode.
Definition einsum_detection.h:150
ExpandContext for replacing an EinsumCluster with a new implementation.
Definition einsum_replacer.h:32
Interface for replacing an EinsumCluster with a different implementation.
Definition einsum_replacer.h:52
The metadata associated with a addressing a tensor in elements Meant to be used with TensorNodes to d...
Definition tensor_layout.h:20
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::RCP< const SymEngine::Symbol > Symbol
Reference-counted pointer to a SymEngine Symbol.
Definition symbolic.h:71
Definition einsum.h:13
passes::LibNodeExpander::ExpandOutcome ReplaceOutcome
Definition einsum_replacer.h:18
PrimitiveType
Enumeration of all primitive data types supported by sdfglib.
Definition type.h:35
@ Void
Void type (0 bits).
Definition type.h:36
Results of the applicability analysis that are reused by the replacement step.
Definition einsum2matmul.h:51
types::PrimitiveType input_type
whether the indices in our contributors array are swapped to how we canonically name them this is not...
Definition einsum2matmul.h:69
symbolic::Symbol indvar_outer_1
Definition einsum2matmul.h:52
symbolic::Expression k
Definition einsum2matmul.h:57
types::PrimitiveType output_type
Definition einsum2matmul.h:70
std::optional< math::tensor::TensorLayout > layout_a
Definition einsum2matmul.h:63
symbolic::Expression m
Definition einsum2matmul.h:55
symbolic::Expression m_init
Definition einsum2matmul.h:58
symbolic::Symbol indvar_inner
Definition einsum2matmul.h:54
symbolic::Symbol indvar_outer_2
Definition einsum2matmul.h:53
int a_idx
Definition einsum2matmul.h:61
symbolic::Expression k_init
Definition einsum2matmul.h:60
std::optional< math::tensor::TensorLayout > layout_y
Definition einsum2matmul.h:65
std::optional< math::tensor::TensorLayout > layout_b
Definition einsum2matmul.h:64
symbolic::Expression n
Definition einsum2matmul.h:56
int b_idx
Definition einsum2matmul.h:62
symbolic::Expression n_init
Definition einsum2matmul.h:59
How the consumed einsum dimensions map onto one operand's access subset.
Definition einsum_detection.h:50
Core type system definitions for sdfglib.