HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
베이스: Multiplier
두 입력 레지스터의 곱셈을 제자리에 저장하는 곱셈 회로입니다.
Circuit은 [1의] 접근 방식을 사용합니다. 예를 들어, 기본 가산기를 사용하여 3쿼비트 크기의 레지스터 2개에서 비모듈식 곱셈을 수행하는 승수 회로는 다음과 같습니다(여기서 Adder 은 CDKMRippleCarryAdder 을 나타냅니다):
a_0: ────■─────────────────────────
│
a_1: ────┼─────────■───────────────
│ │
a_2: ────┼─────────┼─────────■─────
┌───┴────┐┌───┴────┐┌───┴────┐
b_0: ┤0 ├┤0 ├┤0 ├
│ ││ ││ │
b_1: ┤1 ├┤1 ├┤1 ├
│ ││ ││ │
b_2: ┤2 ├┤2 ├┤2 ├
│ ││ ││ │
out_0: ┤3 ├┤ ├┤ ├
│ ││ ││ │
out_1: ┤4 ├┤3 ├┤ ├
│ Adder ││ Adder ││ Adder │
out_2: ┤5 ├┤4 ├┤3 ├
│ ││ ││ │
out_3: ┤6 ├┤5 ├┤4 ├
│ ││ ││ │
out_4: ┤ ├┤6 ├┤5 ├
│ ││ ││ │
out_5: ┤ ├┤ ├┤6 ├
│ ││ ││ │
aux_0: ┤7 ├┤7 ├┤7 ├
└────────┘└────────┘└────────┘이 회로의 곱셈은 입력 레지스터 중 하나를 사용하여 일련의 시프트 덧셈을 수행하고 다른 입력 레지스터의 큐비트는 가산기의 제어 큐비트 역할을 하는 고전적인 접근 방식으로 구현됩니다.
이 MultiplierGate 객체는 이 회로 클래스처럼 곱셈 연산을 나타내지만, 컴파일러가 문맥에 따라 최적의 분해 방식을 선택할 수 있도록 합니다. 구체적인 구현 방식은 을 통해 HLSConfig설정할 수 있으며, 예를 들어 이 회로는 을 통해 선택할 수 Multiplier=["cumulative_h18"] 있습니다.
참조 자료:
[1] Häner et al, 산술을 위한 양자 회로 최적화, 2018. arXiv:1805.12445
매개변수
- num_state_qubits (int) – 상태 또는 에 대한 입력 레지스터의 큐비트 수. 두 입력 레지스터는 동일한 수의 큐비트를 가져야 합니다.
- num_result_qubits (int | None) – 출력을 제한할 결과 큐비트 수입니다. 결과 큐비트 수가 인 경우 곱셈 모듈러 를 수행하여 출력을 지정된 큐비트 수로 제한합니다. 기본값은
2 * num_state_qubits으로 두 입력값의 곱셈으로 가능한 모든 결과를 나타냅니다. - adder (QuantumCircuit | None) – 곱셈 연산을 수행하는 데 사용되는 반가산기 회로. 더하기 연산자가 지정되지 않은 경우, 기본값으로
CDKMRippleCarryAdder가 사용됩니다. - name (str) – 회로 개체의 이름입니다.
레이즈
NotImplementedError - num_result_qubits 이 기본값이 아니고 사용자 지정 가산기가 제공된 경우.
속성
name
유형: str
사람이 읽을 수 있는 회로의 이름입니다.
예제
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit