Vorbehalt Emptor: Folgendes ist stark von meiner eigenen Forschung und Sichtweise auf dem Gebiet der Qualitätskontrolle abhängig . Dies stellt keinen allgemeinen Konsens auf diesem Gebiet dar und kann sogar eine gewisse Eigenwerbung beinhalten.
Das Problem, eine "Hallo Welt" des Quantencomputers zu zeigen, ist, dass wir im Grunde immer noch so weit von Quantencomputern entfernt sind, wie es Leibnitz oder Babbage von Ihrem aktuellen Computer waren. Obwohl wir wissen, wie sie theoretisch funktionieren sollten, gibt es keine Standardmethode, um einen physikalischen Quantencomputer zu bauen. Ein Nebeneffekt davon ist, dass es kein einzelnes Programmiermodell für Quantencomputer gibt. Lehrbücher wie Nielsen et al. zeigt Ihnen ein "Quantum Circuit" -Diagramm, aber das sind alles andere als formale Programmiersprachen: Sie erhalten ein wenig "Handbewegung" in Bezug auf Details wie die klassische Steuerung oder den Umgang mit Eingabe- / Ausgabe- / Messergebnissen.
Was mir in meiner Forschung als Programmiersprachen-Informatiker am besten gefallen hat und um den Jist of QC anderen Informatikern nahe zu bringen, ist die Verwendung des einfachsten QC-Modells, auf das ich gestoßen bin, das alles kann.
Das einfachste Quantencomputerprogramm, das ich gesehen habe und das alle wesentlichen Elemente enthält, ist ein kleines Programm mit drei Befehlen im einfachsten Quantenprogrammiermodell, das mir begegnet ist. Ich benutze es wie eine "Hallo Welt", um die Grundlagen zu vermitteln.
Gestatten Sie mir eine kurze, vereinfachte Zusammenfassung des Messkalküls von Danos et al. 1 basiert auf dem Einweg-Quantencomputer 2 : Ein Qubit wird bei der Messung zerstört, aber die Messung wirkt sich auf alle anderen Qubits aus, die damit verwickelt waren. Es hat einige theoretische und praktische Vorteile gegenüber den "schaltungsbasierten" Quantencomputern, wie sie vom photonischen Chip realisiert werden, aber das ist eine andere Diskussion.
Stellen Sie sich einen Quantencomputer mit nur fünf Befehlen vor: N, E, M, X und Z. Die "Assemblersprache" ähnelt der Ihres regulären Computers, nach Ausführung eines Befehls wird mit dem nächsten Befehl in der Sequenz fortgefahren. Jeder Befehl benötigt eine Ziel-Qubit-Kennung, wir verwenden hier nur eine Zahl und andere Argumente.
N 2 # create a new quantum bit and identify it as '2'
E 1 2 # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0 # measure qubit '1' with an angle of zero (angle can be anything in [0,2pi]
# qubit '1' is destroyed and the result is either True or False
# operations beyond this point can be dependent on the signal of '1'
X 2 1 # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'
Das obige Programm erzeugt somit eine Ancilla, verwickelt sie mit dem eingegebenen Qubit, misst die Eingabe und führt abhängig vom Messergebnis eine Operation an der Ancilla durch. Das Ergebnis ist, dass Qubit 2 jetzt den Zustand von Qubit 1 nach der Hadamard- Operation enthält.
Das oben Genannte ist natürlich so niedrig, dass Sie es nicht von Hand codieren möchten. Der Vorteil des Messkalküls besteht darin, dass es "Muster" einführt, eine Art zusammensetzbare Makros, mit denen Sie größere Algorithmen erstellen können, als Sie es mit Subroutinen tun würden. Sie beginnen mit 1-Anweisungsmustern und bauen von dort aus größere Muster auf.
Anstelle einer Assembler-ähnlichen Anweisungssequenz wird das Programm häufig auch als Graph notiert:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
wobei volle Pfeile Qubitabhängigkeiten sind und der gepunktete Pfeil eine Signalabhängigkeit ist.
Das Folgende ist das gleiche Hadamard-Beispiel, das in einem kleinen Programmierwerkzeug ausgedrückt wird, wie ich es mir bei einem "Quantenprogrammierer" vorstellen würde.
Bearbeiten: (Hinzufügen von Relationen zu "klassischen" Computern) Klassische Computer sind immer noch sehr effizient, was sie am besten können. Die Vision ist daher, dass Quantencomputer verwendet werden, um bestimmte Algorithmen zu entladen GPU. Wie Sie oben gesehen haben, würde die CPU den Quantencomputer durch Senden eines Befehlsstroms steuern und die Messergebnisse aus den booleschen "Signalen" zurücklesen. Auf diese Weise haben Sie eine strikte Trennung zwischen klassischer Steuerung durch die CPU und dem Quantenzustand und den Auswirkungen auf den Quantencomputer.
Zum Beispiel werde ich meinen Quantencoprozessor verwenden, um einen zufälligen Booleschen Wert oder ein Cointoss zu berechnen. Klassische Computer sind deterministisch, daher ist es schlecht, eine gute Zufallszahl zurückzugeben. Quantencomputer sind von Natur aus probabilistisch. Alles, was ich tun muss, um eine zufällige 0 oder 1 zu erhalten, ist, ein gleichmäßig ausgeglichenes Qubit zu messen. Die Kommunikation zwischen der CPU und 'QPU' würde ungefähr so aussehen:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Wo { ... }
ist der Quantenspeicher der QPU, der Qubits enthält, und [...]
sein klassischer (Signal-) Speicher, der Boolesche Werte enthält?
- Danos et al. Die Messrechnung. arXiv (2007) vol. quant-ph
- Raussendorf und Briegel. Ein Einweg-Quantencomputer. Physical Review Letters (2001) vol. 86 (22) S. 5188-5191