35 class StateVectorArray;
77 #if defined(__APPLE__)
88 #if defined(__ANDROID__)
89 return std::unique_ptr<complex[], void (*)(complex*)>(
new complex[elemCount], [](
complex* c) {
delete c; });
92 size_t allocSize =
sizeof(
complex) * elemCount;
96 #if defined(__APPLE__)
97 return std::unique_ptr<complex[], void (*)(complex*)>(
98 _aligned_state_vec_alloc(allocSize), [](
complex* c) { free(c); });
99 #elif defined(_WIN32) && !defined(__CYGWIN__)
100 return std::unique_ptr<complex[], void (*)(complex*)>(
103 return std::unique_ptr<complex[], void (*)(complex*)>(
123 #if ENABLE_COMPLEX_X2
167 const complex* copyIn = std::dynamic_pointer_cast<StateVectorArray>(copyInSv)->amplitudes.get() + srcOffset;
184 0, length, [&](
const bitCapIntOcl& lcv,
const unsigned& cpu) { copyOut[lcv] =
amplitudes[lcv + offset]; });
202 amplitudes[lcv + offset] = svp->amplitudes[lcv];
203 svp->amplitudes[lcv] = tmp;
Definition: parallel_for.hpp:19
void par_for(const bitCapIntOcl begin, const bitCapIntOcl end, ParallelFunc fn)
Call fn once for every numerical value between begin and end.
Definition: parallel_for.cpp:50
Definition: statevector.hpp:72
std::unique_ptr< complex[], void(*)(complex *)> Alloc(bitCapIntOcl elemCount)
Definition: statevector.hpp:86
void copy(StateVectorArrayPtr toCopy)
Definition: statevector.hpp:189
virtual ~StateVectorArray()
Definition: statevector.hpp:119
std::unique_ptr< complex[], void(*)(complex *)> amplitudes
Definition: statevector.hpp:74
complex read(const bitCapIntOcl &i)
Definition: statevector.hpp:121
void write(const bitCapIntOcl &i, const complex &c)
Definition: statevector.hpp:130
void copy_out(complex *copyOut, const bitCapIntOcl offset, const bitCapIntOcl length)
Definition: statevector.hpp:181
void clear()
Definition: statevector.hpp:138
virtual void Free()
Definition: statevector.hpp:109
void copy_in(StateVectorPtr copyInSv, const bitCapIntOcl srcOffset, const bitCapIntOcl dstOffset, const bitCapIntOcl length)
Definition: statevector.hpp:163
void get_probs(real1 *outArray)
Definition: statevector.hpp:207
void write2(const bitCapIntOcl &i1, const complex &c1, const bitCapIntOcl &i2, const complex &c2)
Optimized "write" that is only guaranteed to write if either amplitude is nonzero.
Definition: statevector.hpp:132
void copy_out(complex *copyOut)
Definition: statevector.hpp:176
void shuffle(StateVectorArrayPtr svp)
Definition: statevector.hpp:197
void shuffle(StateVectorPtr svp)
Definition: statevector.hpp:195
void copy(StateVectorPtr toCopy)
Definition: statevector.hpp:187
void copy_in(const complex *copyIn, const bitCapIntOcl offset, const bitCapIntOcl length)
Definition: statevector.hpp:152
void copy_in(const complex *copyIn)
Definition: statevector.hpp:143
StateVectorArray(bitCapIntOcl cap)
Definition: statevector.hpp:112
Definition: statevector.hpp:38
bitCapIntOcl capacity
Definition: statevector.hpp:40
virtual void get_probs(real1 *outArray)=0
virtual void shuffle(StateVectorPtr svp)=0
virtual complex read(const bitCapIntOcl &i)=0
virtual void write(const bitCapIntOcl &i, const complex &c)=0
virtual void copy_out(complex *outArray)=0
virtual void copy_in(const complex *copyIn, const bitCapIntOcl offset, const bitCapIntOcl length)=0
virtual void copy_in(const complex *inArray)=0
virtual void copy_out(complex *copyIn, const bitCapIntOcl offset, const bitCapIntOcl length)=0
virtual void write2(const bitCapIntOcl &i1, const complex &c1, const bitCapIntOcl &i2, const complex &c2)=0
Optimized "write" that is only guaranteed to write if either amplitude is nonzero.
virtual void copy(StateVectorPtr toCopy)=0
StateVector(bitCapIntOcl cap)
Definition: statevector.hpp:43
virtual void copy_in(StateVectorPtr copyInSv, const bitCapIntOcl srcOffset, const bitCapIntOcl dstOffset, const bitCapIntOcl length)=0
virtual ~StateVector()
Definition: statevector.hpp:47
Half-precision floating-point type.
Definition: half.hpp:2222
GLOSSARY: bitLenInt - "bit-length integer" - unsigned integer ID of qubit position in register bitCap...
Definition: complex16x2simd.hpp:25
std::complex< real1 > complex
Definition: qrack_types.hpp:128
double norm(const complex2 &c)
Definition: complex16x2simd.hpp:101
std::shared_ptr< StateVectorArray > StateVectorArrayPtr
Definition: qrack_types.hpp:146
std::shared_ptr< StateVector > StateVectorPtr
Definition: qrack_types.hpp:143
QRACK_CONST complex ZERO_CMPLX
Definition: qrack_types.hpp:253
#define bitCapIntOcl
Definition: qrack_types.hpp:50
#define QRACK_ALIGN_SIZE
Definition: qrack_types.hpp:157
SIMD implementation of the double precision complex vector type of 2 complex numbers,...
Definition: complex16x2simd.hpp:30