Skip to main content
IBM Quantum Platform

SabreSwap

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

GitHub

Bases: TransformationPass

Mapear el circuito de entrada en una topología backend mediante la inserción de SWAPs.

Implementación de la búsqueda heurística basada en SWAP del documento SABRE qubit mapping [2] (Algoritmo 1) con las modificaciones del documento LightSABRE [1]. La heurística pretende minimizar el número de SWAPs con pérdidas insertados y la profundidad del circuito.

Este algoritmo parte de una disposición inicial de qubits virtuales en qubits físicos, e itera sobre el DAG del circuito hasta que se agotan todas las puertas, insertando SWAPs por el camino. Sólo se consideran las puertas de 2 qubits, ya que sólo éstas son pertinentes para el problema de la asignación (se supone que las puertas de más de 3 qubits ya están descompuestas).

En cada iteración, comprobará primero si hay alguna puerta en la front_layer que pueda aplicarse directamente. Si es así, las aplicará y eliminará de front_layer, y repondrá esa capa con nuevas puertas si es posible. De lo contrario, intentará buscar SWAPs, insertar los SWAPs y actualizar la asignación.

La búsqueda de SWAPs está restringida, en el sentido de que sólo consideramos qubits físicos en la vecindad de los qubits implicados en front_layer. Éstas dan lugar a un swap_candidate_list que se puntúa según alguna función heurística de costes. Se aplica el mejor SWAP y se actualiza current_layout .

Esta pasada del transpilador amplía el algoritmo SABRE, ya que ejecutará múltiples iteraciones del algoritmo con diferentes semillas. De entre los ensayos aleatorios, se seleccionará el mejor resultado, determinado por el ensayo en el que se hayan insertado menos SWAP.

Referencias:

[1] Henry Zou y Matthew Treinish y Kevin Hartman y Alexander Ivrii y Jake Lishman. “LightSABRE: Un algoritmo SABRE ligero y mejorado" arXiv:2409.08368 [2] Li, Gushu, Yufei Ding y Yuan Xie. "Abordar el problema del mapeo de qubits para dispositivos cuánticos de la era NISQ" ASPLOS 2019. arXiv:1809.02573

SabreSwap inicializador.

Parámetros

  • coupling_map (Union[CouplingMap, Target]) – CouplingMap del backend de destino.
  • heuristic (str) – El tipo de heurística que se utilizará para decidir la mejor estrategia de canje ("básica", "anticipada" o "decaída").
  • seed (int) – semilla aleatoria utilizada para desempatar entre los canjes candidatos.
  • fake_run (bool) – si es true, sólo pretende hacer enrutamiento, es decir, no se añade efectivamente ningún swap.
  • trials (int) – El número de pruebas de semillas con las que ejecutar el sable. Se ejecutarán en paralelo (a menos que PassManager ya esté funcionando en paralelo). Si no se especifica, el valor predeterminado es el número de CPU físicas del sistema local. Para obtener resultados reproducibles, se recomienda establecerlo explícitamente, ya que la salida será determinista para un número fijo de ensayos.

Eleva

TranspilerError - Si la heurística especificada no es válida.

Información adicional:

El espacio de búsqueda de posibles SWAPs en qubits físicos se explora asignando una puntuación a la disposición que resultaría de cada SWAP. La bondad de un trazado se evalúa en función de la viabilidad del resto de puertas virtuales que deben aplicarse. Se admiten algunas funciones de coste heurísticas

  • "básico":

La suma de las distancias de los qubits físicos correspondientes de los qubits virtuales que interactúan en la capa_frontal.

Hbasic=gateFD[π(gate.q1)][π(gate.q2)]H_{basic} = \sum_{gate \in F} D[\pi(gate.q_1)][\pi(gate.q2)]
  • 'lookahead':

Es la suma de dos costes: el primero es igual al coste básico. En segundo lugar está el coste básico, pero ahora evaluado también para el conjunto ampliado (es decir, un número e E|E| e al de los sucesores que se avecinan de las puertas de la capa anterior F). Esto se pondera con un valor EXTENDED_SET_WEIGHT (W) para indicar que las puertas siguientes son menos importantes que la capa frontal.

Hdecay=1FgateFD[π(gate.q1)][π(gate.q2)]+W1EgateED[π(gate.q1)][π(gate.q2)]H_{decay}=\frac{1}{\left|{F}\right|}\sum_{gate \in F} D[\pi(gate.q_1)][\pi(gate.q2)] + W*\frac{1}{\left|{E}\right|} \sum_{gate \in E} D[\pi(gate.q_1)][\pi(gate.q2)]
  • 'decadencia':

Es lo mismo que el "lookahead", pero el coste total se multiplica por un factor de decaimiento. Esto aumenta el coste si el SWAP que generó el trazado de prueba se utilizó recientemente (es decir, penaliza el aumento de profundidad).

Hdecay=max(decay(SWAP.q1),decay(SWAP.q2))1FgateFD[π(gate.q1)][π(gate.q2)]+W1EgateED[π(gate.q1)][π(gate.q2)]H_{decay} = max(decay(SWAP.q_1), decay(SWAP.q_2)) { \frac{1}{\left|{F}\right|} \sum_{gate \in F} D[\pi(gate.q_1)][\pi(gate.q2)]\\ + W *\frac{1}{\left|{E}\right|} \sum_{gate \in E} D[\pi(gate.q_1)][\pi(gate.q2)] }

Atributos

coupling_map

dist_matrix

is_analysis_pass

Comprueba si el pase es un pase de análisis.

Si el pase es un AnalysisPass, significa que el pase puede analizar el DAG y escribir los resultados de ese análisis en el conjunto de propiedades. Este tipo de paso no permite realizar modificaciones en el DAG.

is_transformation_pass

Comprueba si el pase es un pase de transformación.

Si el pase es un TransformationPass, significa que el pase puede manipular el DAG, pero no puede modificar el conjunto de propiedades (pero se puede leer).


Métodos

execute

execute(passmanager_ir, state, callback=None)

GitHub

Ejecutar la tarea de optimización para la entrada Qiskit IR.

Parámetros

  • passmanager_ir (Any) – Qiskit IR para optimizar.
  • state (PassManagerState) – Estado asociado a la ejecución del flujo de trabajo por el propio gestor de pases.
  • callback (Callable | None) – Una función de devolución de llamada que se invoca cada vez que se ejecuta una tarea de optimización.

Devuelve

Qiskit IR optimizado y estado del flujo de trabajo.

Tipo de retorno

tupla [ Any, PassManagerState ]

name

name()

GitHub

Nombre del pase.

Tipo de retorno

str

run

run(dag)

GitHub

Ejecuta el pase SabreSwap en dag.

Parámetros

dag (DAGCircuit) – el grafo acíclico dirigido a mapear.

Devuelve

Un dag mapeado para ser compatible con el coupling_map.

Tipo de retorno

Circuito DAG

Eleva

  • TranspilerError - si el mapa de acoplamiento o el diseño no son
  • compatible con el DAG**, o **si el coupling_map=None -

update_status

update_status(state, run_state)

GitHub

Actualizar el estado del flujo de trabajo.

Parámetros

  • state (PassManagerState) – Pasar estado de gestor a actualizar.
  • run_state (RunState) – Estado de finalización de la tarea actual.

Devuelve

Estado del gestor de pases actualizado.

Tipo de retorno

PassManagerState

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.