| 272 | |
| 273 | template <typename T, typename Op> |
| 274 | double time_op(const std::vector<T> & seed, int iters, Op op) { |
| 275 | using clk = std::chrono::steady_clock; |
| 276 | auto t0 = clk::now(); |
| 277 | for (int i = 0; i < iters; i++) { std::vector<T> a = seed; op(a); } |
| 278 | auto t1 = clk::now(); |
| 279 | return double(std::chrono::duration_cast<std::chrono::nanoseconds>(t1 - t0).count()) / double(iters); |
| 280 | } |
| 281 | |
| 282 | template <typename T, typename Op> |
| 283 | double bench_one(const char * name, Pattern pat, const std::vector<T> & seed, int iters, Op op) { |