SabreLayout
class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)
Basi: TransformationPass
Scegliere un layout tramite instradamento iterativo bidirezionale del circuito di ingresso.
Partendo da un Layout iniziale casuale, l'algoritmo esegue un instradamento completo del circuito (tramite il metodo routing_pass) per arrivare al layout finale. Questo layout finale viene quindi utilizzato come layout iniziale per l'instradamento del circuito inverso. L'algoritmo itera un certo numero di volte finché non trova un layout iniziale che riduca il costo di instradamento completo.
Questo metodo sfrutta la reversibilità dei circuiti quantistici e cerca di includere informazioni globali sul circuito nella scelta del layout iniziale.
Per impostazione predefinita, questa fase eseguirà sia il layout che il routing e trasformerà il circuito in modo tale che il layout venga applicato al DAG di input (il che significa che il circuito di output avrà qubit ancillari assegnati ai qubit inutilizzati nella mappa di accoppiamento e che i qubit saranno riordinati per corrispondere ai qubit fisici mappati); successivamente verrà applicato il routing (inserendo SwapGate oggetti per tenere conto della connettività limitata). A differenza della maggior parte degli altri passaggi di layout, che sono AnalysisPass oggetti e si limitano a individuare un layout iniziale per poi impostarlo nel set di proprietà. Questo avviene perché, per impostazione predefinita, il passaggio esegue prove parallele con semi casuali diversi per selezionare la disposizione iniziale casuale e quindi l'uscita instradata che richiede il minor numero possibile di porte di scambio.
È possibile utilizzare l'argomento routing_pass per far funzionare questo passaggio come un tipico passaggio di layout. Se specificata, questa opzione utilizza il passaggio di instradamento specificato solo per selezionare un layout iniziale e non esegue prove di semina multiple.
Oltre a partire da un Layout iniziale casuale, il passaggio può anche accogliere un elenco aggiuntivo di layout di partenza che verrà utilizzato per ulteriori prove. Se sabre_starting_layouts è presente nell'insieme di proprietà quando viene eseguito questo passaggio, verrà utilizzato per ulteriori prove. Ci saranno ancora layout_trials di layout di partenza completi e casuali e i contenuti di sabre_starting_layouts saranno eseguiti in aggiunta a questi. Verrà utilizzata l'uscita che risulta nella quantità minore di porte di scambio (sia dalle prove casuali che dal punto di partenza impostato sulla proprietà). Il valore di questo campo dell'insieme di proprietà deve essere un elenco di oggetti Layout di oggetti che rappresentano i layout iniziali da utilizzare. Se un qubit virtuale manca da un Layout nell'elenco, verrà selezionato un qubit casuale.
Campi impostati sulla proprietà Lettura
sabre_starting_layouts (list[Layout])
Un elenco opzionale di Layout da usare per ulteriori prove di layout. Questo si aggiunge alle prove casuali complete specificate con l'argomento layout_trials .
Valori impostati per la proprietà scritti
layout (Layout)
La mappatura iniziale scelta dei qubit virtuali e fisici, compresa l'allocazione dell'ancilla.
final_layout (Layout)
Una permutazione di come sono stati applicati gli swap ai qubit di ingresso alla fine del circuito.
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
SabreLayout inizializzatore.
parametri mappa di accoppiamento
grafo diretto che rappresenta una mappa di accoppiamento.
tipo accoppiamento_mappa
UnionCouplingMap[, Obiettivo]
parametro routing_pass
il passaggio di instradamento da utilizzare durante l'iterazione. Se specificato, questo passaggio funziona come un AnalysisPass e popolerà solo il campo layout nell'insieme di proprietà e il dag in ingresso verrà restituito non modificato. Questo argomento è mutuamente esclusivo con gli argomenti swap_trials e layout_trials e se viene specificato contemporaneamente a uno dei due argomenti, verrà sollevato un errore.
tipo routing_pass
BasePass
parametri seme
per impostare un layout casuale per la prima prova.
tipo di seme
int
parametri max_iterazioni
numero di iterazioni avanti-indietro.
tipo max_iterations
int
parametri swap\_trials
Il numero di prove da eseguire di SabreSwap per ogni iterazione. Questo è equivalente all'argomento trials su SabreSwap. Se non viene specificato (e routing_pass non è impostato), per impostazione predefinita verrà utilizzato il numero di CPU fisiche del sistema locale. Per la riproducibilità tra ambienti, è meglio impostare un numero esplicito, perché l'output dipenderà potenzialmente dal numero di prove eseguite. Questa opzione è mutuamente esclusiva con l'argomento routing_pass e verrà sollevato un errore se vengono utilizzate entrambe.
tipo swap_trials
int
parametri layout_trials
Il numero di prove casuali con cui eseguire il layout. Quando > 1 viene selezionato il processo che produce l'uscita con il minor numero di porte di scambio. Se non viene specificato (e routing_pass non è impostato), verrà utilizzato come valore predefinito il numero di CPU fisiche locali. Questa opzione è mutuamente esclusiva con l'argomento routing_pass e verrà sollevato un errore se vengono utilizzate entrambe. Vengono eseguite altre 3 o 4 prove, a seconda del valore di coupling_map , con layout comuni, oltre al numero di prove casuali specificato da questo valore.
tipo layout_trials
int
parametro skip_routing
Se si imposta True e non si utilizza routing_pass , il routing non verrà applicato al circuito di uscita. Nel set di proprietà verrà impostato solo il layout. Si tratta di un compromesso per eseguire l'instradamento personalizzato con prove di layout multiple, in quanto l'uso di questa opzione fa sì che SabreLayout esegua internamente lo stadio di instradamento ma non utilizzi il risultato.
tipo skip_routing
bool
aumenti TranspilerError
Se sia routing_pass che swap_trials o
solleva sia routing_pass che layout_trials sono specificati
Attributi
coupling_map
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 SabreLayout su dag.
Parametri
dag (DAGCircuit) – DAG per cui trovare il layout.
Risultati
Il dag di uscita se è stata eseguita la mappatura di swap
(altrimenti il dag in ingresso viene restituito non modificato).
Tipo di restituzione
Aumenti
TranspilerError – se il dag è più largo del bersaglio.
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