Perf plot
This commit is contained in:
committed by
Linus Baumberger
parent
ca969564a6
commit
e7af3103e8
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user