LookaheadSwap
class qiskit.transpiler.passes.LookaheadSwap(*args, **kwargs)
Bases : TransformationPass
Cartographier le circuit d'entrée sur une topologie de backend par l'insertion de SWAPs.
Implémentation du swap mapper de Sven Jandura soumis au 2018 Qiskit Developer Challenge, adapté pour s'intégrer dans l'architecture du transpiler.
Le rôle de la passe de permutation est de modifier le circuit de départ pour le rendre compatible avec la topologie du dispositif cible (l'ensemble des portes à deux qubits disponibles sur le matériel) Pour ce faire, la passe insère des portes SWAP afin de relocaliser les qubits virtuels pour chaque porte à venir sur un ensemble de qubits physiques couplés. Cependant, comme les portes SWAP sont particulièrement coûteuses, l'objectif est d'effectuer ce remappage en introduisant le moins possible de SWAP supplémentaires.
Cet algorithme recherche les combinaisons disponibles de portes SWAP au moyen d'une recherche restreinte de la meilleure première porte/du meilleur faisceau, décrite comme suit :
- Commencez par une disposition des qubits virtuels sur les qubits physiques.
- Trouver toutes les portes du circuit d'entrée qui peuvent être exécutées avec la disposition actuelle et les marquer comme mappées.
- Pour toutes les portes SWAP possibles, calculez la disposition qui résulterait de leur application et classez-les en fonction de la distance de la disposition résultante par rapport aux portes à venir (voir _calc_layout_distance.)
- Pour les quatre SWAP (search_width) les mieux classés, répéter le processus ci-dessus sur la mise en page qui serait générée s'ils étaient appliqués.
- Répétez ce processus jusqu'à une profondeur de quatre (search_depth) SWAP à partir de la disposition initiale, pour un total de 256 (search_width^search_depth) dispositions prospectives.
- Choisissez la disposition qui maximise le nombre de qubits doubles pouvant être effectués. Ajoutez ses portes mappées, y compris les SWAPs générées, au circuit de sortie.
- Répétez l'opération ci-dessus jusqu'à ce que toutes les portes du circuit initial soient mappées.
Pour plus de détails sur l'algorithme, voir l'article de blog de Sven : https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084
LookaheadSwap initialisateur.
Paramètres
- coupling_map (Union[CouplingMap, Target]) – CouplingMap du backend cible.
- search_depth (int) – la profondeur de l'arbre en amont lors du classement des meilleures options SWAP.
- search_width (int) – la largeur de l'arbre en amont lors du classement des meilleures options SWAP.
- fake_run (bool) – si vrai, il fera seulement semblant de faire du routage, c'est-à-dire qu'aucun échange n'est effectivement ajouté.
Attributs
is_analysis_pass
Vérifier si la passe est une passe d'analyse.
Si le passe est un AnalysisPass,, cela signifie qu'il peut analyser le DAG et écrire les résultats de cette analyse dans l'ensemble de propriétés. Les modifications sur le DAG ne sont pas autorisées par ce type de passe.
is_transformation_pass
Vérifier si le laissez-passer est un laissez-passer de transformation.
Si la passe est une TransformationPass,, cela signifie qu'elle peut manipuler le DAG, mais qu'elle ne peut pas modifier l'ensemble des propriétés (mais qu'elle peut les lire).
Méthodes
execute
execute(passmanager_ir, state, callback=None)
Exécuter la tâche d'optimisation pour l'entrée Qiskit IR.
Paramètres
- passmanager_ir (DAGCircuit) – IR Qiskit à optimiser.
- state (DAGCircuit) – État lié à l'exécution du flux de travail par le gestionnaire de passes lui-même.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Une fonction de rappel qui est appelée à chaque exécution d'une tâche d'optimisation.
Retours
Qiskit IR optimisé et état du flux de travail.
Type de retour
name
run
run(dag)
Exécuter la passe LookaheadSwap sur dag.
Paramètres
dag (DAGCircuit) – le graphe acyclique dirigé à mettre en correspondance
Retours
Un dag mappé pour être compatible avec le coupling_map en
l'ensemble des biens.
Type de retour
Augmentations
- TranspilerError – si la carte de couplage ou la disposition ne sont pas
- compatible avec le DAG**, ou **si le coupling_map=None -
update_status
update_status(state, run_state)
Mettre à jour le statut du flux de travail.
Paramètres
- state (PassManagerState) – Transmettre l'état du gestionnaire à mettre à jour.
- run_state (RunState) – Statut d'achèvement de la tâche en cours.
Retours
Mise à jour de l'état du gestionnaire de passe.
Type de retour