Freigeben über


Quantum-Zwischendarstellung

Quantum Intermediate Representation (QIR) ist eine Zwischendarstellung, die als gemeinsame Schnittstelle zwischen Quantenprogrammiersprachen/Frameworks und gezielten Quantenberechnungsplattformen dient. Die QIR gibt eine Reihe von Regeln für die Darstellung von Quantenprogrammen mit einem sprach- und hardwareunabhängigen Format innerhalb der LLVM-IR vor. Bei der QIR handelt es sich um ein Projekt, das von der QIR Alliance entwickelt wurde, der unter anderem auch Microsoft angehört.

Was ist eine Zwischendarstellung?

Bei klassischen Compilern wird die Quellsprache häufig zunächst in eine Zwischendarstellung kompiliert. Eine Zwischendarstellung ist (wie der Name schon sagt) ein Zwischenschritt bei der Konvertierung von Anweisungen aus dem Quellcode in Computersprache.

Sie fungiert als abstrakte Darstellung eines Programms. Alle Programme werden durch einen sogenannten Front-End-Compiler in diese Zwischendarstellung umgewandelt (ganz gleich, in welcher Sprache sie geschrieben sind), und diese Zwischendarstellung wird dann von einer Back-End-Komponente in eine Computerdarstellung umgewandelt. Die Zwischendarstellung ermöglicht somit die Entkopplung von Quellsprachen und Hardwareplattformen sowie die modulare Erstellung eines Compilers, sodass für neue Sprachen jeweils nur ein neues Front-End benötigt wird, um auf allen Plattformen unterstützt zu werden, für die ein Back-End verfügbar ist.

Die Zwischendarstellung ist in der Regel so konzipiert, dass viele verschiedene Quellsprachen dargestellt werden können. Darüber hinaus können auf dieser Zwischenebene auch einige Optimierungen und Schaltungsanpassungen durchgeführt werden, um die endgültige Implementierung effizienter zu machen. Sobald die endgültige target Ausführungsplattform bekannt ist, kann die Zwischendarstellung in tatsächlichen ausführbaren Code kompiliert werden.

Dank dieses Ansatzes können zahlreiche Quellsprachen eine Reihe gemeinsamer Optimierungen und Generatoren für ausführbare Dateien nutzen. Außerdem ist es einfach, eine einzelne Quellsprache für viele verschiedene Sprachen targetszu kompilieren. Die Zwischendarstellung bietet eine gemeinsame Plattform, die über viele Quellen hinweg gemeinsam genutzt werden kann und targets eine große Anzahl von Wiederverwendungen in Compilermaschinen ermöglicht.

Was ist Quantum Intermediate Representation?

Die Quantenzwischendarstellung (Quantum Intermediate Representation, QIR) ist eine Zwischendarstellung für Quantenprogramme, die von der QIR Alliance entwickelt wurde, der auch Microsoft angehört. Es bietet eine gemeinsame Schnittstelle, die viele Sprachen und target Plattformen für die Quantenberechnung unterstützt. Die QIR kann als universelle Sprache auf mittlerer Ebene betrachtet werden, die die Kommunikation übergeordneten Sprachen und Computern ermöglicht. Q# lässt sich zwar als QIR kompilieren, die QIR ist jedoch nicht Q#-spezifisch und kann von jedem beliebigen Quantenprogrammierframework zur Darstellung eines Quantenprogramms genutzt werden. Es ist hardwareagnostisch, was bedeutet, dass es keine Quantenanweisung oder einen Gate-Satz angibt und dies in der target Computerumgebung bleibt.

Die QIR basiert auf dem beliebten klassischen Open-Source-Compiler LLVM. Bei LLVM handelt es sich um eine Sammlung modularer und wiederverwendbarer Compiler- und Toolkettentechnologien, die von verschiedensten Sprachen angepasst wurde. Die QIR gibt eine Reihe von Regeln für die Darstellung von Quantenkonstrukten in LLVM vor, benötigt jedoch keine Erweiterungen oder Änderungen an LLVM.

Da LLVM die zugrunde liegende Toolkette ist, kann die QIR sowohl klassische Logik als auch Quantenlogik verarbeiten. Dieses Feature ist für Hybridszenarien mit Quantenalgorithmen und klassischen Algorithmen unverzichtbar, die für Quantencomputinganwendungen immer wichtiger werden. Darüber hinaus ermöglicht es die Nutzung von Kompilierungs- und Optimierungstools aus dem klassischen Computingbereich und trägt somit dazu bei, die Kosten für das Schreiben von Übersetzungen zu senken.

Viele führende Quantencomputingunternehmen haben die QIR bereits eingeführt. So erstellen beispielsweise NVIDIA, Oak Ridge National Laboratory, Quantinuum, Quantum Circuits Inc. und Rigetti Computing Toolketten mit QIR-Nutzung.

Weitere Informationen finden Sie in der QIR-Spezifikation. Wenn Sie sich für Compilertools und für Projekte interessieren, die die QIR verwenden, können Sie sich diese QIR-Repositorys ansehen.

Was ist die QIR Alliance?

Die QIR Alliance ist ein gemeinsamer Versuch, eine zukunftsgerichtete Quanten-Zwischendarstellung mit dem Ziel zu entwickeln, die vollständige Interoperabilität innerhalb des Quantenökosystems zu ermöglichen, den Entwicklungsaufwand aller Parteien zu reduzieren und eine Darstellung bereitzustellen, die für aktuelle und zukünftige heterogene Quantenprozessoren geeignet ist.

Quanten-SDKs und -Sprachen erscheinen schnell und entwickeln sich ebenso schnell weiter. Gleiches gilt für neue Quantenprozessoren mit jeweils einzigartigen und unterschiedlichen Funktionen. Um die Interoperabilität zwischen neuen Sprachen und neuen Hardwarefunktionen zu ermöglichen, ist es für das Ökosystem unerlässlich, eine zwischengeschaltete Darstellung zu entwickeln und zu teilen, die mit der gegenwärtigen und zukünftigen Quantenhardware arbeitet.

Mit ihrer kollektiven Arbeit und Partnerschaft zielt die QIR Alliance auf:

  • Verringern des erforderlichen Entwicklungsaufwands für alle Beteiligten durch Vorantreiben der Interoperabilität zwischen verschiedenen Frameworks und Sprachen
  • Ermöglichen der Entwicklung gemeinsam genutzter Bibliotheken für die Entwicklung von Quantenanwendungen und Quantencompilern
  • Aufbauen auf modernster Compilertechnologie und Nutzen bereits vorhandener Tools, Bibliotheken und Erkenntnisse aus dem High Performance Computing-Bereich
  • Ermöglichen einer schrittweisen und progressiven Weiterentwicklung der Interaktion zwischen klassischem Computing und Quantencomputing auf Hardwareebene
  • Bereitstellen der nötigen Flexibilität zur mühelosen Vernetzung neuer Technologien, um Experimente mit unterschiedlichen und differenzierten Hardwarefunktionen zu ermöglichen

Die QIR Alliance ist Teil der Joint Development Foundation der Linux Foundation für die Arbeit an offenen Standards. Zu den Gründungsmitgliedern gehören Microsoft sowie Quantinuum (ehemals Honeywell), Oak Ridge National Laboratory, Quantum Circuits Inc. und Rigetti Computing.

Wie sieht das Quantum Intermediate Representation aus?

Da die QIR auf LLVM basiert, sieht die QIR wie LLVM aus.

Als Beispiel soll der folgende Q#-Code zum Generieren eines Bell-Paars dienen:

operation CreateBellPair(q1 : Qubit, q2 : Qubit) : Unit {
    H(q1);
    CNOT(q1, q2);
}

Nach der Kompilierung als QIR sieht der Code wie folgt aus:

define void @CreateBellPair__body(%Qubit* %q1, %Qubit* %q2) {
entry:
  call void @__quantum__qis__h(%Qubit* %q1)
  call void @__quantum__qis__cnot(%Qubit* %q1, %Qubit* %q2)
  ret void
}

Dieser Codeausschnitt enthält einige QIR-Features:

  • Vorgänge in Q# (oder in einer anderen Quantenprogrammiersprache) werden durch LLVM-Funktionen dargestellt.
  • Qubits werden als Zeiger auf einen benannten undurchsichtigen Strukturtyp dargestellt %Qubit.

Die QIR für den Vorgang CreateBellPair ist zwar sehr einfach, die QIR erbt allerdings alle Funktionen von LLVM, um Schleifen, Bedingungen und andere komplexe Ablaufsteuerungen auszudrücken. Außerdem erbt die QIR die Fähigkeit von LLVM, beliebige klassische Berechnungen auszudrücken.

Weitere Informationen finden Sie in der Entwicklersitzung von Microsoft aus der Q2B-Veranstaltung von 2021.

Warum ist Quantum Intermediate Representation wichtig?

Die QIR ist ein wichtiges Tool, wenn Quantenalgorithmen auf echter Hardware ausgeführt werden. Zwischendarstellungen können aber auch eine wichtige Rolle spielen, wenn Sie lediglich Algorithmen auf einer theoretischeren Ebene entwickeln möchten.

Eine von QIR aktivierte Anwendung ist beispielsweise die Verwendung des Clang-Compilers, eines C-Sprach-Front-Ends für LLVM, zum Kompilieren von QIR in ausführbaren Computercode für einen klassischen targetComputer. Dies ist eine einfache Methode zum Erstellen eines Simulators in C oder C++ durch Implementieren der Quantenanweisungen, die die Erstellung von Quantensimulatoren vereinfachen kann.

Darüber hinaus können Sie die Zwischendarstellung verwenden, um Code zu generieren, der später als Eingabe für einen Quantensimulator (anstelle eines echten Geräts) bereitgestellt wird, der ggf. eine andere Sprache verwendet als der Quellcode. Dadurch können Sie verschiedene Sprachen oder Simulatoren mit einem gemeinsamen Framework problemlos vergleichen und Benchmarks für sie erstellen.

Hinsichtlich der Codeoptimierung gibt es Optimierungsschritte, die auf mittlerer Ebene ausgeführt werden können, die die Implementierung des gesamten Algorithmus effizienter machen können. Durch die Untersuchung dieser Optimierung Ihres Eingabecodes können Sie besser verstehen, wo Algorithmen effizienter gemacht werden und wie Sie die Quantenprogrammiersprachen verbessern können.

Eine weitere Anwendung besteht darin, die standardmäßige LLVM-Pass-Infrastruktur zu verwenden, um Quantencodeoptimierer zu erstellen, die auf QIR arbeiten. Dank des sprach- und hardwareunabhängigen Ansatzes der QIR können diese Optimierer mit minimalem Aufwand für unterschiedliche Computingsprachen und -plattformen wiederverwendet werden.