MCKL
Monte Carlo Kernel Library
Classes | Namespaces | Macros
threefry_generic_8x64.hpp File Reference
#include <mckl/random/internal/common.hpp>
#include <mckl/random/internal/threefry_common.hpp>
#include <mckl/random/internal/threefry_constants.hpp>
#include <mckl/random/increment.hpp>

Go to the source code of this file.

Classes

class  mckl::internal::Threefish512GeneratorGenericImpl< T >
 
class  mckl::internal::Threefry8x64GeneratorGenericImpl< T >
 

Namespaces

 mckl
 
 mckl::internal
 

Macros

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_4(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND(L)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_20
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_72
 

Macro Definition Documentation

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_4

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_4 (   N)
Value:
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 2); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 3); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 4); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX(N * 8 + 4);
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N)

Definition at line 78 of file threefry_generic_8x64.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8 (   N)
Value:
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 2); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 3); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 4); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX(N * 8 + 4); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 5); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 6); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 7); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N * 8 + 8); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX(N * 8 + 8);
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX(N)

Definition at line 85 of file threefry_generic_8x64.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX (   N)
Value:
s0 += ThreefryKBox<T, K, N>::template key<0>(par); \
s1 += ThreefryKBox<T, K, N>::template key<1>(par); \
s2 += ThreefryKBox<T, K, N>::template key<2>(par); \
s3 += ThreefryKBox<T, K, N>::template key<3>(par); \
s4 += ThreefryKBox<T, K, N>::template key<4>(par); \
s5 += ThreefryKBox<T, K, N>::template key<5>(par); \
s6 += ThreefryKBox<T, K, N>::template key<6>(par); \
s7 += ThreefryKBox<T, K, N>::template key<7>(par);

Definition at line 40 of file threefry_generic_8x64.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_RBOX (   N)
Value:
{ \
constexpr int L0 = Constants::rotate::value[0][(N - 1) % 8]; \
constexpr int L1 = Constants::rotate::value[1][(N - 1) % 8]; \
constexpr int L2 = Constants::rotate::value[2][(N - 1) % 8]; \
constexpr int L3 = Constants::rotate::value[3][(N - 1) % 8]; \
constexpr int R0 = 64 - L0; \
constexpr int R1 = 64 - L1; \
constexpr int R2 = 64 - L2; \
constexpr int R3 = 64 - L3; \
t0 = s0 + s1; \
t2 = s2 + s3; \
t4 = s4 + s5; \
t6 = s6 + s7; \
t1 = (s1 << L0) | (s1 >> R0); \
t3 = (s3 << L1) | (s3 >> R1); \
t5 = (s5 << L2) | (s5 >> R2); \
t7 = (s7 << L3) | (s7 >> R3); \
s0 = t2; \
s2 = t4; \
s4 = t6; \
s6 = t0; \
s1 = t0 ^ t1; \
s3 = t6 ^ t7; \
s5 = t4 ^ t5; \
s7 = t2 ^ t3; \
}

Definition at line 50 of file threefry_generic_8x64.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND (   L)
Value:
T s0 = std::get<0>(buf.s); \
T s1 = std::get<1>(buf.s); \
T s2 = std::get<2>(buf.s); \
T s3 = std::get<3>(buf.s); \
T s4 = std::get<4>(buf.s); \
T s5 = std::get<5>(buf.s); \
T s6 = std::get<6>(buf.s); \
T s7 = std::get<7>(buf.s); \
T t0; \
T t1; \
T t2; \
T t3; \
T t4; \
T t5; \
T t6; \
T t7; \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_##L; \
std::get<0>(buf.s) = s0; \
std::get<1>(buf.s) = s1; \
std::get<2>(buf.s) = s2; \
std::get<3>(buf.s) = s3; \
std::get<4>(buf.s) = s4; \
std::get<5>(buf.s) = s5; \
std::get<6>(buf.s) = s6; \
std::get<7>(buf.s) = s7;

Definition at line 115 of file threefry_generic_8x64.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_20

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_20
Value:
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(0) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(1) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_4(2)
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX(N)

Definition at line 97 of file threefry_generic_8x64.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_72

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_ROUND_72
Value:
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(0) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(1) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(2) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(3) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(4) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(5) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(6) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(7) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_CYCLE_8(8)
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_8X64_KBOX(N)

Definition at line 103 of file threefry_generic_8x64.hpp.