| 203 | } |
| 204 | template <typename Opr> |
| 205 | PerformanceResult proxy_cv_kernel( |
| 206 | TensorNDArray tensor_array, RunCvHelper<Opr>& runner, void* func_ptr, |
| 207 | const BenchmarkOption& benchmark_option, OutputScope output_idx) { |
| 208 | megdnn::SmallVector<TinyMat> mat_vec; |
| 209 | auto temp_tensor = runner.on_tensor_before(tensor_array); |
| 210 | for (auto& tensor : temp_tensor) { |
| 211 | mat_vec.push_back(tensor2TinyMat(tensor)); |
| 212 | } |
| 213 | runner.run_cv_kernel(mat_vec, func_ptr); |
| 214 | if (benchmark_option.valid_megcc_performance) { |
| 215 | if (benchmark_option.warmup_iter > 0) { |
| 216 | for (int i = 0; i < benchmark_option.warmup_iter; ++i) { |
| 217 | runner.run_cv_kernel(mat_vec, func_ptr); |
| 218 | } |
| 219 | } |
| 220 | mgb_assert(benchmark_option.test_iter > 0); |
| 221 | megcc::test::Timer timer; |
| 222 | timer.start(); |
| 223 | for (int i = 0; i < benchmark_option.test_iter; ++i) { |
| 224 | runner.run_cv_kernel(mat_vec, func_ptr); |
| 225 | } |
| 226 | |
| 227 | timer.stop(); |
| 228 | PerformanceResult res; |
| 229 | res.valid = true; |
| 230 | res.kernel_time_ms = timer.get_time_in_us() / 1e3 / benchmark_option.test_iter; |
| 231 | return res; |
| 232 | } |
| 233 | return {}; |
| 234 | } |
| 235 | |
| 236 | template <typename Opr> |
| 237 | PerformanceResult call_kernel_cv( |
no test coverage detected