18 #include <sys/random.h>
27 #include <immintrin.h>
32 #if ENABLE_RNDFILE && !ENABLE_DEVRAND
36 static RandFile& getInstance()
38 static RandFile instance;
47 fSize = fread(&v,
sizeof(
unsigned), 1, dataFile);
49 _readNextRandDataFile();
57 RandFile() { _readNextRandDataFile(); }
67 void _readNextRandDataFile();
70 RandFile(RandFile
const&) =
delete;
71 void operator=(RandFile
const&) =
delete;
79 #if ENABLE_RDRAND || ENABLE_DEVRAND
80 constexpr
int max_rdrand_tries = 10;
81 for (
int i = 0; i < max_rdrand_tries; ++i) {
83 if (
sizeof(
unsigned) == getrandom(
reinterpret_cast<char*
>(pv),
sizeof(
unsigned), 0))
85 if (_rdrand32_step(pv))
97 const unsigned flag_RDRAND = (1 << 30);
103 return ((ex[2] & flag_RDRAND) == flag_RDRAND);
105 unsigned eax, ebx, ecx, edx;
107 __get_cpuid(1, &eax, &ebx, &ecx, &edx);
109 return ((ecx & flag_RDRAND) == flag_RDRAND);
117 #if ENABLE_RNDFILE && !ENABLE_DEVRAND
118 unsigned NextRaw() {
return RandFile::getInstance().NextRaw(); }
124 throw std::runtime_error(
"Random number generator failed up to retry limit.");
137 for (
unsigned i = 0
U; i < 32U; ++i) {
147 for (
unsigned i = 0
U; i < 32U; ++i) {
Definition: rdrandwrapper.hpp:75
bool getRdRand(unsigned *pv)
Definition: rdrandwrapper.hpp:77
unsigned NextRaw()
Definition: rdrandwrapper.hpp:120
real1_f Next()
Definition: rdrandwrapper.hpp:131
bool SupportsRDRAND()
Definition: rdrandwrapper.hpp:94
Definition: complex16x2simd.hpp:25
constexpr real1_f ZERO_R1_F
Definition: qrack_types.hpp:152
constexpr real1_f ONE_R1_F
Definition: qrack_types.hpp:154
float real1_f
Definition: qrack_types.hpp:64
MICROSOFT_QUANTUM_DECL void U(_In_ uintq sid, _In_ uintq q, _In_ double theta, _In_ double phi, _In_ double lambda)
(External API) 3-parameter unitary gate
Definition: pinvoke_api.cpp:1362