SabreLayout
class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)
Bases : TransformationPass
Choisir une disposition par routage bidirectionnel itératif du circuit d'entrée.
En partant d'une disposition initiale aléatoire, l'algorithme effectue un routage complet du circuit (via la méthode routage_pass) pour aboutir à une disposition finale. Ce schéma final est ensuite utilisé comme schéma initial pour le routage du circuit inverse. L'algorithme itère un certain nombre de fois jusqu'à ce qu'il trouve une configuration initiale qui réduise le coût total de l'acheminement.
Cette méthode exploite la réversibilité des circuits quantiques et tente d'inclure des informations globales sur les circuits dans le choix de la configuration initiale.
Par défaut, cette étape effectuera à la fois la disposition et le routage, et transformera le circuit de manière à ce que la disposition soit appliquée au DAG d'entrée (ce qui signifie que le circuit de sortie comportera des qubits auxiliaires attribués aux qubits inutilisés sur la carte de couplage, et que les qubits seront réorganisés pour correspondre aux qubits physiques mappés); le routage sera ensuite appliqué (en insérant SwapGate des objets pour tenir compte de la connectivité limitée). Cela diffère de la plupart des autres passes de mise en page, qui sont AnalysisPass des objets et se contentent de trouver une mise en page initiale pour l'appliquer à l'ensemble de propriétés. Cette opération est effectuée car, par défaut, le passeur exécute des essais parallèles avec différentes graines aléatoires pour sélectionner la disposition initiale aléatoire, puis choisit la sortie routée qui nécessite le moins de portes de permutation.
Vous pouvez utiliser l'argument routing_pass pour que cette passe fonctionne comme une passe de mise en page typique. Lorsque cette option est spécifiée, elle utilise uniquement la passe de routage spécifiée pour sélectionner une disposition initiale et n'exécute pas d'essais de semences multiples.
En plus de commencer avec une disposition initiale aléatoire, le passe peut également prendre en compte une liste supplémentaire de dispositions de départ qui seront utilisées pour des essais supplémentaires. Si le site sabre_starting_layouts est présent dans l'ensemble des propriétés au moment de l'exécution de la passe, il sera utilisé pour des essais supplémentaires. Il y aura toujours layout_trials de modèles de départ aléatoires complets et le contenu de sabre_starting_layouts sera exécuté en plus de ceux-ci. La sortie qui produit le plus petit nombre de portes de swap (que ce soit à partir des essais aléatoires ou du point de départ fixé par la propriété) sera utilisée. La valeur de ce champ doit être une liste d'objets Layout représentant les modèles de départ à utiliser. Si un qubit virtuel est absent d'un objet de la liste, un qubit aléatoire sera sélectionné Layout de la liste, un qubit aléatoire sera sélectionné.
Champs de définition de propriété Lecture
sabre_starting_layouts (list[Layout])
Une liste facultative d'objets Layout d'objets à utiliser pour des essais de mise en page supplémentaires. Cela s'ajoute aux essais aléatoires complets spécifiés avec l'argument layout_trials .
Valeurs définies pour les propriétés écrites
layout (Layout)
Le mappage initial choisi des qubits virtuels aux qubits physiques, y compris l'allocation de l'ancilla.
final_layout (Layout)
Une permutation de la façon dont les échanges ont été appliqués aux qubits d'entrée à la fin du circuit.
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
SabreLayout initialisateur.
param coupling_map
graphe orienté représentant une carte de couplage.
type coupling_map
UnionCouplingMap[, Cible]
param routing_pass
la passe de routage à utiliser lors de l'itération. Si elle est spécifiée, cette passe fonctionne comme un AnalysisPass et ne remplit que le champ layout dans l'ensemble de propriétés et le dag d'entrée est renvoyé sans modification. Cet argument s'exclut mutuellement avec les arguments swap_trials et layout_trials et s'il est spécifié en même temps que l'un ou l'autre argument, une erreur sera soulevée.
type routing_pass
BasePass
param seed
semence pour la mise en place d'une disposition aléatoire du premier essai.
type de semence
int
param max_itérations
le nombre d'itérations avant-arrière.
type max_iterations
int
param swap_trials
Le nombre d'essais de SabreSwap pour chaque itération. Ceci est équivalent à l'argument trials sur SabreSwap. Si cela n'est pas spécifié (et si routing_pass n'est pas défini), c'est le nombre de CPU physiques de votre système local qui sera utilisé par défaut. Pour assurer la reproductibilité entre les environnements, il est préférable de définir un nombre explicite, car le résultat dépendra potentiellement du nombre d'essais effectués. Cette option s'exclut mutuellement avec l'argument routing_pass et une erreur sera soulevée si les deux sont utilisés.
type swap_trials
int
param layout_trials
Le nombre d'essais de semences aléatoires à utiliser pour la mise en page. Lorsque > 1, l'essai qui produit la sortie avec le moins de portes de permutation est sélectionné. Si cette valeur n'est pas spécifiée (et si routing_pass n'est pas défini), le nombre de CPU physiques locaux sera utilisé comme valeur par défaut. Cette option s'exclut mutuellement avec l'argument routing_pass et une erreur sera soulevée si les deux sont utilisés. En plus du nombre d'essais aléatoires spécifié par cette valeur, 3 ou 4 essais supplémentaires, en fonction de la valeur de coupling_map , sont effectués avec des schémas communs.
type layout_trials
int
param skip_routing
Si ce paramètre est réglé sur True et que routing_pass n'est pas utilisé, le routage ne sera pas appliqué au circuit de sortie. Seule la disposition sera définie dans l'ensemble de propriétés. Il s'agit d'un compromis pour exécuter un routage personnalisé avec plusieurs essais de mise en page, car l'utilisation de cette option fera que SabreLayout exécutera l'étape de routage en interne, mais n'utilisera pas ce résultat.
type skip_routing
booléen
soulève TranspilerError
Si routing_pass et swap_trials ou
**soulève à la fois routing_pass et layout_trials **
Attributs
coupling_map
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 SabreLayout sur dag.
Paramètres
dag (DAGCircuit) – DAG pour lequel il faut trouver une disposition.
Retours
Le dag de sortie si le mappage par permutation a été exécuté
(sinon le dag d'entrée est renvoyé sans modification).
Type de retour
Augmentations
TranspilerError – si le dag est plus large que la cible.
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