Transpiler
Panoramica
La transpilazione è il processo di riscrittura di un determinato circuito di input affinché sia conforme ai criteri desiderati, quali i vincoli topologici e operativi dell'hardware utilizzato per l'esecuzione del circuito finale. Non approfondiremo questo argomento in questa sede, ma rimandiamo alla documentazione di Qiskit relativa al modulo qiskit.transpiler .
L'obiettivo in questa sede è spiegare come si effettua la transpilazione da un FermionicCircuit a un QuantumCircuit.
Fasi
Dal punto di vista concettuale, abbiamo suddiviso il processo di transpilazione in diverse fasi:
Fase | Descrizione |
|---|---|
| Input | convertire nella struttura dati DAG |
| Ottimizzazione | ottimizzazione a livello fermionico |
| Layout | progettazione della disposizione dei fermioni nei qubit |
| Sintesi | sintesi da fermioni a qubit |
| Qubit | transpilazione continua a livello di qubit |
| Output | convertire dalla struttura dati DAG |
Input
I vari passaggi del transpiler sono implementati in modo da utilizzare come FermionicDAGCircuit struttura dati sottostante per memorizzare le operazioni del circuito. Tali grafi aciclici diretti (DAG) offrono un modello di dati efficiente per la traversata e la manipolazione dei circuiti.
Tuttavia, è più probabile che un utente finale utilizzi un, poiché FermionicCircuit offre un’interfaccia e un modello di dati più intuitivi. Pertanto, questa fase di input esegue semplicemente il passaggio del transpiler FermionicCircuitToDAG .
Ottimizzazione
Questa fase della pipeline di transpilazione può implementare ottimizzazioni del circuito preservando al contempo il tipo del circuito come istanza di FermionicDAGCircuit. Pertanto, in questa fase della pipeline di transpilazione non sono necessarie (né necessariamente disponibili) informazioni sui qubit.
Layout
Un’impostazione di configurazione globale per il processo di transpilazione è il “layout” da fermioni a qubit. Questo deve essere specificato dall'utente e deve corrispondere alla mappatura fermione-qubit fornita (nel senso che, se una mappatura scelta codifica un numero fisso di fermioni con un numero diverso di qubit, la configurazione deve tenerne conto).
In generale, le modalità fermioniche non vengono sempre codificate nel registro dei qubit utilizzando una base di occupazione. Di conseguenza, non è possibile associare una singola modalità fermionica a un singolo qubit. Pertanto, la disposizione da fermioni a qubit fornita dall’utente (F2QLayout) associa FermionicRegister istanze a QuantumRegister quanti.
Rubrica 1 | Rubrica 2 |
|---|---|
F2QLayout | Una mappatura dei registri delle modalità fermioniche ai registri quantistici. |
Per configurare questa impostazione globale, è necessario inserire un’istanza F2QLayout nel campo f2q_layout del property_set. Per ulteriori dettagli, consultare la sezione “Passaggi di impaginazione ”.
Sintesi
In sostanza, la transpilazione viene gestita dal passaggio del transpiler F2QSynthesis . È concettualmente simile al comando pass HighLevelSynthesis di Qiskit, che utilizza vari plugin per la transpilazione di istruzioni di circuito di alto livello. Per ulteriori dettagli, consultare direttamente F2QSynthesis la documentazione.
Il modo in cui un dato FermionicGate possa essere sintetizzato in termini di operazioni basate sui qubit dipenderà dal tipo specifico di gate, nonché dalla mappatura da fermione a qubit scelta dall'utente. Per ulteriori dettagli, consultare la sezione " Plugin dei passaggi del transpiler ".
Qubit
A questo punto del processo di transpilazione, abbiamo raggiunto un’istanza DAGCircuit e possiamo continuare a utilizzare la pipeline di transpilazione di Qiskit come di consueto.
In futuro FermionicCircuit potrebbero essere aggiunti ulteriori passaggi del transpiler per ottimizzazioni a livello di qubit che tengano conto delle informazioni relative a un circuito provenienti da un!
Output
Questa fase implementa di fatto l'inverso dell' Input, richiamando il passaggio del transpiler QuantumDAGToCircuit .
Gestori delle pass
Tutte le fasi sopra indicate sono quelle predefinite, in base alle quali vengono coordinate presets le varie attività MultiStagePassManager.
Le singole fasi possono consistere in un unico passaggio (quando si passa da una rappresentazione interna (IR) a un’altra, come nel caso delle fasi di Input, Sintesi e Output sopra citate) oppure una fase può essere una struttura i cui BasePassManager passaggi interni possono essere modificati.
Per le fasi che operano su circuiti fermionici ( Ottimizzazione e Layout ), il tipo di passmanager da utilizzare è FermionicPassManager.
Rubrica 1 | Rubrica 2 |
|---|---|
FermionicPassManager( [attività, max_iterazioni] ) | Un gestore di passaggi del transpiler che converte FermionicCircuit da uno all’altro. |
Abbonamenti di conversione
Questo modulo fornisce direttamente alcune operazioni di conversione di base:
Rubrica 1 | Rubrica 2 |
|---|---|
FermionicCircuitToDAG() | Converte un in FermionicCircuit un FermionicDAGCircuit. |
FermionicDAGToCircuit() | Converte un in FermionicDAGCircuit un FermionicCircuit. |
QuantumDAGToCircuit() | Converte un in DAGCircuit un QuantumCircuit. |
Preimpostazioni
Per facilitare l'utilizzo, il qiskit_fermions.transpiler.presets modulo mette a disposizione una serie di funzioni che consentono di creare rapidamente pipeline di transpilazione predefinite.