QRAM 操作

量子随机存取存储器(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)

参数:
  • 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)

参数:
  • 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.

返回:

Random pair of address and data

inline void _validate_registers(size_t addr_, size_t data_) const

Validate registers (internal use)

参数:
  • addr_ -- Address register ID

  • data_ -- Data register ID

抛出:

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)

参数:
  • s -- System state vector

  • addr_ -- Address register ID

  • data_ -- Data register ID

inline void generate_input(std::vector<System> &s)

Generate input state (using preset registers)

参数:

s -- System state vector

inline void generate_full_input(std::vector<System> &s, size_t addr_, size_t data_)

Generate the full input (all possible address-data combinations)

参数:
  • s -- System state vector

  • addr_ -- Address register ID

  • data_ -- Data register ID

Public Members

std::set<std::pair<size_t, size_t>> unique_set

Unique input set.

size_t addr_sz

Address size.

size_t data_sz

Data size.

size_t input_sz

Input size.

std::uniform_int_distribution<size_t> addr_dist

Address distribution.

std::uniform_int_distribution<size_t> data_dist

Data distribution.

size_t addr

Address value.

size_t data

Data value.

struct QRAMLoad : public qram_simulator::SelfAdjointOperator
#include <qram.h>

QRAM load operation class.

Implements the standard load operation of the quantum random access memory

备注

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(std::string_view cond)
inline auto &conditioned_by_nonzeros(const std::vector<std::string_view> &conds)
inline auto &conditioned_by_nonzeros(const std::vector<std::string> &conds)
inline auto &conditioned_by_nonzeros(size_t cond)
inline auto &conditioned_by_nonzeros(const std::vector<size_t> &conds)
inline void clear_control_all_ones()
inline auto &conditioned_by_all_ones(std::string_view cond)
inline auto &conditioned_by_all_ones(const std::vector<std::string_view> &conds)
inline auto &conditioned_by_all_ones(size_t cond)
inline auto &conditioned_by_all_ones(const std::vector<size_t> &conds)
inline void clear_control_by_bit()
inline auto &conditioned_by_bit(const std::vector<std::pair<std::string, size_t>> &conds)
inline auto &conditioned_by_bit(const std::vector<std::pair<std::string_view, size_t>> &conds)
inline auto &conditioned_by_bit(const std::vector<std::pair<size_t, size_t>> &conds)
inline auto &conditioned_by_bit(std::string_view cond, size_t pos)
inline auto &conditioned_by_bit(size_t cond, size_t pos)
inline void clear_control_by_value()
inline auto &conditioned_by_value(const std::vector<std::pair<std::string, size_t>> &conds)
inline auto &conditioned_by_value(const std::vector<std::pair<std::string_view, size_t>> &conds)
inline auto &conditioned_by_value(const std::vector<std::pair<size_t, size_t>> &conds)
inline auto &conditioned_by_value(std::string_view cond, size_t pos)
inline auto &conditioned_by_value(size_t cond, size_t pos)
template<typename Operator>
inline void copy_control_conditions_to(Operator &target) const
inline QRAMLoad(const qram_qutrit::QRAMCircuit *qram_, size_t reg1, size_t reg2)

Constructor (ID version)

参数:
  • qram_ -- QRAM circuit pointer

  • reg1 -- Address register ID

  • reg2 -- Data register ID

抛出:

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)

参数:
  • qram -- QRAM circuit pointer

  • reg1 -- Address register name

  • reg2 -- Data register name

void noise_free_impl(std::vector<System> &state) const

Noise-free implementation.

参数:

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)

参数:
  • 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)

参数:
  • 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.

参数:
  • qram -- QRAM circuit pointer

  • state -- System state vector

  • groups -- Grouping information

virtual void operator()(std::vector<System> &state) const

Apply the QRAM load operation.

参数:

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)

参数:

state -- System state vector

inline virtual void dag(SparseState &state) const override

Apply dagger to a SparseState.

参数:

state -- Sparse state

inline virtual void dag(std::vector<System> &state) const

Apply the conjugate transpose (dagger) operation.

参数:

state -- System state vector

抛出:

Throws -- a not-implemented exception by default

inline virtual void dag(SparseState &state) const

Apply dagger to a SparseState.

参数:

state -- Sparse state

Public Members

const qram_qutrit::QRAMCircuit *qram

QRAM circuit pointer.

size_t register_addr

Address register ID.

size_t register_data

Data register ID.

std::vector<size_t> condition_variable_nonzeros
std::vector<size_t> condition_variable_all_ones
std::vector<std::pair<size_t, size_t>> condition_variable_by_bit
std::vector<std::pair<size_t, size_t>> condition_variable_by_value

Public Static Attributes

static std::string version

Version string.

struct QRAMLoadFast : public qram_simulator::SelfAdjointOperator
#include <qram.h>

Fast QRAM load operation class.

Optimized version of the QRAM load operation with higher performance

备注

Only adapted for qram_qutrit::QRAMCircuit

Public Functions

inline void clear_control_nonzeros()
inline auto &conditioned_by_nonzeros(std::string_view cond)
inline auto &conditioned_by_nonzeros(const std::vector<std::string_view> &conds)
inline auto &conditioned_by_nonzeros(const std::vector<std::string> &conds)
inline auto &conditioned_by_nonzeros(size_t cond)
inline auto &conditioned_by_nonzeros(const std::vector<size_t> &conds)
inline void clear_control_all_ones()
inline auto &conditioned_by_all_ones(std::string_view cond)
inline auto &conditioned_by_all_ones(const std::vector<std::string_view> &conds)
inline auto &conditioned_by_all_ones(size_t cond)
inline auto &conditioned_by_all_ones(const std::vector<size_t> &conds)
inline void clear_control_by_bit()
inline auto &conditioned_by_bit(const std::vector<std::pair<std::string, size_t>> &conds)
inline auto &conditioned_by_bit(const std::vector<std::pair<std::string_view, size_t>> &conds)
inline auto &conditioned_by_bit(const std::vector<std::pair<size_t, size_t>> &conds)
inline auto &conditioned_by_bit(std::string_view cond, size_t pos)
inline auto &conditioned_by_bit(size_t cond, size_t pos)
inline void clear_control_by_value()
inline auto &conditioned_by_value(const std::vector<std::pair<std::string, size_t>> &conds)
inline auto &conditioned_by_value(const std::vector<std::pair<std::string_view, size_t>> &conds)
inline auto &conditioned_by_value(const std::vector<std::pair<size_t, size_t>> &conds)
inline auto &conditioned_by_value(std::string_view cond, size_t pos)
inline auto &conditioned_by_value(size_t cond, size_t pos)
template<typename Operator>
inline void copy_control_conditions_to(Operator &target) const
QRAMLoadFast(const qram_qutrit::QRAMCircuit *qram, size_t reg1, size_t reg2)

Constructor (ID version)

参数:
  • 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)

参数:
  • qram -- QRAM circuit pointer

  • reg1 -- Address register name

  • reg2 -- Data register name

void noise_free_impl(std::vector<System> &state) const

Noise-free implementation.

参数:

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.

参数:
  • 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.

参数:
  • 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.

参数:

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)

参数:

state -- System state vector

inline virtual void dag(SparseState &state) const override

Apply dagger to a SparseState.

参数:

state -- Sparse state

inline virtual void dag(std::vector<System> &state) const

Apply the conjugate transpose (dagger) operation.

参数:

state -- System state vector

抛出:

Throws -- a not-implemented exception by default

inline virtual void dag(SparseState &state) const

Apply dagger to a SparseState.

参数:

state -- Sparse state

Public Members

const qram_qutrit::QRAMCircuit *qram

QRAM circuit pointer.

size_t register_addr

Address register ID.

size_t register_data

Data register ID.

std::vector<size_t> condition_variable_nonzeros
std::vector<size_t> condition_variable_all_ones
std::vector<std::pair<size_t, size_t>> condition_variable_by_bit
std::vector<std::pair<size_t, size_t>> condition_variable_by_value

备注

QRAM 电路核心(QRAMCircuit 的 qutrit/qubit 实现)位于 QRAM-Simulator 仓库 (本仓库 extern/qram-simulator submodule),其文档请参阅该仓库。