Perf plot

This commit is contained in:
[Quy Anh] «Elliot» Nguyen
2026-06-18 11:59:50 +02:00
committed by Linus Baumberger
parent ca969564a6
commit e7af3103e8
153 changed files with 22042 additions and 24220 deletions
@@ -166,23 +166,42 @@ Pedestrian *init_pedestrians(int n_p) {
Board init_board_without_obstacles() { return Board(BOARD_LENGTH, BOARD_WIDTH, 0, nullptr); }
// # 128 MULTs, 112 ADDs
static inline __m512d _avx512_exp_pd(__m512d x) {
const __m512d log2e = _mm512_set1_pd(1.4426950408889634);
// # 8 MULTs
__m512d nf = _mm512_roundscale_pd(_mm512_mul_pd(x, log2e), _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
const __m512d ln2 = _mm512_set1_pd(0.6931471805599453);
// # 8 MULTs, 8 ADDs
__m512d r = _mm512_fnmadd_pd(nf, ln2, x);
const __m512d c7 = _mm512_set1_pd(1.0 / 5040.0);
const __m512d c6 = _mm512_set1_pd(1.0 / 720.0);
const __m512d c5 = _mm512_set1_pd(1.0 / 120.0);
const __m512d c4 = _mm512_set1_pd(1.0 / 24.0);
const __m512d c3 = _mm512_set1_pd(1.0 / 6.0);
const __m512d c2 = _mm512_set1_pd(0.5);
const __m512d c1 = _mm512_set1_pd(1.0);
const __m512d c0 = _mm512_set1_pd(1.0);
const __m512d c13 = _mm512_set1_pd(c13_scalar);
const __m512d c12 = _mm512_set1_pd(c12_scalar);
const __m512d c11 = _mm512_set1_pd(c11_scalar);
const __m512d c10 = _mm512_set1_pd(c10_scalar);
const __m512d c9 = _mm512_set1_pd(c9_scalar);
const __m512d c8 = _mm512_set1_pd(c8_scalar);
const __m512d c7 = _mm512_set1_pd(c7_scalar);
const __m512d c6 = _mm512_set1_pd(c6_scalar);
const __m512d c5 = _mm512_set1_pd(c5_scalar);
const __m512d c4 = _mm512_set1_pd(c4_scalar);
const __m512d c3 = _mm512_set1_pd(c3_scalar);
const __m512d c2 = _mm512_set1_pd(c2_scalar);
const __m512d c1 = _mm512_set1_pd(c1_scalar);
const __m512d c0 = _mm512_set1_pd(c0_scalar);
__m512d p = c7;
__m512d p = c13;
// # 104 MULTs, 104 ADDs
p = _mm512_fmadd_pd(p, r, c12);
p = _mm512_fmadd_pd(p, r, c11);
p = _mm512_fmadd_pd(p, r, c10);
p = _mm512_fmadd_pd(p, r, c9);
p = _mm512_fmadd_pd(p, r, c8);
p = _mm512_fmadd_pd(p, r, c7);
p = _mm512_fmadd_pd(p, r, c6);
p = _mm512_fmadd_pd(p, r, c5);
p = _mm512_fmadd_pd(p, r, c4);
@@ -208,6 +227,7 @@ static inline __m512d _avx512_exp_pd(__m512d x) {
__m512d pow2n = _mm512_castsi512_pd(scaled);
// # 8 MULTs
return _mm512_mul_pd(p, pow2n);
}
@@ -261,6 +281,23 @@ int run_simulation(Pedestrian *pedestrians, Board &board, int n_p, int n_iter, c
const __m512d v_np = _mm512_set1_pd(n_p);
// # ADDs: n_iter * n_p * 33 +
// # n_iter * n_p * (n_p_pad / 8) * 232 +
// # n_iter * n_p * board.n_obstacles * 10
// # MULTs: n_iter * n_p * 40 +
// # n_iter * n_p * (n_p_pad / 8) * 320 +
// # n_iter * n_p * board.n_obstacles * 13
// # DIVs: n_iter * n_p * (n_p_pad / 8) * 8 +
// # n_iter * n_p * board.n_obstacles
// # SQRTs: n_iter * n_p +
// # n_iter * n_p * (n_p_pad / 8) * 24 +
// # n_iter * n_p * board.n_obstacles
// # EXPs: n_iter * n_p * board.n_obstacles
for (int t = 0; t < n_iter; t++) {
for (int i = 0; i < n_p; i++) {