Skip to main content
IBM Quantum Platform

SabreSwap

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

GitHub

Basi: TransformationPass

Mappare il circuito di ingresso su una topologia backend mediante l'inserimento di SWAP.

Implementazione della ricerca euristica basata su SWAP del documento SABRE sulla mappatura dei qubit [2] (Algoritmo 1) con le modifiche apportate dal documento [1] di LightSABRE. L'euristica mira a minimizzare il numero di SWAP con perdita inseriti e la profondità del circuito.

Questo algoritmo parte da una disposizione iniziale dei qubit virtuali sui qubit fisici e itera sul DAG del circuito fino a esaurire tutte le porte, inserendo SWAP lungo il percorso. Si considerano solo le porte a 2 qubit, poiché solo quelle sono rilevanti per il problema della mappatura (si presume che le porte a 3+ qubit siano già decomposte).

In ogni iterazione, controlla innanzitutto se nel sito front_layer ci sono porte che possono essere applicate direttamente. In caso affermativo, li applicherà e li rimuoverà da front_layer e, se possibile, reintegrerà lo strato con nuovi cancelli. Altrimenti, cercherà di cercare gli SWAP, di inserirli e di aggiornare la mappatura.

La ricerca degli SWAP è ristretta, nel senso che consideriamo solo i qubit fisici nelle vicinanze dei qubit coinvolti in front_layer. Questi danno origine a un sito swap_candidate_list che viene valutato in base a una funzione di costo euristica. Il miglior SWAP viene implementato e current_layout aggiornato.

Questo passaggio del transpiler integra l'algoritmo SABRE in quanto esegue più iterazioni dell'algoritmo utilizzando semi diversi. Tra le prove casuali verrà selezionato il risultato migliore, determinato dalla prova in cui è stato inserito il minor numero di SWAP.

Riferimenti:

[1] Henry Zou e Matthew Treinish e Kevin Hartman e Alexander Ivrii e Jake Lishman. “LightSABRE: Un algoritmo SABRE leggero e migliorato" arXiv:2409.08368 [2] Li, Gushu, Yufei Ding e Yuan Xie. "Affrontare il problema della mappatura dei qubit per i dispositivi quantistici dell'era NISQ" ASPLOS 2019. arXiv:1809.02573

SabreSwap inizializzatore.

Parametri

  • coupling_map (Union[CouplingMap, Target]) – CouplingMap del backend di destinazione.
  • heuristic (str) – Il tipo di euristica da utilizzare per decidere la migliore strategia di swap ("basic" o "lookahead" o "decay").
  • seed (int) – seme casuale utilizzato per il tie-break tra gli scambi di candidati.
  • fake_run (bool) – se vero, fa solo finta di fare il routing, cioè non viene aggiunto alcuno swap.
  • trials (int) – Il numero di prove di semina con cui eseguire Sabre. Questi verranno eseguiti in parallelo (a meno che il sito PassManager non sia già in esecuzione in parallelo). Se non viene specificato, il valore predefinito è il numero di CPU fisiche del sistema locale. Per ottenere risultati riproducibili, si consiglia di impostarlo esplicitamente, in quanto l'output sarà deterministico per un numero fisso di prove.

Aumenti

TranspilerError – Se l'euristica specificata non è valida.

Ulteriori informazioni:

Lo spazio di ricerca dei possibili SWAP sui qubit fisici viene esplorato assegnando un punteggio al layout che risulterebbe da ogni SWAP. La bontà di un layout viene valutata in base a quanto rende praticabili le rimanenti porte virtuali che devono essere applicate. Sono supportate alcune funzioni di costo euristiche

  • 'base':

Somma delle distanze dei qubit fisici corrispondenti ai qubit virtuali interagenti nello strato anteriore.

Hbasic=gateFD[π(gate.q1)][π(gate.q2)]H_{basic} = \sum_{gate \in F} D[\pi(gate.q_1)][\pi(gate.q2)]
  • 'lookahead':

Si tratta della somma di due costi: il primo è uguale al costo base. Il secondo è il costo base, ma ora calcolato anche per l'insieme esteso (ovvero un numero E|E| e di successori a venire dei gate nel livello anteriore F). Questo valore viene ponderato con un fattore EXTENDED_SET_WEIGHT (W) per indicare che i gate successivi sono meno importanti rispetto allo strato anteriore.

Hdecay=1FgateFD[π(gate.q1)][π(gate.q2)]+W1EgateED[π(gate.q1)][π(gate.q2)]H_{decay}=\frac{1}{\left|{F}\right|}\sum_{gate \in F} D[\pi(gate.q_1)][\pi(gate.q2)] + W*\frac{1}{\left|{E}\right|} \sum_{gate \in E} D[\pi(gate.q_1)][\pi(gate.q2)]
  • 'decadimento':

È la stessa cosa del "lookahead", ma l'intero costo viene moltiplicato per un fattore di decadimento. Questo aumenta il costo se lo SWAP che ha generato il layout di prova è stato usato di recente (cioè penalizza l'aumento della profondità).

Hdecay=max(decay(SWAP.q1),decay(SWAP.q2))1FgateFD[π(gate.q1)][π(gate.q2)]+W1EgateED[π(gate.q1)][π(gate.q2)]H_{decay} = max(decay(SWAP.q_1), decay(SWAP.q_2)) { \frac{1}{\left|{F}\right|} \sum_{gate \in F} D[\pi(gate.q_1)][\pi(gate.q2)]\\ + W *\frac{1}{\left|{E}\right|} \sum_{gate \in E} D[\pi(gate.q_1)][\pi(gate.q2)] }

Attributi

coupling_map

dist_matrix

is_analysis_pass

Controlla se il passaggio è un passaggio di analisi.

Se il passo è un AnalysisPass,, significa che il passo può analizzare il DAG e scrivere i risultati di tale analisi nel set di proprietà. Questo tipo di passaggio non consente di modificare il DAG.

is_transformation_pass

Controlla se il passaggio è un passaggio di trasformazione.

Se il passaggio è un TransformationPass,, significa che il passaggio può manipolare il DAG, ma non può modificare il set di proprietà (ma può essere letto).


Metodi

execute

execute(passmanager_ir, state, callback=None)

GitHub

Eseguire l'attività di ottimizzazione per l'IR Qiskit in ingresso.

Parametri

  • passmanager_ir (DAGCircuit) – Qiskit IR da ottimizzare.
  • state (DAGCircuit) – Stato associato all'esecuzione del flusso di lavoro da parte dello stesso gestore dei passaggi.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione di un'attività di ottimizzazione.

Risultati

Qiskit IR ottimizzato e stato del flusso di lavoro.

Tipo di restituzione

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nome del passo.

Tipo di restituzione

STR

run

run(dag)

GitHub

Eseguire il passaggio SabreSwap su dag.

Parametri

dag (DAGCircuit) – il grafo aciclico diretto da mappare.

Risultati

Un dag mappato per essere compatibile con la coupling\map.

Tipo di restituzione

DAGCircuito

Aumenti

  • TranspilerError – se la mappa di accoppiamento o il layout non sono
  • *compatibile con il DAG***, o ** se la mappa di accoppiamento=None -

update_status

update_status(state, run_state)

GitHub

Aggiornare lo stato del flusso di lavoro.

Parametri

  • state (PassManagerState) – Passare lo stato del gestore da aggiornare.
  • run_state (RunState) – Stato di completamento dell'attività corrente.

Risultati

Stato aggiornato del gestore dei passaggi.

Tipo di restituzione

PassManagerState

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.