Blog

Quanten-Software-Entwicklung: Ein ähnliches, aber neues Paradigma

5
Mai
,
2022
Ofek Kirzner, VP F&E, Classiq

Wie geht man bei der Entwicklung einer neuen Programmiersprache, eines Compilers oder einer Toolchain vor? Bei der Entwicklung von Softwareplattformen für einen neuen Bereich können wir uns auf unsere umfangreiche Erfahrung stützen und diese mit Kreativität, bahnbrechender Forschung und Technik kombinieren.

Classiq entwickelt eine Reihe von Tools zur Erstellung von Software für Quantencomputer. In diesem Artikel werden wir die Analogie zur klassischen Programmierung in C verwenden, um zu erklären, wie wir eine neue Sprache und Plattform für dieses neue Computerparadigma entwickeln.

Wie viele Leser wissen, basieren Quantencomputer auf einem mathematischen Modell aus der Quantenphysik. Ohne in die Einzelheiten zu gehen, stellen Sie sich eine Reihe von logischen Gattern vor, die eine andere Semantik haben als die klassische Programmierung. Anstatt mit einer Folge von 0 und 1 zu arbeiten, arbeiten Quantengatter mit linearen Kombinationen dieser Folgen. Die Quantenprogrammierung verbindet Quantengatter miteinander und kann auch mit klassischen Logikgattern kombiniert werden.

Der Bau eines Quantencomputers ist eine gewaltige technische Herausforderung, die bis vor nicht allzu langer Zeit noch als Fantasie galt. Doch in den letzten Jahren wurde die industrielle Nutzung von Quantencomputern dank der Durchbrüche von Computerriesen wie IBM mit seinem 127-Qubit-Prozessor und Googles Quantenüberlegenheitsexperiment zu einer Frage des "Wie bald?" und nicht des "Wird es jemals geschehen?

Die Motivation für den Bau von Quantencomputern liegt auf der Hand: Wenn es gelingt, einen Computer zu bauen und die entsprechende Software dafür zu schreiben, könnten wir kritische Probleme lösen, die klassische Computer nicht lösen können und nie lösen werden. So könnten wir beispielsweise neue Impfstoffe entwickeln, unsere Versorgungskette optimieren, Moleküle in großem Maßstab simulieren, neue Algorithmen für maschinelles Lernen entdecken, Informationen besser schützen und vieles mehr.

Wenn wir bis in die 1950er Jahre zurückblicken, sehen wir einen langen Forschungs- und Entwicklungsprozess, der uns von den ersten Computerprototypen zu den modernen Prozessoren geführt hat, die wir heute kennen. Moderne Prozessoren zeichnen sich durch eine Befehlssatzarchitektur (ISA) aus, die die von ihnen verwendeten Befehle, Datentypen und Register festlegt. Bestimmte Befehle sind sowohl binär als auch in Assembler lesbar. Aber heute entwickelt niemand mehr große Softwareprojekte in Assembler, nicht einmal Linus. In den 60er und 70er Jahren wurden Programmiersprachen wie Fortran und später C entwickelt, um eine Abstraktionsschicht über der Assemblersprache zu schaffen. Diese Sprachen revolutionierten die Software-Entwicklung und ermöglichten es Software-Ingenieuren, ihrer Kreativität freien Lauf zu lassen.

Quantencomputer haben heute nicht mehr als etwa 100 Qubits. Sie haben viele Beschränkungen, und für Unternehmen wäre es eine Herausforderung, sie zur Durchführung komplexer Berechnungen einzusetzen. Die Programmierung dieser Quantencomputer erfolgt in Sprachen wie QASM (Quantum Assembly) oder Q#. In diesen Sprachen muss der Softwareentwickler explizit angeben, welche Quantengatter verwendet werden sollen, und viele würden dies als noch näher an der Hardware als Assembler betrachten. Wenn jedoch im Jahr 2023 Computer mit 1000 Qubits zur Verfügung stehen, die die Möglichkeit bieten, anspruchsvolleren Code zu erstellen, wird eine solche Low-Level-Programmierung zu einer Sisyphusarbeit, die an die Unmöglichkeit grenzt.

Um dieses Problem zu lösen, entwickelt Classiq die nächsten Schichten des Quanten-Software-Stacks.

Wie sieht die Programmierung eines klassischen Computers heute aus? Nehmen wir C als Beispiel und gehen wir davon aus, dass unser Ziel darin besteht, eine ausführbare Datei zu erstellen. Grob gesagt erstellt der Softwareentwickler ".c"- und ".h"-Dateien und kompiliert sie zu ".o"-Dateien. Diese werden dann mit bereits vorhandenen Bibliotheken (z. B. libc) zu einer ausführbaren Datei verknüpft. Der Ingenieur kann den Code ausführen, wird aber wahrscheinlich auf Fehler stoßen. Um den Code zu debuggen, könnte der Ingenieur einen Debugger wie gdb oder statische Code-Analyse-Tools wie objdump oder IDA verwenden. Dies ist ein iterativer Prozess: Code schreiben, kompilieren, linken, ausführen und debuggen.

Inwiefern ist dies mit dem Schreiben von Quantensoftware vergleichbar? Die Classiq-Plattform bietet Ingenieuren und Entwicklern von Quantenalgorithmen eine funktionale und deklarative Schnittstelle. Sie müssen also "deklarieren", was die Designerlogik oder Funktionalität ist, die sie generieren möchten, und dann die Einschränkungen angeben, die der Code erfüllen muss - z. B. dass er eine bestimmte Schaltungslänge nicht überschreiten darf, die Anzahl der verfügbaren Qubits, die gewünschte Genauigkeit und mehr. Um unsere Benutzer zu unterstützen, bietet Classiq eine Bibliothek von Quantenbausteinen wie Zustandsvorbereitung, Quantenarithmetik und maschinelle Lernoperationen. Diese Deklarationen werden in einem Modell (.qmod) gesammelt und an unsere Backend-Server gesendet. Zusammen mit unseren vordefinierten Bausteinen durchläuft dieses Modell einen Syntheseprozess - die Erstellung von Quantencode, der die Anforderungen optimal erfüllt. Die Benutzer können das Ergebnis analysieren und überprüfen, ob es den Spezifikationen entspricht, oder es schnell auf einer Vielzahl von Quantencomputern oder Simulatoren ausführen. Im Rahmen dieses interaktiven und iterativen Prozesses können die Benutzer die Beschränkungen oder die Funktionsdefinition ändern, bis sie das gewünschte Ergebnis erhalten. Wie bei der klassischen Kompilierung ist der ausgegebene Code schließlich viel besser als das, was manuell erreicht werden könnte.

Trotz dieser Ähnlichkeiten gibt es einige Unterschiede zwischen der klassischen und der Quantenprogrammierung:

  • Die Quantenlogik ist komplexer als die klassische Logik, und daher ist die Synthese von Quantenschaltungen sowohl im algorithmischen Entwurfsprozess als auch bei der Implementierung anspruchsvoller.
  • Quantensoftware wird approximiert, was bedeutet, dass ein Teil der Anforderungen der Grad der Genauigkeit des endgültigen Codes ist, der es ermöglicht, die heutigen und zukünftigen Hardwarebeschränkungen zu berücksichtigen.
  • Der Syntheseprozess erfolgt über eine vernetzte API, im Gegensatz zu einem lokalen klassischen Compiler. Dies geschieht, um die Schnittstelle zu vereinfachen und die Vorteile eines SaaS-Modells zu nutzen (nahtlose Software-Upgrades, erweiterbare Kapazität und mehr).
  • Die Fähigkeit, Quantencode zu debuggen, ist begrenzt, da der Prozess der Messung eines Qubits irreversibel ist. Daher ist der Prozess der Analyse und Validierung von Quantencode ein schwieriges algorithmisches Problem.
  • Quantensoftware ist von Natur aus grafisch. Eine geeignete Entwicklungsumgebung muss sowohl textuelle als auch grafische Methoden bieten und den synthetisierten Code sowohl textuell als auch grafisch darstellen.

Die Welt der Quantensoftware befindet sich noch in den Kinderschuhen. Es gibt viele Parallelen zum klassischen Softwaredesign, aber der Weg ist größtenteils ungepflastert und erfordert intensive Forschung, Innovation und Einfallsreichtum. Einige der Herausforderungen, denen sich Classiq stellt, sind:

  • Die Erforschung und Implementierung von Synthesealgorithmen, die einen Durchbruch bei Quantensoftware ermöglichen.
  • Entwicklung einer reichhaltigen deklarativen Sprache, mit der reine und hybride (klassische/quantische) Algorithmen ausgedrückt werden können und die es den Ingenieuren ermöglicht, ihrer Kreativität Ausdruck zu verleihen. 
  • Schaffung von algorithmischen Bausteinen, die eine flexible Genauigkeit bieten und sich an die verfügbaren Quantenressourcen anpassen können.
  • Werkzeuge für die Analyse und das Debugging von Quantencode innerhalb einer angemessenen Zeit.
  • Eine skalierbare Infrastruktur, die die nächsten Generationen von Quantencomputern aufnehmen kann.

Sind Sie an einer Mitarbeit bei uns interessiert? Wir suchen hochkarätige Software-Ingenieure aller Fachrichtungen: DevOps, Algorithmik-Experten, Quanteninformatiker, Front-End-Designer und mehr. Wir suchen Pioniere, die sich nicht scheuen, die Grenzen der Vorstellungskraft und der Technologie zu durchbrechen, und die daran interessiert sind, die Zukunft der Datenverarbeitung zu gestalten.

Wie geht man bei der Entwicklung einer neuen Programmiersprache, eines Compilers oder einer Toolchain vor? Bei der Entwicklung von Softwareplattformen für einen neuen Bereich können wir uns auf unsere umfangreiche Erfahrung stützen und diese mit Kreativität, bahnbrechender Forschung und Technik kombinieren.

Classiq entwickelt eine Reihe von Tools zur Erstellung von Software für Quantencomputer. In diesem Artikel werden wir die Analogie zur klassischen Programmierung in C verwenden, um zu erklären, wie wir eine neue Sprache und Plattform für dieses neue Computerparadigma entwickeln.

Wie viele Leser wissen, basieren Quantencomputer auf einem mathematischen Modell aus der Quantenphysik. Ohne in die Einzelheiten zu gehen, stellen Sie sich eine Reihe von logischen Gattern vor, die eine andere Semantik haben als die klassische Programmierung. Anstatt mit einer Folge von 0 und 1 zu arbeiten, arbeiten Quantengatter mit linearen Kombinationen dieser Folgen. Die Quantenprogrammierung verbindet Quantengatter miteinander und kann auch mit klassischen Logikgattern kombiniert werden.

Der Bau eines Quantencomputers ist eine gewaltige technische Herausforderung, die bis vor nicht allzu langer Zeit noch als Fantasie galt. Doch in den letzten Jahren wurde die industrielle Nutzung von Quantencomputern dank der Durchbrüche von Computerriesen wie IBM mit seinem 127-Qubit-Prozessor und Googles Quantenüberlegenheitsexperiment zu einer Frage des "Wie bald?" und nicht des "Wird es jemals geschehen?

Die Motivation für den Bau von Quantencomputern liegt auf der Hand: Wenn es gelingt, einen Computer zu bauen und die entsprechende Software dafür zu schreiben, könnten wir kritische Probleme lösen, die klassische Computer nicht lösen können und nie lösen werden. So könnten wir beispielsweise neue Impfstoffe entwickeln, unsere Versorgungskette optimieren, Moleküle in großem Maßstab simulieren, neue Algorithmen für maschinelles Lernen entdecken, Informationen besser schützen und vieles mehr.

Wenn wir bis in die 1950er Jahre zurückblicken, sehen wir einen langen Forschungs- und Entwicklungsprozess, der uns von den ersten Computerprototypen zu den modernen Prozessoren geführt hat, die wir heute kennen. Moderne Prozessoren zeichnen sich durch eine Befehlssatzarchitektur (ISA) aus, die die von ihnen verwendeten Befehle, Datentypen und Register festlegt. Bestimmte Befehle sind sowohl binär als auch in Assembler lesbar. Aber heute entwickelt niemand mehr große Softwareprojekte in Assembler, nicht einmal Linus. In den 60er und 70er Jahren wurden Programmiersprachen wie Fortran und später C entwickelt, um eine Abstraktionsschicht über der Assemblersprache zu schaffen. Diese Sprachen revolutionierten die Software-Entwicklung und ermöglichten es Software-Ingenieuren, ihrer Kreativität freien Lauf zu lassen.

Quantencomputer haben heute nicht mehr als etwa 100 Qubits. Sie haben viele Beschränkungen, und für Unternehmen wäre es eine Herausforderung, sie zur Durchführung komplexer Berechnungen einzusetzen. Die Programmierung dieser Quantencomputer erfolgt in Sprachen wie QASM (Quantum Assembly) oder Q#. In diesen Sprachen muss der Softwareentwickler explizit angeben, welche Quantengatter verwendet werden sollen, und viele würden dies als noch näher an der Hardware als Assembler betrachten. Wenn jedoch im Jahr 2023 Computer mit 1000 Qubits zur Verfügung stehen, die die Möglichkeit bieten, anspruchsvolleren Code zu erstellen, wird eine solche Low-Level-Programmierung zu einer Sisyphusarbeit, die an die Unmöglichkeit grenzt.

Um dieses Problem zu lösen, entwickelt Classiq die nächsten Schichten des Quanten-Software-Stacks.

Wie sieht die Programmierung eines klassischen Computers heute aus? Nehmen wir C als Beispiel und gehen wir davon aus, dass unser Ziel darin besteht, eine ausführbare Datei zu erstellen. Grob gesagt erstellt der Softwareentwickler ".c"- und ".h"-Dateien und kompiliert sie zu ".o"-Dateien. Diese werden dann mit bereits vorhandenen Bibliotheken (z. B. libc) zu einer ausführbaren Datei verknüpft. Der Ingenieur kann den Code ausführen, wird aber wahrscheinlich auf Fehler stoßen. Um den Code zu debuggen, könnte der Ingenieur einen Debugger wie gdb oder statische Code-Analyse-Tools wie objdump oder IDA verwenden. Dies ist ein iterativer Prozess: Code schreiben, kompilieren, linken, ausführen und debuggen.

Inwiefern ist dies mit dem Schreiben von Quantensoftware vergleichbar? Die Classiq-Plattform bietet Ingenieuren und Entwicklern von Quantenalgorithmen eine funktionale und deklarative Schnittstelle. Sie müssen also "deklarieren", was die Designerlogik oder Funktionalität ist, die sie generieren möchten, und dann die Einschränkungen angeben, die der Code erfüllen muss - z. B. dass er eine bestimmte Schaltungslänge nicht überschreiten darf, die Anzahl der verfügbaren Qubits, die gewünschte Genauigkeit und mehr. Um unsere Benutzer zu unterstützen, bietet Classiq eine Bibliothek von Quantenbausteinen wie Zustandsvorbereitung, Quantenarithmetik und maschinelle Lernoperationen. Diese Deklarationen werden in einem Modell (.qmod) gesammelt und an unsere Backend-Server gesendet. Zusammen mit unseren vordefinierten Bausteinen durchläuft dieses Modell einen Syntheseprozess - die Erstellung von Quantencode, der die Anforderungen optimal erfüllt. Die Benutzer können das Ergebnis analysieren und überprüfen, ob es den Spezifikationen entspricht, oder es schnell auf einer Vielzahl von Quantencomputern oder Simulatoren ausführen. Im Rahmen dieses interaktiven und iterativen Prozesses können die Benutzer die Beschränkungen oder die Funktionsdefinition ändern, bis sie das gewünschte Ergebnis erhalten. Wie bei der klassischen Kompilierung ist der ausgegebene Code schließlich viel besser als das, was manuell erreicht werden könnte.

Trotz dieser Ähnlichkeiten gibt es einige Unterschiede zwischen der klassischen und der Quantenprogrammierung:

  • Die Quantenlogik ist komplexer als die klassische Logik, und daher ist die Synthese von Quantenschaltungen sowohl im algorithmischen Entwurfsprozess als auch bei der Implementierung anspruchsvoller.
  • Quantensoftware wird approximiert, was bedeutet, dass ein Teil der Anforderungen der Grad der Genauigkeit des endgültigen Codes ist, der es ermöglicht, die heutigen und zukünftigen Hardwarebeschränkungen zu berücksichtigen.
  • Der Syntheseprozess erfolgt über eine vernetzte API, im Gegensatz zu einem lokalen klassischen Compiler. Dies geschieht, um die Schnittstelle zu vereinfachen und die Vorteile eines SaaS-Modells zu nutzen (nahtlose Software-Upgrades, erweiterbare Kapazität und mehr).
  • Die Fähigkeit, Quantencode zu debuggen, ist begrenzt, da der Prozess der Messung eines Qubits irreversibel ist. Daher ist der Prozess der Analyse und Validierung von Quantencode ein schwieriges algorithmisches Problem.
  • Quantensoftware ist von Natur aus grafisch. Eine geeignete Entwicklungsumgebung muss sowohl textuelle als auch grafische Methoden bieten und den synthetisierten Code sowohl textuell als auch grafisch darstellen.

Die Welt der Quantensoftware befindet sich noch in den Kinderschuhen. Es gibt viele Parallelen zum klassischen Softwaredesign, aber der Weg ist größtenteils ungepflastert und erfordert intensive Forschung, Innovation und Einfallsreichtum. Einige der Herausforderungen, denen sich Classiq stellt, sind:

  • Die Erforschung und Implementierung von Synthesealgorithmen, die einen Durchbruch bei Quantensoftware ermöglichen.
  • Entwicklung einer reichhaltigen deklarativen Sprache, mit der reine und hybride (klassische/quantische) Algorithmen ausgedrückt werden können und die es den Ingenieuren ermöglicht, ihrer Kreativität Ausdruck zu verleihen. 
  • Schaffung von algorithmischen Bausteinen, die eine flexible Genauigkeit bieten und sich an die verfügbaren Quantenressourcen anpassen können.
  • Werkzeuge für die Analyse und das Debugging von Quantencode innerhalb einer angemessenen Zeit.
  • Eine skalierbare Infrastruktur, die die nächsten Generationen von Quantencomputern aufnehmen kann.

Sind Sie an einer Mitarbeit bei uns interessiert? Wir suchen hochkarätige Software-Ingenieure aller Fachrichtungen: DevOps, Algorithmik-Experten, Quanteninformatiker, Front-End-Designer und mehr. Wir suchen Pioniere, die sich nicht scheuen, die Grenzen der Vorstellungskraft und der Technologie zu durchbrechen, und die daran interessiert sind, die Zukunft der Datenverarbeitung zu gestalten.

Über "Der Podcast des Qubit-Typen"

Der Podcast wird von The Qubit Guy (Yuval Boger, unser Chief Marketing Officer) moderiert. In ihm diskutieren Vordenker der Quanteninformatik über geschäftliche und technische Fragen, die das Ökosystem der Quanteninformatik betreffen. Unsere Gäste geben interessante Einblicke in Quantencomputer-Software und -Algorithmen, Quantencomputer-Hardware, Schlüsselanwendungen für Quantencomputer, Marktstudien der Quantenindustrie und vieles mehr.

Wenn Sie einen Gast für den Podcast vorschlagen möchten, kontaktieren Sie uns bitte .

Erstellen Sie Quantensoftware ohne Grenzen 

Kontakt