ONE - On-device Neural Engine
Loading...
Searching...
No Matches
Driver.cpp File Reference
#include "OMInterpreter.h"
#include "arser/arser.h"
#include <stdexcept>
#include <cstdlib>
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
#include <random>

Go to the source code of this file.

Functions

int entry (int argc, char **argv)
 Dump IR for given arguments.
 
int main (int argc, char **argv)
 

Function Documentation

◆ entry()

int entry ( int  argc,
char **  argv 
)

Dump IR for given arguments.

Call example: $ ./build/compiler/encodump/encodump \ –frontend build/compiler/enco/frontend/caffe/libenco_caffe_frontend.so \ –frontend-arg build/compiler/enco/test/caffe/Convolution_003.prototxt \ –frontend-arg build/compiler/enco/test/caffe/Convolution_003.caffemodel

HDF5 layout is like below

GROUP "/" ㄴGROUP "name" ㄴATTRIBUTE "0" ㄴDATA (0): "input_01:0" ㄴATTRIBUTE "1" ㄴDATA (0): "input_02:0" ㄴGROUP "value" ㄴDATASET "0" ㄴDATA ... ㄴDATASET "1" ㄴDATA ...

Definition at line 70 of file Driver.cpp.

71{
72 // Parse command line arguments using arser
74 arser.add_argument("--model")
75 .type(arser::DataType::STR)
76 .required(true)
77 .help("Path to model.circle file");
78 arser.add_argument("--input_prefix")
79 .type(arser::DataType::STR)
80 .help("Prefix for input files (generates random inputs if not provided)");
81 arser.add_argument("--output_prefix").type(arser::DataType::STR).help("Prefix for output files");
82
83 try
84 {
85 arser.parse(argc, argv);
86 }
87 catch (const std::runtime_error &err)
88 {
89 std::cerr << err.what() << std::endl;
90 std::cerr << arser;
91 return EXIT_FAILURE;
92 }
93
94 const auto filename = arser.get<std::string>("--model");
95 std::string input_prefix;
96 std::string output_prefix;
97
98 if (arser["--input_prefix"])
99 {
100 input_prefix = arser.get<std::string>("--input_prefix");
101 }
102 if (arser["--output_prefix"])
103 {
104 output_prefix = arser.get<std::string>("--output_prefix");
105 }
106 const bool auto_input = !arser["--input_prefix"];
107 int32_t num_inputs = 1; // Default number of inputs
108
109 std::ifstream file(filename, std::ios::binary | std::ios::in);
110 if (!file.good())
111 {
112 std::string errmsg = "Failed to open file";
113 throw std::runtime_error(errmsg.c_str());
114 }
115
116 file.seekg(0, std::ios::end);
117 auto fileSize = file.tellg();
118 file.seekg(0, std::ios::beg);
119
120 // reserve capacity
121 DataBuffer model_data(fileSize);
122
123 // read the data
124 file.read(model_data.data(), fileSize);
125 if (file.fail())
126 {
127 std::string errmsg = "Failed to read file";
128 throw std::runtime_error(errmsg.c_str());
129 }
130
131 // Create interpreter.
134 interpreter.importModel(model_data.data(), config);
135
136 num_inputs = interpreter.getNumberOfInputs(); // To initialize input buffers
137
138 // Set input.
139 // Data for n'th input is read from ${input_prefix}n
140 // (ex: Add.circle.input0, Add.circle.input1 ..)
141 int num_inference = 1;
142 for (int j = 0; j < num_inference; ++j)
143 {
144 interpreter.reset();
145 interpreter.allocateInputs();
146 for (int32_t i = 0; i < num_inputs; i++)
147 {
148 auto input_data = reinterpret_cast<char *>(interpreter.getInputDataAt(i));
149 size_t input_size = interpreter.getInputSizeAt(i);
150
151 if (auto_input)
152 {
153 generateRandomData(input_data, input_size);
154 }
155 else
156 {
157 readDataFromFile(input_prefix + std::to_string(i), input_data, input_size);
158 }
159 }
160
161 // Do inference.
162 interpreter.run(config);
163 }
164
165 // Get output.
166 int num_outputs = 1;
167 for (int i = 0; i < num_outputs; i++)
168 {
169 auto data = interpreter.getOutputDataAt(i);
170 size_t output_size = interpreter.getOutputSizeAt(i);
171
172 if (arser["--output_prefix"])
173 {
174 writeDataToFile(output_prefix + std::to_string(i), reinterpret_cast<char *>(data),
175 output_size);
176 }
177 // Otherwise, output remains in interpreter memory
178 }
179 interpreter.reset();
180 return EXIT_SUCCESS;
181}
Definition arser.h:39
list input_data
Definition infer.py:29
model_data
Definition infer.py:82
void writeDataToFile(const std::string &file_path, const std::string &data)
write data to file_path
void readDataFromFile(const std::string &filename, std::vector< char > &data, size_t data_size)
Definition Utils.cpp:65
std::vector< char > DataBuffer

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 200 of file Driver.cpp.

201{
202 // NOTE main does not catch internal exceptions for debug build to make it easy to
203 // check the stacktrace with a debugger
204 return entry(argc, argv);
205}
int entry(int argc, char **argv)
Definition Driver.cpp:29

References entry().