| 144 | struct Row { const char * name; double ns; }; |
| 145 | |
| 146 | void run_width(size_t width) |
| 147 | { |
| 148 | const size_t pairs = 1024; // L1-friendly working set: pairs * 2 * width |
| 149 | const int iters = 5000; |
| 150 | |
| 151 | verify("chunked256", bs_chunked256, width); |
| 152 | verify("chunked64", bs_chunked64, width); |
| 153 | if (width >= 8 && (width % 8) == 0) verify("words64", bs_words64, width); |
| 154 | verify("sized", bs_sized, width); |
| 155 | verify("hybrid", bs_hybrid, width); |
| 156 | |
| 157 | double r_chunked256 = time_op(bs_chunked256, width, pairs, iters); |
| 158 | double r_chunked64 = time_op(bs_chunked64, width, pairs, iters); |
| 159 | double r_words64 = (width >= 8 && (width % 8) == 0) ? time_op(bs_words64, width, pairs, iters) : -1.0; |
| 160 | double r_sized = time_op(bs_sized, width, pairs, iters); |
| 161 | double r_hybrid = time_op(bs_hybrid, width, pairs, iters); |
| 162 | |
| 163 | std::printf("| %4zu | %10.2f | %10.2f | ", width, r_chunked256, r_chunked64); |
| 164 | if (r_words64 < 0.0) std::printf(" n/a | "); |
| 165 | else std::printf("%10.2f | ", r_words64); |
| 166 | std::printf("%10.2f | %10.2f |\n", r_sized, r_hybrid); |
| 167 | } |
| 168 | |
| 169 | } // anonymous |
| 170 | |