Skip to main content
IBM Quantum Platform

BlockCollector

class qiskit.dagcircuit.BlockCollector(dag)

GitHub

Bases: object

Esta clase implementa diversas estrategias para dividir un DAG (grafo acíclico dirigido) en bloques de nodos que cumplen determinados criterios. Funciona tanto con la representación DAGCircuit como con DAGDependency la de un DAG, donde esta última tiene en cuenta la conmutatividad entre los nodos.

La recopilación de nodos de DAGDependency suele conducir a resultados más óptimos, pero es más lenta, ya que requiere construir una DAGDependency de antemano. Por lo tanto, DAGCircuit debería utilizarse con configuraciones de transpilador más bajas, y DAGDependency debería utilizarse con configuraciones de transpilador más altas.

En general, hay múltiples formas de reunir bloques máximos. Los enfoques utilizados aquí son de la forma "partiendo de los nodos de entrada de un DAG, recoger ávidamente el mayor bloque de nodos que cumplan ciertos criterios". Para más información, consulte https://github.com/Qiskit/qiskit/issues/5775.

Parámetros

dag (Union[DAGCircuit, DAGDependency]) – El DAG de entrada.

Eleva

DAGCircuitError - el objeto de entrada no es un DAG.


Métodos

collect_all_matching_blocks

collect_all_matching_blocks(filter_fn, split_blocks=True, min_block_size=2, split_layers=False, collect_from_back=False, max_block_width=None)

GitHub

Recoge todos los bloques que coinciden con una función de filtrado dada filter_fn. De este modo, se encuentra iterativamente el bloque más grande que no coincide con filter_fn, luego el bloque más grande que coincide con filter_fn, y así sucesivamente, hasta que no queden más nodos sin recoger. Intuitivamente, encontrar bloques más grandes de nodos no coincidentes ayuda a encontrar más tarde bloques más grandes de nodos coincidentes.

Una vez recogidos los bloques, se pueden refinar opcionalmente. La opción split_blocks permite dividir los bloques recopilados en subbloques sobre subconjuntos de qubits disjuntos. La opción split_layers permite dividir los bloques recopilados en capas de instrucciones que no se superponen. La opción min_block_size especifica el número mínimo de puertas en el bloque para que este sea recopilado. La opción max_block_width especifica el número máximo de qubits sobre los que se puede definir un bloque.

Por defecto, los bloques se recogen en la dirección de las entradas hacia las salidas del circuito. La opción collect_from_back permite cambiar esta dirección, es decir, recoger bloques de las salidas hacia las entradas del circuito.

Devuelve sólo la lista de bloques coincidentes.

collect_matching_block

collect_matching_block(filter_fn, max_block_width)

GitHub

Recoge iterativamente el mayor bloque de nodos de entrada (es decir, nodos con _in_degree igual a 0) que coinciden con una función de filtrado dada. Algunos ejemplos son la recopilación de bloques de compuertas swap, bloques de compuertas lineales (CX y SWAP), bloques de compuertas Clifford, bloques de compuertas de un qubit, bloques de compuertas de dos qubits, etc. Aquí "iterativamente" significa que una vez que se recoge un nodo, la _in_degree de cada uno de sus sucesores inmediatos se reduce en 1, permitiendo que más nodos se conviertan en entrada y sean elegibles para ser recogidos en el bloque actual. Devuelve el bloque de nodos recogidos.

Parámetros

Tipo de retorno

lista [ DAGOpNode | DAGDepNode ]

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