MCKL
Monte Carlo Kernel Library
Classes | Namespaces | Macros
u01_avx512.hpp File Reference
#include <mckl/random/internal/common.hpp>
#include <mckl/random/internal/u01_generic.hpp>

Go to the source code of this file.

Classes

class  mckl::internal::U01AVX512Impl< UIntType, RealType, Lower, Upper, int >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Closed, Closed, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Closed, Closed, 64 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Closed, Open, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Closed, Open, 64 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Open, Closed, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Open, Closed, 64 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Open, Open, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, double, Open, Open, 64 >
 
class  mckl::internal::U01AVX512Impl< UIntType, float, Closed, Closed, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, float, Closed, Open, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, float, Open, Closed, 32 >
 
class  mckl::internal::U01AVX512Impl< UIntType, float, Open, Open, 32 >
 
class  mckl::internal::U01AVX512ImplBase< UIntType, RealType, Lower, Upper >
 
class  mckl::internal::U01CanonicalAVX512Impl< UIntType, RealType, Q, int >
 
class  mckl::internal::U01CanonicalAVX512Impl< UIntType, double, 1, 64 >
 
class  mckl::internal::U01CanonicalAVX512Impl< UIntType, double, 2, 32 >
 
class  mckl::internal::U01CanonicalAVX512Impl< UIntType, float, 1, 32 >
 
class  mckl::internal::U01CanonicalAVX512ImplBase< UIntType, RealType, Q >
 

Namespaces

 mckl
 
 mckl::internal
 

Macros

#define MCKL_RANDOM_INTERNAL_U01_AVX512_AND1ADD_EPI32
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_AND1ADD_EPI64
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU32_PS
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU32_PS_31
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU64_PD
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU64_PD_52
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_FMADD_PD(a, b)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_FMADD_PS(a, b)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_LOADU_SI512(u)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_LOADU_SI512_CVTEPU32_EPI64(u)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_MUL_PD(a)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_MUL_PS(a)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_SLLI_EPI32(imm8)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_SLLI_EPI64(imm8)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_SRLI_EPI32(imm8)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_SRLI_EPI64(imm8)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_STOREU_PD(r)
 
#define MCKL_RANDOM_INTERNAL_U01_AVX512_STOREU_PS(r)
 

Macro Definition Documentation

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_AND1ADD_EPI32

#define MCKL_RANDOM_INTERNAL_U01_AVX512_AND1ADD_EPI32
Value:
const __m512i mask = _mm512_set1_epi32(1); \
zmm0 = _mm512_add_epi32(zmm0, _mm512_and_si512(zmm0, mask)); \
zmm1 = _mm512_add_epi32(zmm1, _mm512_and_si512(zmm1, mask)); \
zmm2 = _mm512_add_epi32(zmm2, _mm512_and_si512(zmm2, mask)); \
zmm3 = _mm512_add_epi32(zmm3, _mm512_and_si512(zmm3, mask));

Definition at line 66 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_AND1ADD_EPI64

#define MCKL_RANDOM_INTERNAL_U01_AVX512_AND1ADD_EPI64
Value:
const __m512i mask = _mm512_set1_epi64(1); \
zmm0 = _mm512_add_epi64(zmm0, _mm512_and_si512(zmm0, mask)); \
zmm1 = _mm512_add_epi64(zmm1, _mm512_and_si512(zmm1, mask)); \
zmm2 = _mm512_add_epi64(zmm2, _mm512_and_si512(zmm2, mask)); \
zmm3 = _mm512_add_epi64(zmm3, _mm512_and_si512(zmm3, mask));

Definition at line 73 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU32_PS

#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU32_PS

Definition at line 110 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU32_PS_31

#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU32_PS_31
Value:
zmm0 = _mm512_castps_si512(_mm512_cvtepi32_ps(zmm0)); \
zmm1 = _mm512_castps_si512(_mm512_cvtepi32_ps(zmm1)); \
zmm2 = _mm512_castps_si512(_mm512_cvtepi32_ps(zmm2)); \
zmm3 = _mm512_castps_si512(_mm512_cvtepi32_ps(zmm3));

Definition at line 104 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU64_PD

#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU64_PD

Definition at line 155 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU64_PD_52

#define MCKL_RANDOM_INTERNAL_U01_AVX512_CVTEPU64_PD_52
Value:
const __m512d c = _mm512_set1_pd(Pow2<double, 52>::value); \
zmm0 = _mm512_add_epi64(zmm0, _mm512_castpd_si512(c)); \
zmm1 = _mm512_add_epi64(zmm1, _mm512_castpd_si512(c)); \
zmm2 = _mm512_add_epi64(zmm2, _mm512_castpd_si512(c)); \
zmm3 = _mm512_add_epi64(zmm3, _mm512_castpd_si512(c)); \
zmm0 = _mm512_castpd_si512(_mm512_sub_pd(_mm512_castsi512_pd(zmm0), c)); \
zmm1 = _mm512_castpd_si512(_mm512_sub_pd(_mm512_castsi512_pd(zmm1), c)); \
zmm2 = _mm512_castpd_si512(_mm512_sub_pd(_mm512_castsi512_pd(zmm2), c)); \
zmm3 = _mm512_castpd_si512(_mm512_sub_pd(_mm512_castsi512_pd(zmm3), c));

Definition at line 144 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_FMADD_PD

#define MCKL_RANDOM_INTERNAL_U01_AVX512_FMADD_PD (   a,
 
)
Value:
zmm0 = _mm512_castpd_si512( \
_mm512_fmadd_pd(_mm512_castsi512_pd(zmm0), a, b)); \
zmm1 = _mm512_castpd_si512( \
_mm512_fmadd_pd(_mm512_castsi512_pd(zmm1), a, b)); \
zmm2 = _mm512_castpd_si512( \
_mm512_fmadd_pd(_mm512_castsi512_pd(zmm2), a, b)); \
zmm3 = _mm512_castpd_si512( \
_mm512_fmadd_pd(_mm512_castsi512_pd(zmm3), a, b));

Definition at line 211 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_FMADD_PS

#define MCKL_RANDOM_INTERNAL_U01_AVX512_FMADD_PS (   a,
 
)
Value:
zmm0 = _mm512_castps_si512( \
_mm512_fmadd_ps(_mm512_castsi512_ps(zmm0), a, b)); \
zmm1 = _mm512_castps_si512( \
_mm512_fmadd_ps(_mm512_castsi512_ps(zmm1), a, b)); \
zmm2 = _mm512_castps_si512( \
_mm512_fmadd_ps(_mm512_castsi512_ps(zmm2), a, b)); \
zmm3 = _mm512_castps_si512( \
_mm512_fmadd_ps(_mm512_castsi512_ps(zmm3), a, b));

Definition at line 201 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_LOADU_SI512

#define MCKL_RANDOM_INTERNAL_U01_AVX512_LOADU_SI512 (   u)
Value:
const __m512i *uptr = reinterpret_cast<const __m512i *>(u); \
__m512i zmm0 = _mm512_loadu_si512(uptr++); \
__m512i zmm1 = _mm512_loadu_si512(uptr++); \
__m512i zmm2 = _mm512_loadu_si512(uptr++); \
__m512i zmm3 = _mm512_loadu_si512(uptr++);

Definition at line 40 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_LOADU_SI512_CVTEPU32_EPI64

#define MCKL_RANDOM_INTERNAL_U01_AVX512_LOADU_SI512_CVTEPU32_EPI64 (   u)
Value:
const __m256i *uptr = reinterpret_cast<const __m256i *>(u); \
__m512i zmm0 = _mm512_cvtepu32_epi64(_mm256_loadu_si256(uptr++)); \
__m512i zmm1 = _mm512_cvtepu32_epi64(_mm256_loadu_si256(uptr++)); \
__m512i zmm2 = _mm512_cvtepu32_epi64(_mm256_loadu_si256(uptr++)); \
__m512i zmm3 = _mm512_cvtepu32_epi64(_mm256_loadu_si256(uptr++));

Definition at line 47 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_MUL_PD

#define MCKL_RANDOM_INTERNAL_U01_AVX512_MUL_PD (   a)
Value:
zmm0 = _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(zmm0), a)); \
zmm1 = _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(zmm1), a)); \
zmm2 = _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(zmm2), a)); \
zmm3 = _mm512_castpd_si512(_mm512_mul_pd(_mm512_castsi512_pd(zmm3), a));

Definition at line 195 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_MUL_PS

#define MCKL_RANDOM_INTERNAL_U01_AVX512_MUL_PS (   a)
Value:
zmm0 = _mm512_castps_si512(_mm512_mul_ps(_mm512_castsi512_ps(zmm0), a)); \
zmm1 = _mm512_castps_si512(_mm512_mul_ps(_mm512_castsi512_ps(zmm1), a)); \
zmm2 = _mm512_castps_si512(_mm512_mul_ps(_mm512_castsi512_ps(zmm2), a)); \
zmm3 = _mm512_castps_si512(_mm512_mul_ps(_mm512_castsi512_ps(zmm3), a));

Definition at line 189 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_SLLI_EPI32

#define MCKL_RANDOM_INTERNAL_U01_AVX512_SLLI_EPI32 (   imm8)
Value:
zmm0 = _mm512_slli_epi32(zmm0, imm8); \
zmm1 = _mm512_slli_epi32(zmm1, imm8); \
zmm2 = _mm512_slli_epi32(zmm2, imm8); \
zmm3 = _mm512_slli_epi32(zmm3, imm8);

Definition at line 80 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_SLLI_EPI64

#define MCKL_RANDOM_INTERNAL_U01_AVX512_SLLI_EPI64 (   imm8)
Value:
zmm0 = _mm512_slli_epi64(zmm0, imm8); \
zmm1 = _mm512_slli_epi64(zmm1, imm8); \
zmm2 = _mm512_slli_epi64(zmm2, imm8); \
zmm3 = _mm512_slli_epi64(zmm3, imm8);

Definition at line 92 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_SRLI_EPI32

#define MCKL_RANDOM_INTERNAL_U01_AVX512_SRLI_EPI32 (   imm8)
Value:
zmm0 = _mm512_srli_epi32(zmm0, imm8); \
zmm1 = _mm512_srli_epi32(zmm1, imm8); \
zmm2 = _mm512_srli_epi32(zmm2, imm8); \
zmm3 = _mm512_srli_epi32(zmm3, imm8);

Definition at line 86 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_SRLI_EPI64

#define MCKL_RANDOM_INTERNAL_U01_AVX512_SRLI_EPI64 (   imm8)
Value:
zmm0 = _mm512_srli_epi64(zmm0, imm8); \
zmm1 = _mm512_srli_epi64(zmm1, imm8); \
zmm2 = _mm512_srli_epi64(zmm2, imm8); \
zmm3 = _mm512_srli_epi64(zmm3, imm8);

Definition at line 98 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_STOREU_PD

#define MCKL_RANDOM_INTERNAL_U01_AVX512_STOREU_PD (   r)
Value:
_mm512_storeu_pd(r + 0x00, _mm512_castsi512_pd(zmm0)); \
_mm512_storeu_pd(r + 0x08, _mm512_castsi512_pd(zmm1)); \
_mm512_storeu_pd(r + 0x10, _mm512_castsi512_pd(zmm2)); \
_mm512_storeu_pd(r + 0x18, _mm512_castsi512_pd(zmm3));

Definition at line 60 of file u01_avx512.hpp.

◆ MCKL_RANDOM_INTERNAL_U01_AVX512_STOREU_PS

#define MCKL_RANDOM_INTERNAL_U01_AVX512_STOREU_PS (   r)
Value:
_mm512_storeu_ps(r + 0x00, _mm512_castsi512_ps(zmm0)); \
_mm512_storeu_ps(r + 0x10, _mm512_castsi512_ps(zmm1)); \
_mm512_storeu_ps(r + 0x20, _mm512_castsi512_ps(zmm2)); \
_mm512_storeu_ps(r + 0x30, _mm512_castsi512_ps(zmm3));

Definition at line 54 of file u01_avx512.hpp.