Skip to main content
IBM Quantum Platform

LookaheadSwap

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

GitHub

Basi: TransformationPass

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

Implementazione dello swap mapper presentato da Sven Jandura per la Qiskit Developer Challenge 2018, adattato per essere integrato nell'architettura del transpiler.

Il ruolo del passaggio swapper è quello di modificare il circuito di partenza per renderlo compatibile con la topologia del dispositivo di destinazione (l'insieme delle porte a due qubit disponibili nell'hardware) A tal fine, il passaggio inserisce dei gate SWAP per riposizionare i qubit virtuali per ogni gate successivo su una serie di qubit fisici accoppiati. Tuttavia, dato che le porte SWAP sono particolarmente soggette a perdite, l'obiettivo è realizzare questa rimappatura introducendo il minor numero possibile di SWAP aggiuntivi.

Questo algoritmo cerca tra le combinazioni disponibili di porte SWAP mediante una ricerca ristretta del miglior primo raggio, descritta come segue:

  • Si parte da una disposizione dei qubit virtuali sui qubit fisici.
  • Individuare le porte del circuito di ingresso che possono essere eseguite con il layout corrente e contrassegnarle come mappate.
  • Per tutte le possibili porte SWAP, calcolare il layout che risulterebbe dalla loro applicazione e classificarle in base alla distanza del layout risultante rispetto alle porte successive (vedere _calc_layout_distance)
  • Per i quattro SWAP (larghezza di ricerca) di rango più elevato, ripetere il processo precedente sul layout che verrebbe generato se venissero applicati.
  • Ripetete questo processo fino a una profondità di quattro (search\depth) SWAP dal layout iniziale, per un totale di 256 (search_width^search\depth) layout prospettici.
  • Scegliere la disposizione che massimizza il numero di due-qubit che possono essere eseguiti. Aggiungere le porte mappate, compresi gli SWAP generati, al circuito di uscita.
  • Ripetere l'operazione fino a quando tutte le porte del circuito iniziale sono state mappate.

Per maggiori dettagli sull'algoritmo, vedere il post di Sven sul blog: https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084

LookaheadSwap inizializzatore.

Parametri

  • coupling_map (Union[CouplingMap, Target]) – CouplingMap del backend di destinazione.
  • search_depth (int) – profondità dell'albero lookahead quando si classificano le migliori opzioni SWAP.
  • search_width (int) – larghezza dell'albero lookahead quando si classificano le migliori opzioni SWAP.
  • fake_run (bool) – se vero, farà solo finta di fare il routing, cioè non verrà aggiunto alcuno swap.

Attributi

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 LookaheadSwap su dag.

Parametri

dag (DAGCircuit) – il grafo aciclico diretto da mappare

Risultati

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

il set di proprietà.

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.