| 332 | } |
| 333 | |
| 334 | std::vector<float> run_model(LiteNetwork model) { |
| 335 | struct timeval start; |
| 336 | struct timeval end; |
| 337 | gettimeofday(&start, NULL); |
| 338 | LITE_CAPI_CHECK(LITE_forward(model), "run model failed\n"); |
| 339 | LITE_CAPI_CHECK(LITE_wait(model), "wait model failed\n"); |
| 340 | gettimeofday(&end, NULL); |
| 341 | unsigned long diff = |
| 342 | 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec; |
| 343 | printf("every iter use time: %fms\n", ((float)diff) / 1000); |
| 344 | LiteTensor output; |
| 345 | size_t nr_output = 0; |
| 346 | LITE_CAPI_CHECK( |
| 347 | LITE_get_all_output_name(model, &nr_output, NULL), |
| 348 | "get output number failed\n"); |
| 349 | char* output_name_ptr[nr_output]; |
| 350 | LITE_CAPI_CHECK( |
| 351 | LITE_get_all_output_name(model, NULL, (const char**)&output_name_ptr), |
| 352 | "get output name failed\n"); |
| 353 | LITE_CAPI_CHECK( |
| 354 | LITE_get_io_tensor(model, output_name_ptr[0], LITE_OUTPUT, &output), |
| 355 | "get output tensor failed\n"); |
| 356 | size_t length = 0; |
| 357 | LITE_CAPI_CHECK( |
| 358 | LITE_get_tensor_total_size_in_byte(output, &length), |
| 359 | "get output tensor size failed\n"); |
| 360 | float* output_ptr = NULL; |
| 361 | LITE_CAPI_CHECK( |
| 362 | LITE_get_tensor_memory(output, (void**)&output_ptr), |
| 363 | "get output tensor memory failed\n"); |
| 364 | |
| 365 | std::vector<float> output_vec(output_ptr, output_ptr + length / sizeof(float)); |
| 366 | |
| 367 | return output_vec; |
| 368 | } |
| 369 | |
| 370 | std::vector<float> inference(const char* model_path, std::vector<float>& input_data) { |
| 371 | LITE_set_log_level(INFO); |
no test coverage detected