ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
onert::odc::MinMaxReader Class Reference

#include <MinMaxReader.h>

Public Member Functions

 MinMaxReader (const std::string &filepath)
 
MinMaxVectors readOP (uint32_t model_idx, uint32_t subg_idx, uint32_t op_idx) const
 Returns minmax recording for op {model_idx, subg_idx, op_idx}.
 
MinMaxVectors readInput (uint32_t model_idx, uint32_t subg_idx, uint32_t input_idx) const
 Returns minmax recording for input {model_idx, subg_idx, input_idx}.
 
uint32_t readNumRuns () const
 Returns minmax recording count.
 

Detailed Description

Definition at line 56 of file MinMaxReader.h.

Constructor & Destructor Documentation

◆ MinMaxReader()

onert::odc::MinMaxReader::MinMaxReader ( const std::string &  filepath)

Definition at line 78 of file MinMaxReader.cc.

78 : _filepath(filepath)
79{
80 // DO NOTHING
81}

Member Function Documentation

◆ readInput()

MinMaxVectors onert::odc::MinMaxReader::readInput ( uint32_t  model_idx,
uint32_t  subg_idx,
uint32_t  input_idx 
) const

Returns minmax recording for input {model_idx, subg_idx, input_idx}.

Returns
MinMaxVectors

Definition at line 160 of file MinMaxReader.cc.

162{
163 // Find file to read
164 auto file = std::fopen(_filepath.c_str(), "rb");
165 if (!file)
166 throw std::runtime_error("Cannot open file: " + _filepath);
167
168 checkHeader(file);
169
170 // Read num_run
171 uint32_t num_run = 0;
172 readMMFile(&num_run, sizeof(uint32_t), 1, file, "Cannot read num_run from file");
173
174 MinMaxVectors mmv;
175 float minmax[2];
176 const int64_t data_size = sizeof(float) * 2 + sizeof(uint32_t) * 3;
177
178 // Check num_run overflow
179 if (num_run > std::numeric_limits<uint32_t>::max() / data_size)
180 throw std::runtime_error("num_run overflow");
181
182 for (uint32_t r = 0; r < num_run; ++r)
183 {
184 // Read num of operations and num of inputs
185 uint32_t num_op = 0;
186 readMMFile(&num_op, sizeof(uint32_t), 1, file, "Cannot read num of operations");
187 uint32_t num_input = 0;
188 readMMFile(&num_input, sizeof(uint32_t), 1, file, "Cannot read num of inputs");
189
190 // Check num_op overflow
191 if (num_op > std::numeric_limits<uint32_t>::max() / data_size / num_run)
192 throw std::runtime_error("num_op overflow");
193 // Check num_input overflow
194 if (num_input > std::numeric_limits<uint32_t>::max() / data_size / num_run)
195 throw std::runtime_error("num_input overflow");
196
197 // Skip operation minmax data
198 seekMMFile(file, static_cast<int64_t>(data_size * num_op), SEEK_CUR,
199 "Cannot skip operation minmax data");
200
201 // Find operation
202 for (uint32_t i = 0; i < num_input; ++i)
203 {
204 uint32_t model_id_from_file = 0;
205 uint32_t subg_idx_from_file = 0;
206 uint32_t input_idx_from_file = 0;
207
208 readMMFile(&model_id_from_file, sizeof(uint32_t), 1, file, "Cannot read model_id from file");
209 readMMFile(&subg_idx_from_file, sizeof(uint32_t), 1, file, "Cannot read subg_idx from file");
210 readMMFile(&input_idx_from_file, sizeof(uint32_t), 1, file,
211 "Cannot read input_idx from file");
212
213 if (model_id_from_file == model_idx && subg_idx_from_file == subg_idx &&
214 input_idx_from_file == input_idx)
215 {
216 // Read minmax data
217 readMMFile(minmax, sizeof(float), 2, file, "Cannot read minmax data from file");
218 mmv.min_vector.emplace_back(minmax[0]);
219 mmv.max_vector.emplace_back(minmax[1]);
220
221 // Skip remain input minmax data
222 const uint32_t remain_elem = num_input - i - 1;
223 seekMMFile(file, static_cast<int64_t>(data_size * remain_elem), SEEK_CUR,
224 "Cannot skip remain minmax data from file");
225 break;
226 }
227
228 // Skip minmax data
229 seekMMFile(file, sizeof(float) * 2, SEEK_CUR, "Cannot skip minmax data from file");
230 }
231 }
232
233 std::fclose(file);
234 return mmv;
235}

References onert::odc::MinMaxVectors::max_vector, and onert::odc::MinMaxVectors::min_vector.

◆ readNumRuns()

uint32_t onert::odc::MinMaxReader::readNumRuns ( ) const

Returns minmax recording count.

Returns
minmax recording count

Definition at line 237 of file MinMaxReader.cc.

238{
239 // Find file to read
240 auto file = std::fopen(_filepath.c_str(), "rb");
241 if (!file)
242 throw std::runtime_error("Cannot open file: " + _filepath);
243
244 checkHeader(file);
245
246 // Read num_run
247 uint32_t num_run = 0;
248 readMMFile(&num_run, sizeof(uint32_t), 1, file, "Cannot read num_run from file");
249
250 std::fclose(file);
251
252 return num_run;
253}

Referenced by onert::odc::Quantizer::readyForQuantize().

◆ readOP()

MinMaxVectors onert::odc::MinMaxReader::readOP ( uint32_t  model_idx,
uint32_t  subg_idx,
uint32_t  op_idx 
) const

Returns minmax recording for op {model_idx, subg_idx, op_idx}.

Returns
MinMaxVectors

Definition at line 84 of file MinMaxReader.cc.

85{
86 // Find file to read
87 auto file = std::fopen(_filepath.c_str(), "rb");
88 if (!file)
89 throw std::runtime_error("Cannot open file: " + _filepath);
90
91 checkHeader(file);
92
93 // Read num_run
94 uint32_t num_run = 0;
95 readMMFile(&num_run, sizeof(uint32_t), 1, file, "Cannot read num_run from file");
96
97 MinMaxVectors mmv;
98 float minmax[2];
99 const int64_t data_size = sizeof(float) * 2 + sizeof(uint32_t) * 3;
100
101 // Check num_run overflow
102 if (num_run > std::numeric_limits<uint32_t>::max() / data_size)
103 throw std::runtime_error("num_run overflow");
104
105 for (uint32_t r = 0; r < num_run; ++r)
106 {
107 // Read num of operations and num of inputs
108 uint32_t num_op = 0;
109 readMMFile(&num_op, sizeof(uint32_t), 1, file, "Cannot read num of operations");
110 uint32_t num_input = 0;
111 readMMFile(&num_input, sizeof(uint32_t), 1, file, "Cannot read num of inputs");
112
113 // Check num_op overflow
114 if (num_op > std::numeric_limits<uint32_t>::max() / data_size / num_run)
115 throw std::runtime_error("num_op overflow");
116 // Check num_input overflow
117 if (num_input > std::numeric_limits<uint32_t>::max() / data_size / num_run)
118 throw std::runtime_error("num_input overflow");
119
120 // Find operation
121 for (uint32_t i = 0; i < num_op; ++i)
122 {
123 uint32_t model_id_from_file = 0;
124 uint32_t subg_idx_from_file = 0;
125 uint32_t op_idx_from_file = 0;
126
127 readMMFile(&model_id_from_file, sizeof(uint32_t), 1, file, "Cannot read model_id from file");
128 readMMFile(&subg_idx_from_file, sizeof(uint32_t), 1, file, "Cannot read subg_idx from file");
129 readMMFile(&op_idx_from_file, sizeof(uint32_t), 1, file, "Cannot read op_idx from file");
130
131 if (model_id_from_file == model_idx && subg_idx_from_file == subg_idx &&
132 op_idx_from_file == op_idx)
133 {
134 // Read minmax data
135 readMMFile(minmax, sizeof(float), 2, file, "Cannot read minmax data from file");
136 mmv.min_vector.emplace_back(minmax[0]);
137 mmv.max_vector.emplace_back(minmax[1]);
138
139 // Skip remain operation minmax data
140 const uint32_t remain_elem = num_op - i - 1;
141 seekMMFile(file, static_cast<int64_t>(data_size * remain_elem), SEEK_CUR,
142 "Failed to skip remain minmax data");
143
144 break;
145 }
146
147 // Skip minmax data
148 seekMMFile(file, sizeof(float) * 2, SEEK_CUR, "Failed to skip minmax data");
149 }
150
151 // Skip input minmax data
152 seekMMFile(file, static_cast<int64_t>(data_size * num_input), SEEK_CUR,
153 "Failed to skip input minmax data");
154 }
155
156 std::fclose(file);
157 return mmv;
158}

References onert::odc::MinMaxVectors::max_vector, and onert::odc::MinMaxVectors::min_vector.


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