docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
blas_node.h
Go to the documentation of this file.
1
29
30#pragma once
31
32#include <optional>
33
36
37namespace sdfg {
38namespace math {
39namespace blas {
40
54 h = 'h',
55 s = 's',
56 d = 'd',
57 c = 'c',
58 z = 'z',
59};
60
61constexpr std::string_view BLAS_Precision_to_string(BLAS_Precision precision) {
62 switch (precision) {
64 return "h";
66 return "s";
68 return "d";
70 return "c";
72 return "z";
73 default:
74 throw std::runtime_error("Invalid BLAS_Precision value");
75 }
76}
77
88 No = 111,
89 Trans = 112,
90 ConjTrans = 113,
91};
92
93constexpr std::string_view BLAS_Transpose_to_string(BLAS_Transpose transpose) {
94 switch (transpose) {
96 return "CblasNoTrans";
98 return "CblasTrans";
100 return "CblasConjTrans";
101 default:
102 throw std::runtime_error("Invalid BLAS_Transpose value");
103 }
104}
105
106inline constexpr char BLAS_Transpose_to_char(BLAS_Transpose transpose) {
107 switch (transpose) {
109 return 'N';
111 return 'T';
113 return 'C';
114 default:
115 throw std::runtime_error("Invalid BLAS_Transpose value");
116 }
117}
118
128 RowMajor = 101,
129 ColMajor = 102,
130};
131
132constexpr std::string_view BLAS_Layout_to_string(BLAS_Layout layout) {
133 switch (layout) {
135 return "CblasRowMajor";
137 return "CblasColMajor";
138 }
139}
140
141inline constexpr std::string_view BLAS_Layout_to_short_string(BLAS_Layout layout) {
142 switch (layout) {
144 return "RowM";
146 return "ColM";
147 default:
148 throw std::runtime_error("Invalid BLAS_Layout value");
149 }
150}
151
157
169class BLASNode : public math::MathNode {
170protected:
172
173public:
187 size_t element_id,
188 const DebugInfo& debug_info,
189 const graph::Vertex vertex,
192 const std::vector<std::string>& outputs,
193 const std::vector<std::string>& inputs,
196 );
197
203
209
211 std::optional<double> constant_input(const std::string& conn) const;
212};
213
214class BLASLibDependency : public codegen::LibDependency {
215private:
216 BLASLibDependency() = default;
217
218public:
219 static const BLASLibDependency* instance() {
220 static BLASLibDependency inst;
221 return &inst;
222 }
223
224 std::string_view name() const override {
225 return "blas";
226 }
227 void enumerate_includes(std::vector<std::string>& out_list) const override {
228#if defined(__APPLE__)
229 out_list.push_back("Accelerate/Accelerate.h");
230#else
231 out_list.push_back("cblas.h");
232#endif
233 }
234 std::vector<std::string_view>& globally_unique_ids() const override {
235 static std::vector<std::string_view> ids{"bfloat16"};
236 return ids;
237 }
238};
239
240} // namespace blas
241} // namespace math
242} // namespace sdfg
Definition element.h:30
size_t element_id() const
const DebugInfo & debug_info() const
Definition code_snippet_factory.h:51
const std::vector< std::string > & outputs() const
Get output connector names (const).
const std::vector< std::string > & inputs() const
Get input connector names (const).
Definition data_flow_graph.h:29
graph::Vertex vertex() const
Get the graph vertex for this node.
const LibraryNodeCode & code() const
Get the operation code.
const ImplementationType & implementation_type() const
Get the implementation type (const).
Base class for mathematical library nodes with expansion support.
Definition math_node.h:68
void enumerate_includes(std::vector< std::string > &out_list) const override
Definition blas_node.h:227
std::vector< std::string_view > & globally_unique_ids() const override
Definition blas_node.h:234
std::string_view name() const override
Definition blas_node.h:224
static const BLASLibDependency * instance()
Definition blas_node.h:219
std::optional< double > constant_input(const std::string &conn) const
The value of the scalar input conn if a constant feeds it.
types::PrimitiveType scalar_primitive() const
Get the corresponding scalar primitive type.
BLAS_Precision precision() const
Get the precision/data type.
BLASNode(size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, data_flow::DataFlowGraph &parent, const data_flow::LibraryNodeCode &code, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs, const data_flow::ImplementationType &implementation_type, const BLAS_Precision &precision)
Construct a BLAS node.
BLAS_Precision precision_
Floating-point precision for the operation.
Definition blas_node.h:171
Mathematical library node base class with expansion support.
StringEnum ImplementationType
Implementation type identifier for library nodes.
Definition library_node.h:75
StringEnum LibraryNodeCode
Definition library_node.h:65
boost::graph_traits< Graph >::vertex_descriptor Vertex
Definition graph.h:25
Definition batched_gemm_node.h:13
constexpr char BLAS_Transpose_to_char(BLAS_Transpose transpose)
Definition blas_node.h:106
BLAS_Precision
Precision/data type for BLAS operations.
Definition blas_node.h:52
@ z
Definition blas_node.h:58
@ d
Definition blas_node.h:56
@ h
Definition blas_node.h:54
@ c
Definition blas_node.h:57
@ invalid
Definition blas_node.h:53
@ s
Definition blas_node.h:55
data_flow::ImplementationType ImplementationType_BLAS
BLAS implementation type Uses standard CPU BLAS libraries (OpenBLAS, Intel MKL, etc....
Definition blas_node.h:156
BLAS_Transpose
Transpose operation for BLAS matrices.
Definition blas_node.h:87
@ No
Definition blas_node.h:88
@ Trans
Definition blas_node.h:89
@ ConjTrans
Definition blas_node.h:90
constexpr std::string_view BLAS_Layout_to_short_string(BLAS_Layout layout)
Definition blas_node.h:141
BLAS_Layout
Memory layout for BLAS matrices.
Definition blas_node.h:127
@ RowMajor
Definition blas_node.h:128
@ ColMajor
Definition blas_node.h:129
constexpr std::string_view BLAS_Layout_to_string(BLAS_Layout layout)
Definition blas_node.h:132
constexpr std::string_view BLAS_Precision_to_string(BLAS_Precision precision)
Definition blas_node.h:61
constexpr std::string_view BLAS_Transpose_to_string(BLAS_Transpose transpose)
Definition blas_node.h:93
Definition batched_gemm_node.h:12
PrimitiveType
Enumeration of all primitive data types supported by sdfglib.
Definition type.h:35
Definition analysis.h:7