| 199 | } |
| 200 | |
| 201 | void CircleEvalDiff::evalDiff(void) const |
| 202 | { |
| 203 | auto first_input_loader = circle_eval_diff::makeDataLoader( |
| 204 | _ctx->first_input_data_path, _ctx->input_format, ::inputs_of(_first_module.get())); |
| 205 | auto second_input_loader = circle_eval_diff::makeDataLoader( |
| 206 | _ctx->second_input_data_path, _ctx->input_format, ::inputs_of(_second_module.get())); |
| 207 | |
| 208 | for (uint32_t data_idx = 0; data_idx < first_input_loader->size(); data_idx++) |
| 209 | { |
| 210 | std::cout << "Evaluating " << data_idx << "'th data" << std::endl; |
| 211 | |
| 212 | auto first_data = first_input_loader->get(data_idx); |
| 213 | auto second_data = second_input_loader->get(data_idx); |
| 214 | |
| 215 | auto first_output = interpret(_first_module.get(), first_data); |
| 216 | auto second_output = interpret(_second_module.get(), second_data); |
| 217 | |
| 218 | for (auto &metric : _metrics) |
| 219 | { |
| 220 | metric->accumulate(first_output, second_output); |
| 221 | } |
| 222 | |
| 223 | if (_ctx.get()->output_prefix.empty()) |
| 224 | continue; |
| 225 | |
| 226 | for (uint32_t i = 0; i < first_output.size(); i++) |
| 227 | { |
| 228 | auto out = first_output[i]; |
| 229 | writeDataToFile(_ctx.get()->output_prefix + "." + std::to_string(data_idx) + ".first.output" + |
| 230 | std::to_string(i), |
| 231 | (char *)(out->buffer()), out->byte_size()); |
| 232 | } |
| 233 | for (uint32_t i = 0; i < second_output.size(); i++) |
| 234 | { |
| 235 | auto out = second_output[i]; |
| 236 | writeDataToFile(_ctx.get()->output_prefix + "." + std::to_string(data_idx) + |
| 237 | ".second.output" + std::to_string(i), |
| 238 | (char *)(out->buffer()), out->byte_size()); |
| 239 | } |
| 240 | } |
| 241 | |
| 242 | for (auto &metric : _metrics) |
| 243 | { |
| 244 | std::cout << metric.get() << std::endl; |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | } // namespace circle_eval_diff |
no test coverage detected