#pragma GCC target("mmx,sse,sse2,ssse3,sse4.1,sse4.2,avx,avx2,fma,avx512f,avx512bw,avx512cd,avx512dq,avx512vl") #include double xs[128] __attribute__((aligned (64))), ys[128] __attribute__((aligned (64))); double test_one(int i) { double s = 1e9; static point vec[N]; int vsize = 0; for (int j = 0; j < N; ++j) { if (i == j) { continue; } vec[vsize] = p[i].to(p[j]); xs[vsize] = vec[vsize].x, ys[vsize] = vec[vsize].y; ++vsize; } for (int h = vsize; h < 128; ++h) xs[h] = 1e18, ys[h] = 1e17 + 50; for (int j = 0; j < vsize; ++j) { __m512d xj = _mm512_set1_pd(xs[j]), yj = _mm512_set1_pd(ys[j]); __m512d mins = _mm512_set1_pd(1e50); for (int h = j + 1; h < vsize; h += 8) { __m512d xc = _mm512_load_pd(xs + h), yc = _mm512_load_pd(ys + h); __m512d ans = _mm512_abs_pd(_mm512_fmsub_pd(xc, yj, _mm512_mul_pd(yc, xj))); mins = _mm512_min_pd(mins, ans); } s = min(s, _mm512_reduce_min_pd(mins)); } return s / 2; }