QRAM Operations¶
Quantum Random Access Memory (SparQ/include/qram.h)¶
QRAM (Quantum Random Access Memory) operation definitions.
Implements the load operations and the input generator of the quantum random access memory, supporting QRAMLoad, QRAMLoadFast and QRAMInputGenerator
-
namespace qram_simulator
QRAM sparse state simulator namespace.
Contains all classes, functions, and data structures related to quantum computing simulation
-
struct QRAMInputGenerator¶
- #include <qram.h>
QRAM input generator.
Generates random input states for QRAM testing
Public Functions
-
inline QRAMInputGenerator(size_t addr_sz_, size_t data_sz_, size_t input_size_)¶
Constructor (random address and data)
- Parameters:
addr_sz_ – Address size
data_sz_ – Data size
input_size_ – Input size
-
inline QRAMInputGenerator(size_t addr_sz_, size_t data_sz_, size_t input_size_, size_t addr_, size_t data_)¶
Constructor (specified address and data)
- Parameters:
addr_sz_ – Address size
data_sz_ – Data size
input_size_ – Input size
addr_ – Specified address
data_ – Specified data
-
inline std::pair<size_t, size_t> rand_input()¶
Generate a random input.
- Returns:
Random pair of address and data
-
inline void _validate_registers(size_t addr_, size_t data_) const¶
Validate registers (internal use)
- Parameters:
addr_ – Address register ID
data_ – Data register ID
- Throws:
Throws – an exception when a register ID is out of range
-
inline void generate_input(std::vector<System> &s, size_t addr_, size_t data_)¶
Generate input state (with specified registers)
- Parameters:
s – System state vector
addr_ – Address register ID
data_ – Data register ID
-
inline QRAMInputGenerator(size_t addr_sz_, size_t data_sz_, size_t input_size_)¶
-
struct QRAMLoad : public qram_simulator::SelfAdjointOperator¶
- #include <qram.h>
QRAM load operation class.
Implements the standard load operation of the quantum random access memory
Note
Only adapted for qram_qutrit::QRAMCircuit; use QRAMLoad_Qubit for the qubit version
Public Functions
-
inline void clear_control_nonzeros()¶
-
inline auto &conditioned_by_nonzeros(size_t cond)¶
-
inline void clear_control_all_ones()¶
-
inline auto &conditioned_by_all_ones(size_t cond)¶
-
inline void clear_control_by_bit()¶
-
inline auto &conditioned_by_bit(size_t cond, size_t pos)¶
-
inline void clear_control_by_value()¶
-
inline auto &conditioned_by_value(size_t cond, size_t pos)¶
-
inline QRAMLoad(const qram_qutrit::QRAMCircuit *qram_, size_t reg1, size_t reg2)¶
Constructor (ID version)
- Parameters:
qram_ – QRAM circuit pointer
reg1 – Address register ID
reg2 – Data register ID
- Throws:
Throws – an exception when the address register type is not an unsigned integer
-
inline QRAMLoad(const qram_qutrit::QRAMCircuit *qram, std::string_view reg1, std::string_view reg2)¶
Constructor (name version)
- Parameters:
qram – QRAM circuit pointer
reg1 – Address register name
reg2 – Data register name
-
void noise_free_impl(std::vector<System> &state) const¶
Noise-free implementation.
- Parameters:
state – System state vector
-
void _set_branches(qram_qutrit::QRAMCircuit *qram, const std::vector<System> &state, std::vector<std::pair<size_t, size_t>> &groups) const¶
Set branches (internal implementation)
- Parameters:
qram – QRAM circuit pointer
state – System state vector
groups – Grouping information
-
void _set_branches_impl(qram_qutrit::QRAMCircuit *qram, const std::vector<System> &state, decltype(qram->get_branches()) branches, decltype(qram->get_branch_probs()) branch_probs, size_t iter_l, size_t iter_r, std::vector<std::pair<size_t, size_t>> &groups) const¶
Set branches implementation (recursive)
- Parameters:
qram – QRAM circuit pointer
state – System state vector
branches – Branch information
branch_probs – Branch probabilities
iter_l – Left iteration boundary
iter_r – Right iteration boundary
groups – Grouping information
-
void _reconstruct(qram_qutrit::QRAMCircuit *qram, std::vector<System> &state, std::vector<std::pair<size_t, size_t>> &groups) const¶
Reconstruct operation.
- Parameters:
qram – QRAM circuit pointer
state – System state vector
groups – Grouping information
-
virtual void operator()(std::vector<System> &state) const¶
Apply the QRAM load operation.
- Parameters:
state – System state vector
-
inline virtual void dag(std::vector<System> &state) const override¶
Apply the dagger operation (the dagger of a self-adjoint operator equals itself)
- Parameters:
state – System state vector
-
inline virtual void dag(SparseState &state) const override¶
Apply dagger to a SparseState.
- Parameters:
state – Sparse state
-
inline virtual void dag(std::vector<System> &state) const
Apply the conjugate transpose (dagger) operation.
- Parameters:
state – System state vector
- Throws:
Throws – a not-implemented exception by default
-
inline virtual void dag(SparseState &state) const
Apply dagger to a SparseState.
- Parameters:
state – Sparse state
-
inline void clear_control_nonzeros()¶
-
struct QRAMLoadFast : public qram_simulator::SelfAdjointOperator¶
- #include <qram.h>
Fast QRAM load operation class.
Optimized version of the QRAM load operation with higher performance
Note
Only adapted for qram_qutrit::QRAMCircuit
Public Functions
-
inline void clear_control_nonzeros()¶
-
inline auto &conditioned_by_nonzeros(size_t cond)¶
-
inline void clear_control_all_ones()¶
-
inline auto &conditioned_by_all_ones(size_t cond)¶
-
inline void clear_control_by_bit()¶
-
inline auto &conditioned_by_bit(size_t cond, size_t pos)¶
-
inline void clear_control_by_value()¶
-
inline auto &conditioned_by_value(size_t cond, size_t pos)¶
-
QRAMLoadFast(const qram_qutrit::QRAMCircuit *qram, size_t reg1, size_t reg2)¶
Constructor (ID version)
- Parameters:
qram – QRAM circuit pointer
reg1 – Address register ID
reg2 – Data register ID
-
QRAMLoadFast(const qram_qutrit::QRAMCircuit *qram, std::string_view reg1, std::string_view reg2)¶
Constructor (name version)
- Parameters:
qram – QRAM circuit pointer
reg1 – Address register name
reg2 – Data register name
-
void noise_free_impl(std::vector<System> &state) const¶
Noise-free implementation.
- Parameters:
state – System state vector
-
void has_damping_impl(std::vector<System> &state, qram_qutrit::QRAMCircuit *qram, std::vector<System> &state_remove_cache) const¶
Implementation with damping.
- Parameters:
state – System state vector
qram – QRAM circuit pointer
state_remove_cache – State removal cache
-
void no_damping_impl(std::vector<System> &state, qram_qutrit::QRAMCircuit *qram, std::vector<System> &state_remove_cache) const¶
Implementation without damping.
- Parameters:
state – System state vector
qram – QRAM circuit pointer
state_remove_cache – State removal cache
-
virtual void operator()(std::vector<System> &state) const¶
Apply the fast QRAM load operation.
- Parameters:
state – System state vector
-
inline virtual void dag(std::vector<System> &state) const override¶
Apply the dagger operation (the dagger of a self-adjoint operator equals itself)
- Parameters:
state – System state vector
-
inline virtual void dag(SparseState &state) const override¶
Apply dagger to a SparseState.
- Parameters:
state – Sparse state
-
inline virtual void dag(std::vector<System> &state) const
Apply the conjugate transpose (dagger) operation.
- Parameters:
state – System state vector
- Throws:
Throws – a not-implemented exception by default
-
inline virtual void dag(SparseState &state) const
Apply dagger to a SparseState.
- Parameters:
state – Sparse state
-
inline void clear_control_nonzeros()¶
-
struct QRAMInputGenerator¶
Note
The QRAM circuit cores (the qutrit/qubit implementations of QRAMCircuit) live in the
QRAM-Simulator repository
(the extern/qram-simulator submodule of this repository); see that repository for their
documentation.