| 556 | } |
| 557 | |
| 558 | int mainEntryExampleAverage(int argc, char ** argv) |
| 559 | { |
| 560 | size_t size = argc > 1 ? std::stoull(argv[1]) : 1000000000; |
| 561 | size_t variant = argc > 2 ? std::stoull(argv[2]) : 1; |
| 562 | |
| 563 | PODArray<UInt8> keys(size); |
| 564 | PODArray<Float> values(size); |
| 565 | |
| 566 | /// Fill source data |
| 567 | for (size_t i = 0; i < size; ++i) |
| 568 | { |
| 569 | keys[i] = static_cast<UInt8>(std::countr_zero(i + 1)); /// Make keys to have just slightly more realistic distribution. |
| 570 | values[i] = 1234.5; /// The distribution of values does not affect execution speed. |
| 571 | } |
| 572 | |
| 573 | /// Aggregate |
| 574 | Stopwatch watch; |
| 575 | Float res{}; |
| 576 | |
| 577 | switch (variant) |
| 578 | { |
| 579 | case 0: res = baseline(keys, values); break; |
| 580 | case 1: res = implicit_zero(keys, values); break; |
| 581 | case 2: res = calculated_size(keys, values); break; |
| 582 | case 3: res = implicit_zero_and_calculated_size(keys, values); break; |
| 583 | case 4: res = init_out_of_the_loop(keys, values); break; |
| 584 | case 5: res = embedded_states(keys, values); break; |
| 585 | case 6: res = simple_lookup_table(keys, values); break; |
| 586 | case 7: res = simple_lookup_table_embedded_states(keys, values); break; |
| 587 | case 8: res = microsort<1>(keys, values); break; |
| 588 | case 9: res = baseline_baseline(keys, values); break; |
| 589 | case 10: res = buffered(keys, values); break; |
| 590 | case 11: res = really_unrolled<1>(keys, values); break; |
| 591 | case 12: res = another_unrolled_x4(keys, values); break; |
| 592 | |
| 593 | case 32: res = unrolled<2>(keys, values); break; |
| 594 | case 34: res = unrolled<4>(keys, values); break; |
| 595 | case 36: res = unrolled<6>(keys, values); break; |
| 596 | case 38: res = unrolled<8>(keys, values); break; |
| 597 | case 316: res = unrolled<16>(keys, values); break; |
| 598 | |
| 599 | case 52: res = embedded_states_unrolled<2>(keys, values); break; |
| 600 | case 54: res = embedded_states_unrolled<4>(keys, values); break; |
| 601 | case 56: res = embedded_states_unrolled<6>(keys, values); break; |
| 602 | case 58: res = embedded_states_unrolled<8>(keys, values); break; |
| 603 | case 516: res = embedded_states_unrolled<16>(keys, values); break; |
| 604 | |
| 605 | case 62: res = simple_lookup_table_unrolled<2>(keys, values); break; |
| 606 | case 64: res = simple_lookup_table_unrolled<4>(keys, values); break; |
| 607 | case 66: res = simple_lookup_table_unrolled<6>(keys, values); break; |
| 608 | case 68: res = simple_lookup_table_unrolled<8>(keys, values); break; |
| 609 | case 616: res = simple_lookup_table_unrolled<16>(keys, values); break; |
| 610 | |
| 611 | case 72: res = simple_lookup_table_embedded_states_unrolled<2>(keys, values); break; |
| 612 | case 74: res = simple_lookup_table_embedded_states_unrolled<4>(keys, values); break; |
| 613 | case 76: res = simple_lookup_table_embedded_states_unrolled<6>(keys, values); break; |
| 614 | case 78: res = simple_lookup_table_embedded_states_unrolled<8>(keys, values); break; |
| 615 | case 716: res = simple_lookup_table_embedded_states_unrolled<16>(keys, values); break; |
nothing calls this directly
no test coverage detected