ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
mpqsolver::pattern::Q8LayerNormWithQ16VarianceResolver Class Reference

#include <PatternResolver.h>

Collaboration diagram for mpqsolver::pattern::Q8LayerNormWithQ16VarianceResolver:

Public Member Functions

std::map< luci::CircleNode *, luci::CircleQuantizer::Options::LayerParamresolve (const luci::Module *module) override
 resolve all nodes of LayerNorm pattern as prescribed
 
- Public Member Functions inherited from mpqsolver::pattern::PatternResolver
virtual ~PatternResolver ()=default
 

Detailed Description

Definition at line 39 of file PatternResolver.h.

Member Function Documentation

◆ resolve()

std::map< luci::CircleNode *, LayerParam > Q8LayerNormWithQ16VarianceResolver::resolve ( const luci::Module module)
overridevirtual

resolve all nodes of LayerNorm pattern as prescribed

Implements mpqsolver::pattern::PatternResolver.

Definition at line 270 of file PatternResolver.cpp.

271{
272 if (!module)
273 {
274 throw std::runtime_error("No module for pattern resolving");
275 }
276
277 std::map<luci::CircleNode *, LayerParam> nodes_params;
278 for (size_t idx = 0; idx < module->size(); ++idx)
279 {
280 auto graph = module->graph(idx);
281
282 for (auto node : loco::active_nodes(loco::output_nodes(graph)))
283 {
284 auto const mul = dynamic_cast<luci::CircleMul *>(node);
285 if (!mul)
286 continue;
287
288 LayerNormPattern pattern(mul);
289 if (!pattern.matched())
290 continue;
291
292 // set quantization parameters of recognized pattern
293 for (auto q16_node : pattern.get_q16_nodes())
294 {
295 LayerParam param = {q16_node->name(), "int16", "channel"};
296 nodes_params[q16_node] = param;
297 }
298
299 for (auto q8_node : pattern.get_q8_nodes())
300 {
301 LayerParam param = {q8_node->name(), "uint8", "channel"};
302 nodes_params[q8_node] = param;
303 }
304 }
305 }
306
307 return nodes_params;
308}
MUL in Circle.
Definition CircleMul.h:34
std::set< loco::Node * > active_nodes(const std::vector< loco::Node * > &roots)
Enumerate all the nodes required to compute "roots".
std::vector< Node * > output_nodes(Graph *)
Definition Graph.cpp:101
void mul(const luci_interpreter::RuntimeShape &shape, const ArithmeticParams *params, const int16_t *input1_data, const int16_t *input2_data, int8_t *output_data)

References loco::active_nodes(), luci::CircleQuantizer::Options::LayerParam::name, and loco::output_nodes().


The documentation for this class was generated from the following files: