Skip to main content
IBM Quantum Platform

BlockCollector

class qiskit.dagcircuit.BlockCollector(dag)

GitHub

Basen: object

Diese Klasse implementiert verschiedene Strategien zur Aufteilung eines DAG (gerichteter azyklischer Graph) in Knotengruppen, die bestimmte Kriterien erfüllen. Es funktioniert sowohl mit der DAGCircuit als auch DAGDependency mit der Darstellung eines DAG, wobei letztere die Kommutativität zwischen den Knoten berücksichtigt.

Das Sammeln von Knoten aus der DAGDependency führt im Allgemeinen zu optimaleren Ergebnissen, ist aber langsamer, da zuvor eine DAGDependency konstruiert werden muss. Daher sollte DAGCircuit mit niedrigeren Transpiler-Einstellungen und DAGDependency mit höheren Transpiler-Einstellungen verwendet werden.

Im Allgemeinen gibt es mehrere Möglichkeiten, maximale Blöcke zu sammeln. Die hier verwendeten Ansätze sind von der Form "ausgehend von den Eingangsknoten eines DAG, sammeln gierig den größten Block von Knoten, die bestimmte Kriterien erfüllen". Für weitere Einzelheiten siehe https://github.com/Qiskit/qiskit/issues/5775.

Parameter

dag (Union[DAGCircuit, DAGDependency]) – Die Eingabe-DAG.

Erhöht

DAGCircuitError – Das Eingabeobjekt ist kein DAG.


Methoden

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

Sammelt alle Blöcke, die einer bestimmten Filterfunktion filter_fn entsprechen. Dabei wird iterativ der größte Block gefunden, der nicht mit filter_fn übereinstimmt, dann der größte Block, der mit filter_fn übereinstimmt, und so weiter, bis keine nicht erfassten Knoten mehr übrig sind. Intuitiv hilft das Auffinden größerer Blöcke von nicht übereinstimmenden Knoten, um später größere Blöcke von übereinstimmenden Knoten zu finden.

Nachdem die Blöcke gesammelt wurden, können sie optional veredelt werden. Die Option split_blocks ermöglicht es, gesammelte Blöcke in Unterblöcke über disjunkte Qubit-Teilmengen aufzuteilen. Die Option split_layers ermöglicht es, gesammelte Blöcke in Schichten nicht überlappender Anweisungen aufzuteilen. Die Option min_block_size gibt die Mindestanzahl von Gates im Block an, damit der Block gesammelt wird. Die Option max_block_width gibt die maximale Anzahl von Qubits an, über die ein Block definiert werden kann.

Standardmäßig werden die Blöcke in der Richtung von den Eingängen zu den Ausgängen der Schaltung gesammelt. Die Option collect_from_back ermöglicht es, diese Richtung zu ändern, d.h. Blöcke von den Ausgängen zu den Eingängen der Schaltung zu sammeln.

Gibt nur die Liste der übereinstimmenden Blöcke zurück.

collect_matching_block

collect_matching_block(filter_fn, max_block_width)

GitHub

Sammelt iterativ den größten Block von Eingabeknoten (d. h. Knoten mit _in_degree gleich 0), die einer bestimmten Filterfunktion entsprechen. Beispiele hierfür sind das Sammeln von Blöcken von Swap-Gattern, Blöcken von linearen Gattern (CXs und SWAPs), Blöcken von Clifford-Gattern, Blöcken von Ein-Qubit-Gattern, Blöcken von Zwei-Qubit-Gattern, usw. Hier bedeutet "iterativ", dass, sobald ein Knoten gesammelt wurde, die _in_degree jedes seiner unmittelbaren Nachfolger um 1 verringert wird, so dass mehr Knoten eingegeben werden können und für das Sammeln im aktuellen Block in Frage kommen. Gibt den Block der gesammelten Knoten zurück.

Parameter

Rückgabetyp

Liste [ DAGOpNode | DAGDepNode ]

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.