Qrack  1.7
General classical-emulating-quantum development framework
Classes | Typedefs | Enumerations | Functions
Qrack Namespace Reference

Classes

struct  Complex16Simd
 SIMD implementation of the double precision complex type. More...
 
struct  Complex16x2Simd
 SIMD implementation of the double precision complex vector type of 2 complex numbers, only for AVX Apply2x2. More...
 
class  OCLEngine
 "Qrack::OCLEngine" manages the single OpenCL context. More...
 
class  ParallelFor
 
class  QEngineCPU
 General purpose QEngineCPU implementation. More...
 
class  QEngineOCL
 OpenCL enhanced QEngineCPU implementation. More...
 
struct  QEngineShard
 Associates a QInterface object with a set of bits. More...
 
class  QInterface
 A "Qrack::QInterface" is an abstract interface exposing qubit permutation state vector with methods to operate on it as by gates and register-like instructions. More...
 
class  QUnit
 

Typedefs

typedef std::shared_ptr< QEngineCPUQEngineCPUPtr
 
typedef std::shared_ptr< QInterfaceQInterfacePtr
 
typedef std::shared_ptr< QUnitQUnitPtr
 

Enumerations

enum  QInterfaceEngine {
  QINTERFACE_CPU = 0, QINTERFACE_OPENCL, QINTERFACE_QUNIT, QINTERFACE_FIRST = QINTERFACE_CPU,
  QINTERFACE_OPTIMAL = QINTERFACE_CPU, QINTERFACE_MAX
}
 Enumerated list of supported engines. More...
 

Functions

Complex16Simd operator* (const double &lhs, const Complex16Simd &rhs)
 
Complex16Simd operator/ (const double &lhs, const Complex16Simd &rhs)
 
double real (const Complex16Simd &cmplx)
 
double imag (const Complex16Simd &cmplx)
 
double arg (const Complex16Simd &cmplx)
 
Complex16Simd conj (const Complex16Simd &cmplx)
 
double norm (const Complex16Simd &cmplx)
 
double abs (const Complex16Simd &cmplx)
 
Complex16Simd polar (const double rho, const double theta=0)
 
Complex16x2Simd dupeLo (const Complex16x2Simd &cmplx2)
 
Complex16x2Simd dupeHi (const Complex16x2Simd &cmplx2)
 
Complex16x2Simd matrixMul (const Complex16x2Simd &mtrxCol1, const Complex16x2Simd &mtrxCol2, const Complex16x2Simd &qubit)
 
Complex16x2Simd matrixMul (const double &nrm, const Complex16x2Simd &mtrxCol1, const Complex16x2Simd &mtrxCol2, const Complex16x2Simd &qubit)
 
Complex16x2Simd operator* (const double lhs, const Complex16x2Simd &rhs)
 
template<class BidirectionalIterator >
void reverse (BidirectionalIterator first, BidirectionalIterator last, bitCapInt stride)
 
template<class BidirectionalIterator >
void rotate (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, bitCapInt stride)
 
template<typename... Ts>
QInterfacePtr CreateQuantumInterface (QInterfaceEngine engine, QInterfaceEngine subengine, Ts...args)
 Factory method to create specific engine implementations. More...
 
template void rotate< complex * > (complex *first, complex *middle, complex *last, bitCapInt stride)
 

Typedef Documentation

typedef std::shared_ptr<QEngineCPU> Qrack::QEngineCPUPtr
typedef std::shared_ptr<QInterface> Qrack::QInterfacePtr
typedef std::shared_ptr<QUnit> Qrack::QUnitPtr

Enumeration Type Documentation

Enumerated list of supported engines.

Use QINTERFACE_OPTIMAL for the best supported engine.

Enumerator
QINTERFACE_CPU 

Create a QEngineCPU leveraging only local CPU and memory resources.

QINTERFACE_OPENCL 

Create a QEngineOCL, derived from QEngineCPU, leveraging OpenCL hardware to increase the speed of certain calculations.

QINTERFACE_QUNIT 

Create a QUnit, which utilizes other QInterface classes to minimize the amount of work that's needed for any given operation based on the entanglement of the bits involved.

This, combined with QINTERFACE_OPTIMAL, is the recommended object to use as a library consumer.

QINTERFACE_FIRST 
QINTERFACE_OPTIMAL 
QINTERFACE_MAX 

Function Documentation

double Qrack::abs ( const Complex16Simd cmplx)
inline
double Qrack::arg ( const Complex16Simd cmplx)
inline
Complex16Simd Qrack::conj ( const Complex16Simd cmplx)
inline
template<typename... Ts>
QInterfacePtr Qrack::CreateQuantumInterface ( QInterfaceEngine  engine,
QInterfaceEngine  subengine,
Ts...  args 
)

Factory method to create specific engine implementations.

Complex16x2Simd Qrack::dupeHi ( const Complex16x2Simd cmplx2)
inline
Complex16x2Simd Qrack::dupeLo ( const Complex16x2Simd cmplx2)
inline
double Qrack::imag ( const Complex16Simd cmplx)
inline
Complex16x2Simd Qrack::matrixMul ( const Complex16x2Simd mtrxCol1,
const Complex16x2Simd mtrxCol2,
const Complex16x2Simd qubit 
)
inline
Complex16x2Simd Qrack::matrixMul ( const double &  nrm,
const Complex16x2Simd mtrxCol1,
const Complex16x2Simd mtrxCol2,
const Complex16x2Simd qubit 
)
inline
double Qrack::norm ( const Complex16Simd cmplx)
inline
Complex16x2Simd Qrack::operator* ( const double  lhs,
const Complex16x2Simd rhs 
)
inline
Complex16Simd Qrack::operator* ( const double &  lhs,
const Complex16Simd rhs 
)
inline
Complex16Simd Qrack::operator/ ( const double &  lhs,
const Complex16Simd rhs 
)
inline
Complex16Simd Qrack::polar ( const double  rho,
const double  theta = 0 
)
inline
double Qrack::real ( const Complex16Simd cmplx)
inline
template<class BidirectionalIterator >
void Qrack::reverse ( BidirectionalIterator  first,
BidirectionalIterator  last,
bitCapInt  stride 
)
template<class BidirectionalIterator >
void Qrack::rotate ( BidirectionalIterator  first,
BidirectionalIterator  middle,
BidirectionalIterator  last,
bitCapInt  stride 
)
template void Qrack::rotate< complex * > ( complex first,
complex middle,
complex last,
bitCapInt  stride 
)