Skip to main content
IBM Quantum Platform

LookaheadSwap

class qiskit.transpiler.passes.LookaheadSwap(*args, **kwargs)

GitHub

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)

GitHub

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

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nom du laissez-passer.

Type de retour

str

run

run(dag)

GitHub

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

DAGCircuit

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)

GitHub

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

PassManagerState

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.