Caveat Emptor: następujące są bardzo stronnicze w moich własnych badaniach i poglądach na polu QC. Nie stanowi to ogólnego konsensusu w tej dziedzinie i może nawet zawierać autopromocję.
Problem z pokazaniem „cześć światu” obliczeń kwantowych polega na tym, że w zasadzie wciąż jesteśmy tak daleko od komputerów kwantowych, jak Leibnitz lub Babbage od obecnego komputera. Chociaż wiemy, jak powinny działać teoretycznie, nie ma standardowego sposobu na zbudowanie fizycznego komputera kwantowego. Efektem ubocznym tego jest brak jednego modelu programowania obliczeń kwantowych. Podręczniki takie jak Nielsen i in. pokaże ci schemat „obwodu kwantowego”, ale są one dalekie od formalnych języków programowania: dostają trochę „machania ręką” na szczegółach, takich jak klasyczna kontrola lub radzenie sobie z wynikami wejścia / wyjścia / pomiarów.
To, co najbardziej mi się podobało w moich badaniach jako informatyk w języku programowania, i aby przenieść się do QC wśród innych informatyków, to użycie najprostszego modelu QC, z którym się spotkałem, który robi wszystko.
Najprostszym programem obliczeń kwantowych, który widziałem, który zawiera wszystkie niezbędne elementy, jest mały program z trzema instrukcjami w najprostszym modelu programowania kwantowego, z jakim się spotkałem. Używam tego jako „cześć świata”, aby poznać podstawy.
Pozwólcie, że przedstawię szybkie uproszczone podsumowanie rachunku pomiarowego Danos i in. 1, na którym opiera się, opiera się na jednokierunkowym komputerze kwantowym 2 : kubit jest niszczony podczas pomiaru, ale jego pomiar wpływa na wszystkie inne kubity, które były z nim splątane. Ma pewne teoretyczne i praktyczne zalety w porównaniu z komputerami kwantowymi „opartymi na obwodach”, jakie realizuje układ fotoniczny, ale to inna dyskusja.
Rozważmy komputer kwantowy, który ma tylko pięć instrukcji: N, E, M, X i Z. Jego „język asemblera” jest podobny do zwykłego komputera, po wykonaniu jednej instrukcji przechodzi do następnej instrukcji w sekwencji. Każda instrukcja przyjmuje docelowy identyfikator kubitowy, używamy tutaj tylko liczby i innych argumentów.
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'
Powyższy program tworzy zatem ancilla, zaplątuje ją w qubit wejściowy, mierzy dane wejściowe iw zależności od wyniku pomiaru wykonuje operację na ancilla. W rezultacie qubit 2 zawiera teraz stan qubit 1 po operacji Hadamarda .
Powyżej jest naturalnie na tak niskim poziomie, że nie chciałbyś go ręcznie kodować. Zaletą rachunku pomiarowego jest to, że wprowadza on „wzorce”, pewnego rodzaju makra kompozycyjne, które umożliwiają komponowanie większych algorytmów, tak jak w przypadku podprogramów. Zaczynasz od wzorców z 1 instrukcją i stamtąd wyrastasz z większych wzorców.
Zamiast sekwencji instrukcji przypominającej asembler często zapisuje się program jako wykres:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
gdzie pełne strzałki są zależnościami kubitowymi, a kropkowana strzałka jest zależnością „sygnałową”.
Poniżej znajduje się ten sam przykład Hadamarda wyrażony w małym narzędziu programistycznym, jakiego wyobrażam sobie jako „programisty kwantowego”.
edycja: (dodając relację z komputerami „klasycznymi”) Komputery klasyczne są nadal bardzo wydajne w tym, co robią najlepiej, a więc wizją jest to, że komputery kwantowe będą używane do odciążenia niektórych algorytmów, analogicznie do tego, jak obecny komputer odciąża grafikę do GPU. Jak widzieliśmy powyżej, procesor kontrolowałby komputer kwantowy, wysyłając mu strumień instrukcji i odczytując wyniki pomiarów z logicznych „sygnałów”. W ten sposób masz ścisłe oddzielenie klasycznej kontroli przez procesor i stan kwantowy oraz wpływ na komputer kwantowy.
Na przykład zamierzam użyć mojego koprocesora kwantowego do obliczenia losowej wartości logicznej lub cointossa. Komputery klasyczne są deterministyczne, więc źle zwracają dobrą liczbę losową. Komputery kwantowe są z natury jednak probabilistyczne, wszystko co muszę zrobić, aby uzyskać losowe 0 lub 1, to zmierzyć równo zrównoważony kubit. Komunikacja między CPU a „QPU” wyglądałaby mniej więcej tak:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Gdzie { ... }
jest pamięć kwantowa QPU zawierająca kubity, a [...]
jej pamięć klasyczna (sygnałowa) zawiera logiczne wartości.
- Danos i in. Rachunek pomiarowy. arXiv (2007) vol. kw. ph
- Raussendorf i Briegel. Jednokierunkowy komputer kwantowy. Physical Review Letters (2001) vol. 86 (22) s. 5188–5191