SabreSwap
class qiskit.transpiler.passes.SabreSwap(*args, **kwargs)
Bases : TransformationPass
Cartographier le circuit d'entrée sur une topologie de backend par l'insertion de SWAPs.
Mise en œuvre de la recherche heuristique basée sur le SWAP de l'article [2] sur la cartographie des qubits de SABRE (algorithme 1) avec les modifications de l'article [1] de LightSABRE. L'heuristique vise à minimiser le nombre de SWAP avec pertes insérés et la profondeur du circuit.
Cet algorithme part d'une disposition initiale des qubits virtuels sur les qubits physiques, et itère sur le DAG du circuit jusqu'à ce que toutes les portes soient épuisées, en insérant des SWAP en cours de route. Il ne prend en compte que les portes à 2 qubits, car seules celles-ci sont pertinentes pour le problème de la mise en correspondance (on suppose que les portes à 3+ qubits sont déjà décomposées).
À chaque itération, il vérifie d'abord s'il existe des portes dans le site front_layer qui peuvent être directement appliquées. Si c'est le cas, il les appliquera et les retirera de front_layer, et reconstituera cette couche avec de nouveaux portails si possible. Dans le cas contraire, il essaiera de rechercher des SWAP, d'insérer les SWAP et de mettre à jour la cartographie.
La recherche de SWAPs est restreinte, dans le sens où nous ne considérons que les qubits physiques dans le voisinage des qubits impliqués dans front_layer. Ceux-ci donnent lieu à un site swap_candidate_list qui est noté en fonction d'une fonction de coût heuristique. La meilleure approche sectorielle est mise en œuvre et current_layout est mis à jour.
Cette étape du transpileur complète l'algorithme SABRE en ce sens qu'elle effectue plusieurs exécutions de l'algorithme avec différentes graines. Parmi les essais aléatoires, on retiendra le meilleur résultat, déterminé par l'essai comportant le moins de SWAP insérés.
Références :
[1] Henry Zou et Matthew Treinish et Kevin Hartman et Alexander Ivrii et Jake Lishman. “LightSABRE: Un algorithme SABRE léger et amélioré" arXiv:2409.08368 [2] Li, Gushu, Yufei Ding, et Yuan Xie. "S'attaquer au problème du mappage des qubits pour les dispositifs quantiques de l'ère NISQ" ASPLOS 2019. arXiv:1809.02573
SabreSwap initialisateur.
Paramètres
- coupling_map (Union[CouplingMap, Target]) – CouplingMap du backend cible.
- heuristic (str) – Le type d'heuristique à utiliser pour décider de la meilleure stratégie de swap ("basic" ou "lookahead" ou "decay").
- seed (int) – la graine aléatoire utilisée pour départager les candidats à l'échange.
- fake_run (bool) – si vrai, il fait seulement semblant de faire du routage, c'est-à-dire qu'aucun échange n'est effectivement ajouté.
- trials (int) – Le nombre d'essais de semences à effectuer avec sabre. Ils seront exécutés en parallèle (à moins que le site PassManager ne soit déjà exécuté en parallèle). Si elle n'est pas spécifiée, la valeur par défaut est le nombre d'unités centrales physiques sur le système local. Pour obtenir des résultats reproductibles, il est recommandé de définir ce paramètre explicitement, car la sortie sera déterministe pour un nombre fixe d'essais.
Augmentations
TranspilerError – Si l'heuristique indiquée n'est pas valide.
Information supplémentaires :
L'espace de recherche des SWAP possibles sur les qubits physiques est exploré en attribuant un score à la disposition qui résulterait de chaque SWAP. La qualité d'une présentation est évaluée en fonction de la viabilité des portes virtuelles restantes qui doivent être appliquées. Quelques fonctions de coût heuristiques sont prises en charge
- 'basic' :
La somme des distances entre les qubits physiques correspondants et les qubits virtuels en interaction dans la couche frontale.
- 'lookahead' :
Il s'agit de la somme de deux coûts : le premier correspond au coût de base. Le deuxième élément est le coût de base, mais il est désormais évalué pour l'ensemble étendu également (c'est-à-dire nombre de successeurs à venir des portes de la couche F). Cette valeur est pondérée par un coefficient EXTENDED_SET_WEIGHT (W) afin d'indiquer que les portes suivantes sont moins importantes que la couche avant.
- 'decay' :
C'est la même chose que le "lookahead", mais le coût total est multiplié par un facteur de décroissance. Cela augmente le coût si le SWAP qui a généré le schéma d'essai a été utilisé récemment (c'est-à-dire que cela pénalise l'augmentation de la profondeur).
Attributs
coupling_map
dist_matrix
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 SabreSwap sur dag.
Paramètres
dag (DAGCircuit) – le graphe acyclique dirigé à mettre en correspondance.
Retours
Un dag mappé pour être compatible avec le coupling_map.
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