Skip to main content
IBM Quantum Platform

SabreLayout

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

GitHub

베이스: TransformationPass

입력 회로의 반복적인 양방향 라우팅을 통해 레이아웃을 선택합니다.

알고리즘은 임의의 초기 레이아웃으로 시작하여 라우팅_pass 메서드를 통해 회로의 전체 라우팅을 수행하여 최종_ 레이아웃으로 끝냅니다. 이 최종_레이아웃은 역회로를 라우팅하기 위한 초기_레이아웃으로 사용됩니다. 알고리즘은 전체 라우팅 비용을 줄이는 초기_ 레이아웃을 찾을 때까지 여러 번 반복합니다.

이 방법은 양자 회로의 가역성을 활용하며, 초기_layout 선택에 전역 회로 정보를 포함하려고 합니다.

기본적으로 이 단계에서는 레이아웃과 라우팅을 모두 수행하며, 레이아웃이 입력 DAG에 적용되도록 회로를 변환합니다(즉, 출력 회로에는 커플링 맵에서 사용되지 않는 큐비트에 대해 보조 큐비트가 할당되고, 매핑된 물리적 큐비트와 일치하도록 큐비트의 순서가 재정렬됩니다). 그 후 라우팅이 적용되어(연결성 제한을 고려하여 객체를 SwapGate 삽입합니다). 이는 AnalysisPass 객체로서 초기 레이아웃을 찾아서 속성 집합에 설정하는 대부분의 다른 레이아웃 처리 과정과는 다릅니다. 이렇게 하는 이유는, 기본적으로 이 패스가 무작위 초기 레이아웃을 선택하기 위해 서로 다른 무작위 시드(seed)를 사용하여 병렬 시드 시뮬레이션을 수행한 다음, 필요한 스왑 게이트 수가 가장 적은 라우팅된 출력을 선택하기 때문입니다.

routing_pass 인수를 사용하여 이 패스가 일반적인 레이아웃 패스로 작동하도록 할 수 있습니다. 이 옵션을 지정하면 지정된 라우팅 패스를 사용하여 초기 레이아웃만 선택하며 여러 시드 트라이얼을 실행하지 않습니다.

패스는 무작위 초기 레이아웃으로 시작하는 것 외에도 추가 시험에 사용할 추가 시작 레이아웃 목록을 가져올 수 있습니다. 이 패스가 실행될 때 속성 세트에 sabre_starting_layouts 이 있으면 추가 평가판에 사용됩니다. 전체 무작위 시작 레이아웃의 layout_trials 콘텐츠가 계속 실행되며 sabre_starting_layouts 콘텐츠가 추가로 실행됩니다. 랜덤 트라이얼 또는 속성 세트 시작점에서 가장 적은 양의 스왑 게이트를 생성하는 출력이 사용됩니다. 이 속성 세트 필드의 값은 사용할 시작 레이아웃을 나타내는 Layout 객체의 목록이어야 합니다. 목록에 있는 객체에서 가상 큐비트가 누락된 경우 Layout 객체에서 가상 큐비트가 누락된 경우 임의의 큐비트가 선택됩니다.


속성 집합 필드 읽기

sabre_starting_layouts (list[Layout])

추가 레이아웃 평가판에 사용할 Layout 객체의 선택적 목록입니다. 이는 layout_trials 인수로 지정된 전체 무작위 평가판에 추가됩니다.


속성 집합 값 기록됨

layout (Layout)

선택된 가상 큐비트와 물리적 큐비트의 초기 매핑(앤실라 할당 포함)입니다.

final_layout (Layout)

회로의 끝에서 입력 큐비트에 스왑이 어떻게 적용되었는지에 대한 순열입니다.

참조 자료:

[1] 헨리 조우, 매튜 트레이니쉬, 케빈 하트만, 알렉산더 이브리, 제이크 리쉬먼. “LightSABRE: 가볍고 향상된 SABRE 알고리즘" arXiv:2409.08368 [2] 리, 구슈, 유페이 딩, 위안 시에. "NISQ 시대의 양자 디바이스를 위한 큐비트 매핑 문제 해결." ASPLOS 2019. arXiv:1809.02573

SabreLayout 이니셜라이저.

매개변수 커플링_맵

커플링 맵을 나타내는 방향 그래프입니다.

유형 커플링_맵

유니온커플링맵[, Target]

매개변수 라우팅_pass

반복하는 동안 사용할 라우팅 패스를 설정합니다. 지정하면 이 패스는 AnalysisPass 로 작동하며 속성 세트의 layout 필드만 채우고 입력된 dag는 수정되지 않은 상태로 반환됩니다. 이 인수는 swap_trialslayout_trials 인수와 상호 배타적이며, 두 인수와 동시에 지정하면 오류가 발생합니다.

유형 라우팅_pass

BasePass

매개변수 시드

시드를 사용하여 무작위 첫 번째 평가판 레이아웃을 설정할 수 있습니다.

유형 시드

int

파라미터 최대_이터레이션

순방향-역방향 반복 횟수입니다.

최대_이터레이션 유형

int

파라미터 스왑_트라이얼

각 반복에 대해 실행할 시도 횟수 SabreSwap 를 실행할 횟수입니다. 이는 trials 인수의 SabreSwap. 이 값을 지정하지 않으면( routing_pass 설정하지 않으면) 기본적으로 로컬 시스템의 물리적 CPU 수가 사용됩니다. 환경 간 재현성을 위해 이 값을 명시적인 숫자로 설정하는 것이 가장 좋은데, 이는 잠재적으로 실행 횟수에 따라 결과가 달라질 수 있기 때문입니다. 이 옵션은 routing_pass 인수와 상호 배타적이며 둘 다 사용하면 오류가 발생합니다.

유형 스왑_trials

int

파라미터 레이아웃_시험판

레이아웃을 실행할 무작위 시드 트라이얼의 수입니다. 1보다 크면 가장 적은 스왑 게이트로 출력을 생성하는 트라이얼이 선택됩니다. 이를 지정하지 않으면( routing_pass 설정하지 않으면) 로컬 물리적 CPU 수가 기본값으로 사용됩니다. 이 옵션은 routing_pass 인수와 상호 배타적이며 둘 다 사용하면 오류가 발생합니다. coupling_map 값에 따라 이 값으로 지정된 무작위 시도 횟수 위에 공통 레이아웃을 사용하여 추가로 3~4번의 시도가 실행됩니다.

유형 레이아웃_트라이얼

int

파라미터 건너뛰기_라우팅

True 으로 설정하고 routing_pass 을 사용하지 않으면 출력 회로에 라우팅이 적용되지 않습니다. 속성 세트에는 레이아웃만 설정됩니다. 이 옵션을 사용하면 SabreLayout 내부적으로 라우팅 단계를 실행하지만 그 결과는 사용하지 않으므로 여러 레이아웃을 시도하여 사용자 지정 라우팅을 실행하는 데는 이 옵션이 절충안입니다.

유형 스킵_라우팅

부울

레이즈 TranspilerError

routing_passswap_trials 또는

를 올리면 routing_passlayout_trials 모두 지정됩니다


속성

coupling_map

is_analysis_pass

패스가 분석 패스인지 확인합니다.

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

is_transformation_pass

패스가 변환 패스인지 확인합니다.

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


메소드

execute

execute(passmanager_ir, state, callback=None)

GitHub

입력된 키스킷 IR에 대한 최적화 작업을 실행합니다.

매개변수

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

리턴

최적화된 키스킷 IR 및 워크플로 상태.

리턴 유형

튜플 [ DAGCircuit, PassManagerState ]

name

name()

GitHub

패스 이름.

리턴 유형

str

run

run(dag)

GitHub

Dag에서 SabreLayout 패스를 실행합니다.

매개변수

dag (DAGCircuit) – DAG에 대한 레이아웃을 찾습니다.

리턴

스왑 매핑이 실행된 경우 출력 dag

(그렇지 않으면 입력된 dag가 수정되지 않은 상태로 반환됩니다).

리턴 유형

DAGCircuit

레이즈

TranspilerError – dag가 대상보다 넓을 경우.

update_status

update_status(state, run_state)

GitHub

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

매개변수

  • state (PassManagerState) – 관리자 상태를 전달하여 업데이트합니다.
  • run_state (RunState) – 현재 작업의 완료 상태입니다.

리턴

패스 관리자 상태가 업데이트되었습니다.

리턴 유형

PassManagerState

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