Skip to main content
IBM Quantum Platform

TwoQubitPeepholeOptimization

class qiskit.transpiler.passes.TwoQubitPeepholeOptimization(*args, **kwargs)

GitHub

베이스: TransformationPass

통합된 2-큐비트 유니터리 피프홀 최적화

이 트랜스파일러 패스는 2큐비트 유니터리 피프홀 최적화를 수행하도록 설계되었습니다. 이 단계에서는 회로 내의 모든 2 큐비트 블록을 찾아내고, 해당 블록의 유니터리를 계산한 다음, 그 유니터리를 합성합니다. 합성된 2큐비트 유니터리 연산이 원래의 하위 회로보다 “더 우수하다”면, 해당 하위 회로를 사용하여 원래의 회로를 대체한다. 어떤 것이 더 나은지 판단하는 데 사용되는 휴리스틱은 먼저 회로 내의 2-큐비트 게이트 수를 확인하고, 2-큐비트 게이트 수가 더 적은 합성 방식을 우선적으로 선택합니다. 만약 2-큐비트 게이트 수가 같다면, 회로의 예상 충실도를 확인하여 예상 충실도가 더 높은 하위 회로를 선택하며, 마지막으로 필요한 경우 총 게이트 수가 가장 적은 하위 회로를 선택합니다.

대상 연산이 과완전(overcomplete)인 경우, 이 패스는 주어진 큐비트에서 지원되는 모든 게이트에 대해 지원되는 모든 분해 연산자를 모두 시도합니다. 위의 휴리스틱을 적용했을 때 기대 성능이 가장 우수한 분해 방식을 선택하여 해당 블록을 대체하는 데 사용합니다.

이 패스는 물리적 회로에서 실행되도록 설계되었으며, 특정 큐비트에 대한 연산 세부 사항은 대상 하드웨어 큐비트를 기준으로 한다고 가정합니다. 그러나 이 패스의 출력에는 하드웨어 연산이 사용되지 않을 수 있으며, 특히 대상 회로가 지원하는 연산 범위를 벗어난 단일 큐비트 게이트가 생성될 수 있습니다. 이는 일반적으로 대상 TwoQubitControlledUDecomposer 회로가 지원하는 매개변수화 게이트가 합성에 사용될 때만 발생합니다. 따라서 물리적 최적화 단계(예: 최적화 단계 )에서 이 패스를 실행할 경우, 해당 단계를 종료하기 전에 이러한 잘못된 단일 큐비트 게이트가 하드웨어에서 지원하는 연산으로 대체되도록 하기 위해 및/또는 Optimize1qGatesDecompositionBasisTranslator 같은 패스와 함께 사용해야 합니다.

이 패스는 멀티스레드 방식으로, 분석을 병렬로 수행하며 로컬 시스템에서 사용 가능한 모든 코어를 활용합니다. Qiskit의 스레딩 동작을 보다 포괄적으로 제어하는 방법에 대한 자세한 내용은 구성 가이드를 참조하시기 바랍니다. 이 가이드는 해당 패스의 동작도 제어하게 됩니다

이 패스는 패스 관리자에서 와 UnitarySynthesis 를 순차적으로 실행하는 ConsolidateBlocks 것과 기능이 비슷합니다. 그러나 이 패스는 합성 작업을 병렬로 수행함으로써 실행 성능을 향상시킵니다. 또한 단일 단계에서 최적화를 수행함으로써 향상된 휴리스틱 기법을 활용할 수 있으며, 이는 특히 과완전하거나 이질적인 타깃의 경우 더 높은 품질의 출력 결과를 얻을 수 있게 해줍니다. 그러나 이러한 휴리스틱과 이 패스 전체는 물리적 회로에 대해서만 유효합니다. 또한, ‘pass’와 달리 UnitarySynthesis 이 기능은 Unitary Synthesis 플러그인을 사용하지 않습니다. 이는 성능을 위한 절충안이며, 해당 인터페이스를 통해 제공되던 플러그인 기능을 포기하는 것입니다. 현재 내부적으로는 두 큐비트 유니터리를 합성하는 데 와 TwoQubitControlledUDecomposerTwoQubitBasisDecomposer 만 사용하고 있습니다. UnitarySynthesis플러그인 가능한 인터페이스와 다양한 합성 알고리즘을 사용해야 하는 경우에는 이 패스를 사용해서는 안 되며, 대신 와 UnitarySynthesisConsolidateBlocks 조합하여 의 플러그인 메커니즘을 활용해야 합니다.

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import TwoQubitPeepholeOptimization
from qiskit.providers.fake_provider import GenericBackendV2

# Build an unoptimized 2 qubit circuit
unoptimized = QuantumCircuit(2)
for i in range(10):
  if i % 2:
    unoptimized.cx(0, 1)
  else:
    unoptimized.cx(1, 0)
# Generate a target with random error rates
backend = GenericBackendV2(2, ["u", "cx"], coupling_map=[[0, 1], [1, 0]])
# Instantiate pass
peephole_pass = TwoQubitPeepholeOptimization(backend.target)
# Run pass and visualize output
optimized = peephole_pass(unoptimized)
optimized.draw("mpl")
최적화된 회로

패스 초기화

매개변수

  • 대상 – 패스를 실행할 대상
  • approximation_degree – 회로 근사화에 사용되는 휴리스틱 다이얼 ( 1.0=no 근사법, 0.0=maximal 근사법). 근사화를 통해 합성된 유니타리 연산자에 사용되는 게이트의 수를 줄일 수 있지만, 그 대가로 원래의 유니타리 연산자와의 차이가 발생할 수 있습니다. target만약 None, 이면, 에 명시된 게이트 충실도를 바탕으로 근사화가 수행됩니다.

속성

is_analysis_pass

이 패스가 분석 패스인지 확인하십시오.

패스가 ‘ AnalysisPass, ’인 경우, 해당 패스는 DAG를 분석하고 그 분석 결과를 속성 집합에 기록할 수 있음을 의미합니다. 이러한 종류의 패스에서는 DAG에 대한 수정이 허용되지 않습니다.

is_transformation_pass

이 패스가 변환 패스인지 확인하십시오.

패스가 TransformationPass,인 경우, 해당 패스는 DAG를 조작할 수 있지만 속성 집합을 수정할 수는 없습니다(단, 읽기는 가능합니다).


메소드

execute

execute(passmanager_ir, state, callback=None)

GitHub

입력된 Qiskit IR에 대해 최적화 작업을 실행합니다.

매개변수

  • passmanager_ir (DAGCircuit) – 최적화할 Qiskit IR.
  • state (DAGCircuit) – 패스 관리자 자체에 의한 워크플로 실행과 관련된 상태.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – 최적화 작업이 실행될 때마다 호출되는 콜백 함수입니다.

리턴

최적화된 Qiskit IR 및 워크플로우 현황.

리턴 유형

튜플 [ DAGCircuit, PassManagerState ]

name

name()

GitHub

고개 이름.

리턴 유형

str

run

run(dag)

GitHub

DAGCircuit에 대해 패스를 실행합니다. 이는 pass 개발자가 구현합니다.

매개변수

dag (DAGCircuit) – 패스가 실행되는 날.

인상

NotImplementedError – 이 기능이 한 패스 동안 구현되지 않은 채로 남을 때.

리턴 유형

DAGCircuit

update_status

update_status(state, run_state)

GitHub

워크플로우 상태를 업데이트합니다.

매개변수

  • state (PassManagerState) – 업데이트할 매니저 상태를 전달합니다.
  • run_state (RunState) – 현재 작업의 완료 상태.

리턴

패스 관리자 상태를 업데이트했습니다.

리턴 유형

PassManagerState

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.