Transpileur
Présentation
La transpilation est le processus consistant à réécrire un circuit d'entrée donné afin de le rendre conforme à des critères souhaités, tels que les contraintes topologiques et opérationnelles du matériel utilisé pour l'exécution du circuit final. Nous n'allons pas approfondir ce sujet ici; nous vous renvoyons plutôt à la documentation de Qiskit concernant ce module qiskit.transpiler .
L'objectif ici est d'expliquer comment nous procédons à la transpilation d'un vers FermionicCircuit un QuantumCircuit.
Etapes
D'un point de vue conceptuel, nous divisons le processus de transpilation en plusieurs étapes :
Etape | Description |
|---|---|
| Entrée | convertir en structure de données DAG |
| Optimisation | optimisation au niveau des fermions |
| Présentation | Disposition des fermions vers les qubits |
| Synthèse | synthèse de fermions en qubits |
| Qubit | poursuite de la transpilation au niveau des qubits |
| sortie | convertir à partir de la structure de données DAG |
Entrée
Les différentes étapes du transpileur sont conçues pour fonctionner avec FermionicDAGCircuit comme structure de données sous-jacente permettant de stocker les opérations du circuit. Ces graphes acycliques orientés (DAG) constituent un modèle de données efficace pour la traversée et la manipulation des circuits.
Cependant, un utilisateur final est plus susceptible d'utiliser un FermionicCircuit car celui-ci offre une interface et un modèle de données plus intuitifs. Ainsi, cet étage d'entrée se contente d'exécuter la passe de transpilation FermionicCircuitToDAG .
Optimisation
Cette étape du pipeline de transpilation permet de mettre en œuvre des optimisations du circuit tout en conservant le type de ce dernier en tant qu'instance de FermionicDAGCircuit. De ce fait, aucune information relative aux qubits n'est requise (ni nécessairement disponible) à ce stade du processus de transpilation.
Présentation
L'un des paramètres de configuration globaux du processus de transpilation est la « disposition » des fermions en qubits. Cette information doit être fournie par l'utilisateur et doit correspondre à la correspondance fermion-qubit indiquée (en ce sens que, si la correspondance choisie code un nombre fixe de fermions à l'aide d'un nombre différent de qubits, la configuration doit en tenir compte).
En règle générale, les modes fermioniques ne sont pas toujours codés dans le registre de qubits à l'aide d'une base d'occupation. Par conséquent, il n'est pas possible d'associer un mode fermionique unique à un qubit unique. Par conséquent, la configuration « fermions vers qubits » fournie par l'utilisateur (F2QLayout) associe FermionicRegister instances à QuantumRegister qubits.
Chronique « 1 » | Chronique « 2 » |
|---|---|
F2QLayout | Une mise en correspondance entre les registres de modes fermioniques et les registres quantiques. |
Pour configurer ce paramètre global, il suffit d'insérer une instance F2QLayout dans le champ f2q_layout du fichier property_set. Pour plus de détails, consultez la section « Passes de mise en page ».
Synthèse
Fondamentalement, la transpilation est gérée par le passage de transpilation F2QSynthesis . Ce concept est similaire à celui du « pass HighLevelSynthesis » de Qiskit, qui utilise divers plugins pour transcompiler des instructions de circuit de haut niveau. Pour plus d'informations, consultez directement F2QSynthesis la documentation.
La manière dont un état donné peut FermionicGate être synthétisé à l'aide d'opérations basées sur des qubits dépendra du type de porte utilisé ainsi que de la correspondance fermion-qubit choisie par l'utilisateur. Pour plus d'informations, consultez la section « Plug-ins de passe de transpileur ».
Qubit
À ce stade du processus de transpilation, nous sommes parvenus à une instance DAGCircuit et pouvons continuer à utiliser le pipeline de transpilation de Qiskit comme d’habitude.
D'autres passes du transpiler destinées à des optimisations au niveau des qubits, qui tiennent compte des informations sur un circuit provenant d'un [...], FermionicCircuit pourraient être ajoutées à l'avenir!
Sortie
Cette étape met en œuvre, en substance, l'opération inverse de « Input », en appelant la passe de transpilation QuantumDAGToCircuit .
Gestionnaires de forfaits
Toutes les étapes ci-dessus correspondent aux étapes par défaut définies par la manière dont les différents éléments sont coordonnés presetsMultiStagePassManager .
Les étapes individuelles peuvent correspondre soit à un passage unique (lorsqu’elles passent d’une représentation interne (IR) à une autre, comme les étapes « Entrée », « Synthèse » et « Sortie » ci-dessus), soit à une étape BasePassManager dont les passages internes peuvent être modifiés.
Pour les étapes s'exécutant sur des circuits fermioniques ( Optimisation et Disposition ), le type de gestionnaire de passes à utiliser est FermionicPassManager.
Chronique « 1 » | Chronique « 2 » |
|---|---|
FermionicPassManager( [tâches, max_itérations] ) | Un gestionnaire de passes de transpilateur permettant de convertir l’un FermionicCircuit en l’autre. |
Pass de conversion
Ce module propose directement quelques opérations de conversion très simples :
Chronique « 1 » | Chronique « 2 » |
|---|---|
FermionicCircuitToDAG() | Convertit un en FermionicCircuit un FermionicDAGCircuit. |
FermionicDAGToCircuit() | Convertit un en FermionicDAGCircuit un FermionicCircuit. |
QuantumDAGToCircuit() | Convertit un en DAGCircuit un QuantumCircuit. |
Préréglages
Pour faciliter la tâche des utilisateurs, le qiskit_fermions.transpiler.presets module propose plusieurs fonctions permettant de créer rapidement des pipelines de transpilation prédéfinis.