LookaheadSwap
class qiskit.transpiler.passes.LookaheadSwap(*args, **kwargs)
Bases: TransformationPass
Mapear el circuito de entrada en una topología backend mediante la inserción de SWAPs.
Implementación de la presentación del mapeador de intercambio de Sven Jandura para el Desafío de Desarrolladores Qiskit 2018, adaptada para integrarse en la arquitectura del transpilador.
El papel del swapper pass es modificar el circuito de partida para que sea compatible con la topología del dispositivo de destino (el conjunto de puertas de dos qubits disponibles en el hardware) Para ello, el paso insertará puertas SWAP para reubicar los qubits virtuales de cada puerta siguiente en un conjunto de qubits físicos acoplados. Sin embargo, como las puertas SWAP tienen muchas pérdidas, el objetivo es realizar esta reasignación introduciendo el menor número posible de SWAP adicionales.
Este algoritmo busca entre las combinaciones disponibles de compuertas SWAP mediante una búsqueda restringida de mejor primero/haz, que se describe a continuación:
- Comienza con una disposición de qubits virtuales en qubits físicos.
- Encuentra cualquier puerta en el circuito de entrada que se pueda realizar con el diseño actual y márcala como mapeada.
- Para todas las puertas SWAP posibles, calcule la disposición que resultaría de su aplicación y ordénelas según la distancia de la disposición resultante sobre las puertas próximas (véase _calc_layout_distance.)
- Para los cuatro SWAPs (search_width) mejor clasificados, repita el proceso anterior en el diseño que se generaría si se aplicaran.
- Repita este proceso hasta una profundidad de cuatro (search\depth) SWAPs de distancia de la disposición inicial, para un total de 256 (search\width^search_depth) posibles disposiciones.
- Elija la disposición que maximice el número de dos qubits que podrían realizarse. Añade sus puertas mapeadas, incluyendo los SWAPs generados, al circuito de salida.
- Repite lo anterior hasta que todas las puertas del circuito inicial estén mapeadas.
Para más detalles sobre el algoritmo, consulte la entrada del blog de Sven: https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084
LookaheadSwap inicializador.
Parámetros
- coupling_map (Union[CouplingMap, Target]) – CouplingMap del backend de destino.
- search_depth (int) – profundidad del árbol de lookahead al clasificar las mejores opciones SWAP.
- search_width (int) – anchura del árbol lookahead al clasificar las mejores opciones SWAP.
- fake_run (bool) – si es true, sólo simulará hacer enrutamiento, es decir, no se añadirá efectivamente ningún swap.
Atributos
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)
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
run
run(dag)
Ejecuta el pase LookaheadSwap en dag.
Parámetros
dag (DAGCircuit) – el grafo acíclico dirigido que se va a cartografiar
Devuelve
Un dag mapeado para ser compatible con el coupling_map en
la propiedad_set.
Tipo de retorno
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)
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