| 64 | } |
| 65 | |
| 66 | void CCBenchmarker::profile() { |
| 67 | size_t nr_input = 0; |
| 68 | LITE_CAPI_CHECK( |
| 69 | LITE_get_all_input_name(m_model, &nr_input, NULL), |
| 70 | "get input number failed\n"); |
| 71 | char* input_name_ptr[nr_input]; |
| 72 | LITE_CAPI_CHECK( |
| 73 | LITE_get_all_input_name(m_model, NULL, (const char**)(&input_name_ptr)), |
| 74 | "get input name failed\n"); |
| 75 | void* input_data[nr_input]; |
| 76 | for (size_t i = 0; i < nr_input; ++i) { |
| 77 | LiteTensor input; |
| 78 | LITE_CAPI_CHECK( |
| 79 | LITE_get_io_tensor(m_model, input_name_ptr[i], LITE_INPUT, &input), |
| 80 | "get input tensor failed\n"); |
| 81 | |
| 82 | size_t length; |
| 83 | LITE_CAPI_CHECK( |
| 84 | LITE_get_tensor_total_size_in_byte(input, &length), |
| 85 | "get input tensor size failed\n"); |
| 86 | input_data[i] = malloc(length); |
| 87 | LITE_CAPI_CHECK( |
| 88 | LITE_reset_tensor_memory(input, input_data[i], length), |
| 89 | "set input ptr failed\n"); |
| 90 | LITE_CAPI_CHECK(LITE_destroy_tensor(input), "destory input tensor"); |
| 91 | } |
| 92 | |
| 93 | for (int i = 0; i < warmup; i++) { |
| 94 | LITE_CAPI_CHECK(LITE_forward(m_model), "run model failed\n"); |
| 95 | LITE_CAPI_CHECK(LITE_wait(m_model), "wait model failed\n"); |
| 96 | } |
| 97 | |
| 98 | struct timeval start; |
| 99 | struct timeval end; |
| 100 | gettimeofday(&start, NULL); |
| 101 | for (int i = 0; i < number; i++) { |
| 102 | LITE_CAPI_CHECK(LITE_forward(m_model), "run model failed\n"); |
| 103 | LITE_CAPI_CHECK(LITE_wait(m_model), "wait model failed\n"); |
| 104 | } |
| 105 | gettimeofday(&end, NULL); |
| 106 | |
| 107 | for (size_t i = 0; i < nr_input; ++i) { |
| 108 | free(input_data[i]); |
| 109 | } |
| 110 | |
| 111 | unsigned long diff = |
| 112 | 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec; |
| 113 | float average_time = ((float)diff) / number / 1000; |
| 114 | if (m_log_level == 3) { |
| 115 | printf("the inference average time=%.3f ms\n", average_time); |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | CCBenchmarker::~CCBenchmarker() { |
| 120 | LITE_CAPI_CHECK(LITE_destroy_network(m_model), "delete model failed\n"); |
no test coverage detected