45 constexpr std::size_t LANE = 4;
47 const __m256d ones = _mm256_set1_pd(1.0);
53 for (; i + LANE <= n; i += LANE) {
55 __m256d b = _mm256_loadu_pd(betas + i);
58 b = _mm256_min_pd(b, clamp_v);
61 __m256d b2 = _mm256_mul_pd(b, b);
64 __m256d denom = _mm256_sub_pd(ones, b2);
67 __m256d sqrt_d = _mm256_sqrt_pd(denom);
70 __m256d gamma = _mm256_div_pd(ones, sqrt_d);
73 _mm256_storeu_pd(out + i, gamma);
79 const double b2 = b * b;
80 out[i] = 1.0 / std::sqrt(1.0 - b2);
void compute_gamma_avx2(const double *__restrict__ betas, std::size_t n, double *__restrict__ out) noexcept
AVX2 (256-bit, 4-wide) gamma batch kernel.