LookaheadSwap
class qiskit.transpiler.passes.LookaheadSwap(*args, **kwargs)
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)
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
name
run
run(dag)
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
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)
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