diff --git a/main.cpp b/main.cpp index 7ee2ea8..301817e 100644 --- a/main.cpp +++ b/main.cpp @@ -9,7 +9,6 @@ #include #ifndef BENCHMARK -// Benchmarking is disabled by default. #define BENCHMARK 0 #endif @@ -20,20 +19,25 @@ #ifdef __x86_64__ #include "./headers/tsc_x86.h" #include -#define TRASH_BUFFER_SIZE (16ULL * 1024 * 1024 * 2) // Size of L3 cache : 16MB +#define TRASH_BUFFER_SIZE (16ULL * 1024 * 1024 * 2) // 2x L3 (~16MB) on the x86 machine we use for measurements #define PAGE_SIZE 4096 #endif #ifdef __aarch64__ #include "./headers/kperf.h" #include -#define TRASH_BUFFER_SIZE (1502838784ULL * 2) // Size of SLC on M3 pro chips : 1.5GB +#define TRASH_BUFFER_SIZE (1502838784ULL * 2) // 2x SLC (~1.5GB) on M3 Pro #define PAGE_SIZE 16384 #endif #define N_OBSTACLES 2 -#define WARMUP_ITERS 5 -#define NUM_REPS 11 + +// Benchmark parameters (mostly copied from mvm.c in hw1) +#define WARMUP_ITERS 3 +#define NUM_REPS 15 +#define NUM_RUNS 1 +#define CYCLES_REQUIRED 1e8 +#define MAX_NUM_RUNS (1 << 14) // Flushes caches by streaming reads through a large persistent buffer. long long flush_cache() { @@ -54,7 +58,7 @@ long long flush_cache() { long long acc = 0; for (size_t i = 0; i < TRASH_BUFFER_SIZE; i += CACHE_BLOCK_SIZE) { - // Access one byte per cache block is enough + // Access one byte per cache block is enough to populate the entire block acc += trash_buffer[i]; } @@ -90,12 +94,11 @@ int main(int argc, const char *argv[]) { int n_iter = atoi(argv[2]); if (n_p <= 0) { - printf("Error: must be a positive integer, got '%s' instead\n", argv[1]); + printf("Error: must be a positive integer, got '%s'\n", argv[1]); return 1; } - if (n_iter <= 0) { - printf("Error: must be a positive integer, got '%s' instead\n", argv[2]); + printf("Error: must be a positive integer, got '%s'\n", argv[2]); return 1; } @@ -116,29 +119,35 @@ int main(int argc, const char *argv[]) { struct performance_counters startperf, endperf; #endif - // Warmup runs are not measured. + // Warmup runs, to bring caches, predictors, frequency to steady state. These are not measured. // Each run gets a fresh initialized state because run_simulation mutates the // pedestrians and board state. for (int i = 0; i < WARMUP_ITERS; i++) { Pedestrian *P = init_pedestrians(n_p); Board board = init_board_without_obstacles(); - run_simulation(P, board, n_p, n_iter, nullptr); - delete[] P; } - // Store the cycle count of each measured repetition. - // The median is then used as the final timing result. - std::vector cycles_v; - cycles_v.reserve(NUM_REPS); - - for (int i = 0; i < NUM_REPS; i++) { + // Calibration: finds num_runs such that one batch runs for at least + // CYCLES_REQUIRED cycles. A long batch keeps makes the timer and other + // noise overhead, negligible relative to the kernel execution cost we're + // actually trying to measure. + // + // Skipped when ROOFLINE is enabled: cold-cache measurements need + // exactly one timed simulation per batch, otherwise only the first + // call starts cold and subsequent calls measure warm-cache behavior. + // We can use large enough inputs so a single call already exceeds CYCLES_REQUIRED, + // when measuring for roofline plot. + // Note: we implemented the calibration exactly as it is done in mvm.c from hw1, we also + // used the same values for NUM_RUNS, etc + int num_runs = NUM_RUNS; +#if !ROOFLINE + while (num_runs < MAX_NUM_RUNS) { Pedestrian *P = init_pedestrians(n_p); Board board = init_board_without_obstacles(); -#if ROOFLINE - trash_value = flush_cache(); -#endif + + long double cycles; #ifdef __x86_64__ myInt64 start = start_tsc(); @@ -148,26 +157,69 @@ int main(int argc, const char *argv[]) { startperf = kperf_get_counters(); #endif - // Disable CSV dumping during benchmarking to avoid measuring file I/O - // overhead. Initialization is also excluded from the measured region. - run_simulation(P, board, n_p, n_iter, nullptr); + for (int j = 0; j < num_runs; j++) { + run_simulation(P, board, n_p, n_iter, nullptr); + } #ifdef __x86_64__ - long double cycles = stop_tsc(start); + cycles = (long double)stop_tsc(start); #endif #ifdef __aarch64__ endperf = kperf_get_counters(); - long double cycles = endperf.cycles - startperf.cycles; + cycles = (long double)(endperf.cycles - startperf.cycles); #endif delete[] P; + if (cycles >= CYCLES_REQUIRED) + break; + num_runs *= 2; + } +#endif + + // Store the cycle count of each measured repetition. + // The median is then used as the final timing result. + std::vector cycles_v; + cycles_v.reserve(NUM_REPS); + + // Measurement phase + for (int i = 0; i < NUM_REPS; i++) { + Pedestrian *P = init_pedestrians(n_p); + Board board = init_board_without_obstacles(); + +#if ROOFLINE + trash_value = flush_cache(); +#endif + +#ifdef __x86_64__ + myInt64 start = start_tsc(); +#endif +#ifdef __aarch64__ + startperf = kperf_get_counters(); +#endif + + for (int j = 0; j < num_runs; j++) { + // Disable CSV dumping during benchmarking to avoid measuring file I/O + // overhead. Initialization is also excluded from the measured region. + + run_simulation(P, board, n_p, n_iter, nullptr); + } + +#ifdef __x86_64__ + long double cycles = (long double)stop_tsc(start) / num_runs; +#endif +#ifdef __aarch64__ + endperf = kperf_get_counters(); + long double cycles = (long double)(endperf.cycles - startperf.cycles) / num_runs; +#endif + + delete[] P; cycles_v.push_back(cycles); } - // Use the median cycle count to reduce the effect of noisy measurements. std::sort(cycles_v.begin(), cycles_v.end()); + // Use the median cycle count to reduce the effect of noisy measurements. long double T = cycles_v[NUM_REPS / 2]; #else @@ -189,14 +241,11 @@ int main(int argc, const char *argv[]) { // The total work W(n) is estimated from the number of additions, // multiplications, divisions, square roots, and exponentials performed by the // simulation kernels. + long long add_count_per_iter = n_p * (4 + (n_p - 1) * 14 + N_OBSTACLES * 12) + n_p * 7; - long long mult_count_per_iter = n_p * (4 + (n_p - 1) * 23 + N_OBSTACLES * 18) + n_p * 16; - long long div_count_per_iter = n_p * ((n_p - 1) * 1 + N_OBSTACLES * 1) + n_p * 2; - long long sqrt_count_per_iter = n_p * ((n_p - 1) * 4 + N_OBSTACLES * 2) + n_p * 3; - long long exp_count_per_iter = n_p * ((n_p - 1) * 1 + N_OBSTACLES * 1); long double W_per_iter = add_count_per_iter * cost_add + mult_count_per_iter * cost_mult + div_count_per_iter * cost_div + sqrt_count_per_iter * cost_sqrt + exp_count_per_iter * cost_exp; @@ -204,6 +253,7 @@ int main(int argc, const char *argv[]) { // Estimated memory traffic per iteration. // TODO: refine this model to account for actual memory accesses, cache reuse, // and the full interaction loop. + long long Q_per_iter = sizeof(Pedestrian) * n_p + sizeof(Obstacle) * N_OBSTACLES; // Operational intensity: @@ -212,9 +262,8 @@ int main(int argc, const char *argv[]) { // // where W is estimated work in flops and Q is estimated memory traffic in // bytes. - long double I = W_per_iter / Q_per_iter; - // Total estimated work over all iterations. + long double I = W_per_iter / Q_per_iter; long double W = W_per_iter * n_iter; // Performance in estimated flops per cycle. diff --git a/measurements/variant_avx512_1/x86/1.log b/measurements/variant_avx512_1/x86/1.log new file mode 100644 index 0000000..35e1242 --- /dev/null +++ b/measurements/variant_avx512_1/x86/1.log @@ -0,0 +1,42 @@ +rm -f main_* sizes run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o +/usr/bin/g++ main.cpp ./variants/variant_avx512_1.cpp -o main_avx512_1 -O3 -march=native -std=c++23 -Wall -Wextra -flto -lsleef -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 63060640.00 cycles +P(n): 2.93 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 215114100.00 cycles +P(n): 3.39 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 744500640.00 cycles +P(n): 3.89 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 4480783600.00 cycles +P(n): 4.03 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 16918374740.00 cycles +P(n): 4.26 flops/cycle + diff --git a/measurements/variant_avx512_1/x86/2.log b/measurements/variant_avx512_1/x86/2.log new file mode 100644 index 0000000..cfa4c9b --- /dev/null +++ b/measurements/variant_avx512_1/x86/2.log @@ -0,0 +1,42 @@ +rm -f main_* sizes run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o +/usr/bin/g++ main.cpp ./variants/variant_avx512_1.cpp -o main_avx512_1 -O3 -march=native -std=c++23 -Wall -Wextra -flto -lsleef -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 62465750.00 cycles +P(n): 2.95 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 213111220.00 cycles +P(n): 3.42 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 749193840.00 cycles +P(n): 3.87 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 4481202620.00 cycles +P(n): 4.03 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 17063409500.00 cycles +P(n): 4.22 flops/cycle + diff --git a/measurements/variant_avx512_1/x86/3.log b/measurements/variant_avx512_1/x86/3.log new file mode 100644 index 0000000..e4c40f2 --- /dev/null +++ b/measurements/variant_avx512_1/x86/3.log @@ -0,0 +1,42 @@ +rm -f main_* sizes run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o +/usr/bin/g++ main.cpp ./variants/variant_avx512_1.cpp -o main_avx512_1 -O3 -march=native -std=c++23 -Wall -Wextra -flto -lsleef -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 62186140.00 cycles +P(n): 2.97 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 214174540.00 cycles +P(n): 3.40 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 739779420.00 cycles +P(n): 3.92 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 4486436580.00 cycles +P(n): 4.02 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 16950058060.00 cycles +P(n): 4.25 flops/cycle + diff --git a/measurements/variant_baseline/x86/1.log b/measurements/variant_baseline/x86/1.log new file mode 100644 index 0000000..fb6acca --- /dev/null +++ b/measurements/variant_baseline/x86/1.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_baseline.cpp -o main_baseline +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 149741420.00 cycles +P(n): 1.23 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 590173880.00 cycles +P(n): 1.24 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2394306640.00 cycles +P(n): 1.21 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15758554280.00 cycles +P(n): 1.15 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 61911299420.00 cycles +P(n): 1.16 flops/cycle diff --git a/measurements/variant_baseline/x86/2.log b/measurements/variant_baseline/x86/2.log new file mode 100644 index 0000000..d9b8c1a --- /dev/null +++ b/measurements/variant_baseline/x86/2.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_baseline.cpp -o main_baseline +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 145460860.00 cycles +P(n): 1.27 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 589429960.00 cycles +P(n): 1.24 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2395474680.00 cycles +P(n): 1.21 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15694979780.00 cycles +P(n): 1.15 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 61883782540.00 cycles +P(n): 1.16 flops/cycle diff --git a/measurements/variant_baseline/x86/3.log b/measurements/variant_baseline/x86/3.log new file mode 100644 index 0000000..d528e30 --- /dev/null +++ b/measurements/variant_baseline/x86/3.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_baseline.cpp -o main_baseline +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 147463240.00 cycles +P(n): 1.25 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 583811800.00 cycles +P(n): 1.25 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2406765140.00 cycles +P(n): 1.20 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15769461780.00 cycles +P(n): 1.14 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 61870155280.00 cycles +P(n): 1.17 flops/cycle diff --git a/measurements/variant_branchless/x86/1.log b/measurements/variant_branchless/x86/1.log new file mode 100644 index 0000000..eb66486 --- /dev/null +++ b/measurements/variant_branchless/x86/1.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_branchless.cpp -o main_branchless +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 164628520.00 cycles +P(n): 1.12 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 668671300.00 cycles +P(n): 1.09 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2797909140.00 cycles +P(n): 1.04 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 18473174460.00 cycles +P(n): 0.98 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 72557284580.00 cycles +P(n): 0.99 flops/cycle diff --git a/measurements/variant_branchless/x86/2.log b/measurements/variant_branchless/x86/2.log new file mode 100644 index 0000000..2004143 --- /dev/null +++ b/measurements/variant_branchless/x86/2.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_branchless.cpp -o main_branchless +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 163598600.00 cycles +P(n): 1.13 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 672653360.00 cycles +P(n): 1.08 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2815032380.00 cycles +P(n): 1.03 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 18559971420.00 cycles +P(n): 0.97 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 72285399260.00 cycles +P(n): 1.00 flops/cycle diff --git a/measurements/variant_branchless/x86/3.log b/measurements/variant_branchless/x86/3.log new file mode 100644 index 0000000..39a346c --- /dev/null +++ b/measurements/variant_branchless/x86/3.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_branchless.cpp -o main_branchless +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 165200000.00 cycles +P(n): 1.12 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 686277160.00 cycles +P(n): 1.06 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2805241940.00 cycles +P(n): 1.03 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 18557266380.00 cycles +P(n): 0.97 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 72552877660.00 cycles +P(n): 0.99 flops/cycle diff --git a/measurements/variant_branchless_sqrtfree/x86/1.log b/measurements/variant_branchless_sqrtfree/x86/1.log new file mode 100644 index 0000000..42a1ebf --- /dev/null +++ b/measurements/variant_branchless_sqrtfree/x86/1.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_branchless_sqrtfree.cpp -o main_branchless_sqrtfree +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 160027720.00 cycles +P(n): 1.15 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 632178740.00 cycles +P(n): 1.15 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2477854340.00 cycles +P(n): 1.17 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15380682320.00 cycles +P(n): 1.17 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 61619267280.00 cycles +P(n): 1.17 flops/cycle diff --git a/measurements/variant_ilp/x86/1.log b/measurements/variant_ilp/x86/1.log new file mode 100644 index 0000000..8444b8e --- /dev/null +++ b/measurements/variant_ilp/x86/1.log @@ -0,0 +1,2 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DBENCHMARK=1 main.cpp ./variants/variant_ilp.cpp -o main_ilp diff --git a/measurements/variant_inlining_7/x86/1.log b/measurements/variant_inlining_7/x86/1.log new file mode 100644 index 0000000..c66d859 --- /dev/null +++ b/measurements/variant_inlining_7/x86/1.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7.cpp -o main_inlining_7 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 131794980.00 cycles +P(n): 1.40 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 527605420.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2166884360.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14615797280.00 cycles +P(n): 1.23 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 57677070100.00 cycles +P(n): 1.25 flops/cycle diff --git a/measurements/variant_inlining_7/x86/2.log b/measurements/variant_inlining_7/x86/2.log new file mode 100644 index 0000000..17daa0a --- /dev/null +++ b/measurements/variant_inlining_7/x86/2.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7.cpp -o main_inlining_7 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 132693220.00 cycles +P(n): 1.39 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 527980800.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2161999920.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14567319680.00 cycles +P(n): 1.24 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 57637351660.00 cycles +P(n): 1.25 flops/cycle diff --git a/measurements/variant_inlining_7/x86/3.log b/measurements/variant_inlining_7/x86/3.log new file mode 100644 index 0000000..d163b88 --- /dev/null +++ b/measurements/variant_inlining_7/x86/3.log @@ -0,0 +1,41 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7.cpp -o main_inlining_7 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 132083640.00 cycles +P(n): 1.40 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 526775360.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2160050540.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14605475200.00 cycles +P(n): 1.24 flops/cycle + +=== N_P=1000 N_ITER=1000 === +W(n) per iteration: 72090000.00 flops +Q(n) per iteration: 128112 bytes +I(n): 562.71 flops/byte +W(n): 72090000000.00 flops +T(n): 57692748180.00 cycles +P(n): 1.25 flops/cycle diff --git a/measurements/variant_inlining_7_SoA/x86/1.log b/measurements/variant_inlining_7_SoA/x86/1.log new file mode 100644 index 0000000..503a4c9 --- /dev/null +++ b/measurements/variant_inlining_7_SoA/x86/1.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_SoA.cpp -o main_inlining_7_SoA +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 174279560.00 cycles +P(n): 1.06 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 771260820.00 cycles +P(n): 0.95 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 3263227240.00 cycles +P(n): 0.89 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 19848792000.00 cycles +P(n): 0.91 flops/cycle diff --git a/measurements/variant_inlining_7_SoA/x86/2.log b/measurements/variant_inlining_7_SoA/x86/2.log new file mode 100644 index 0000000..fbd6dae --- /dev/null +++ b/measurements/variant_inlining_7_SoA/x86/2.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_SoA.cpp -o main_inlining_7_SoA +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 174641860.00 cycles +P(n): 1.06 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 769502860.00 cycles +P(n): 0.95 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 3259749920.00 cycles +P(n): 0.89 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 19799476220.00 cycles +P(n): 0.91 flops/cycle diff --git a/measurements/variant_inlining_7_SoA/x86/3.log b/measurements/variant_inlining_7_SoA/x86/3.log new file mode 100644 index 0000000..a27a0be --- /dev/null +++ b/measurements/variant_inlining_7_SoA/x86/3.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_SoA.cpp -o main_inlining_7_SoA +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 174646140.00 cycles +P(n): 1.06 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 771133380.00 cycles +P(n): 0.95 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 3262481280.00 cycles +P(n): 0.89 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 19817595500.00 cycles +P(n): 0.91 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2/x86/1.log b/measurements/variant_inlining_7_symmetry_2/x86/1.log new file mode 100644 index 0000000..4b2a314 --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2/x86/1.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2.cpp -o main_inlining_7_symmetry_2 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 134217900.00 cycles +P(n): 1.37 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 539909700.00 cycles +P(n): 1.35 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2204928560.00 cycles +P(n): 1.31 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15229802740.00 cycles +P(n): 1.18 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2/x86/2.log b/measurements/variant_inlining_7_symmetry_2/x86/2.log new file mode 100644 index 0000000..e58a158 --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2/x86/2.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2.cpp -o main_inlining_7_symmetry_2 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 134590240.00 cycles +P(n): 1.37 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 537772020.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2216669180.00 cycles +P(n): 1.31 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15269978860.00 cycles +P(n): 1.18 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2/x86/3.log b/measurements/variant_inlining_7_symmetry_2/x86/3.log new file mode 100644 index 0000000..ff43b3b --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2/x86/3.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2.cpp -o main_inlining_7_symmetry_2 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 133252040.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 533142280.00 cycles +P(n): 1.37 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2200045220.00 cycles +P(n): 1.32 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15171854800.00 cycles +P(n): 1.19 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/1.log b/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/1.log new file mode 100644 index 0000000..89e0317 --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/1.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2_ilp_1.cpp -o main_inlining_7_symmetry_2_ilp_1 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 134117580.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 529885740.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2158215760.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14658868260.00 cycles +P(n): 1.23 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/2.log b/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/2.log new file mode 100644 index 0000000..199adb2 --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/2.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2_ilp_1.cpp -o main_inlining_7_symmetry_2_ilp_1 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 135847100.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 531086160.00 cycles +P(n): 1.37 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2149640340.00 cycles +P(n): 1.35 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14662439140.00 cycles +P(n): 1.23 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/3.log b/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/3.log new file mode 100644 index 0000000..821904e --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2_ilp_1/x86/3.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2_ilp_1.cpp -o main_inlining_7_symmetry_2_ilp_1 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 132982240.00 cycles +P(n): 1.39 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 530176140.00 cycles +P(n): 1.38 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2162889920.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14697507480.00 cycles +P(n): 1.23 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/1.log b/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/1.log new file mode 100644 index 0000000..759d680 --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/1.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2_ilp_2.cpp -o main_inlining_7_symmetry_2_ilp_2 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 138339020.00 cycles +P(n): 1.33 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 534997480.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2168912380.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14986758980.00 cycles +P(n): 1.20 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/2.log b/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/2.log new file mode 100644 index 0000000..2fa4593 --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/2.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2_ilp_2.cpp -o main_inlining_7_symmetry_2_ilp_2 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 135244420.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 537453160.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2175781640.00 cycles +P(n): 1.33 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14932133120.00 cycles +P(n): 1.21 flops/cycle diff --git a/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/3.log b/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/3.log new file mode 100644 index 0000000..63aedee --- /dev/null +++ b/measurements/variant_inlining_7_symmetry_2_ilp_2/x86/3.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_inlining_7_symmetry_2_ilp_2.cpp -o main_inlining_7_symmetry_2_ilp_2 +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 135881620.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 534853360.00 cycles +P(n): 1.36 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2166176600.00 cycles +P(n): 1.34 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 14773516340.00 cycles +P(n): 1.22 flops/cycle diff --git a/measurements/variant_lut_exp/x86/1.log b/measurements/variant_lut_exp/x86/1.log new file mode 100644 index 0000000..9e35da3 --- /dev/null +++ b/measurements/variant_lut_exp/x86/1.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_lut_exp.cpp -o main_lut_exp +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 145567620.00 cycles +P(n): 1.27 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 569315980.00 cycles +P(n): 1.28 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2268145640.00 cycles +P(n): 1.28 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15227306960.00 cycles +P(n): 1.19 flops/cycle diff --git a/measurements/variant_lut_exp/x86/2.log b/measurements/variant_lut_exp/x86/2.log new file mode 100644 index 0000000..a572a4e --- /dev/null +++ b/measurements/variant_lut_exp/x86/2.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_lut_exp.cpp -o main_lut_exp +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 141259480.00 cycles +P(n): 1.31 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 570826340.00 cycles +P(n): 1.28 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2281692040.00 cycles +P(n): 1.27 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15242958120.00 cycles +P(n): 1.18 flops/cycle diff --git a/measurements/variant_lut_exp/x86/3.log b/measurements/variant_lut_exp/x86/3.log new file mode 100644 index 0000000..e51831f --- /dev/null +++ b/measurements/variant_lut_exp/x86/3.log @@ -0,0 +1,33 @@ +rm -f main_* sizes run_tests *.o *.s +/usr/bin/g++ -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1 main.cpp ./variants/variant_lut_exp.cpp -o main_lut_exp +=== N_P=50 N_ITER=1000 === +W(n) per iteration: 184500.00 flops +Q(n) per iteration: 6512 bytes +I(n): 28.33 flops/byte +W(n): 184500000.00 flops +T(n): 140807980.00 cycles +P(n): 1.31 flops/cycle + +=== N_P=100 N_ITER=1000 === +W(n) per iteration: 729000.00 flops +Q(n) per iteration: 12912 bytes +I(n): 56.46 flops/byte +W(n): 729000000.00 flops +T(n): 563063780.00 cycles +P(n): 1.29 flops/cycle + +=== N_P=200 N_ITER=1000 === +W(n) per iteration: 2898000.00 flops +Q(n) per iteration: 25712 bytes +I(n): 112.71 flops/byte +W(n): 2898000000.00 flops +T(n): 2268612980.00 cycles +P(n): 1.28 flops/cycle + +=== N_P=500 N_ITER=1000 === +W(n) per iteration: 18045000.00 flops +Q(n) per iteration: 64112 bytes +I(n): 281.46 flops/byte +W(n): 18045000000.00 flops +T(n): 15237244940.00 cycles +P(n): 1.18 flops/cycle