Caveat Emptor: berikut ini sangat bias pada penelitian saya sendiri dan pandangan di bidang QC. Ini bukan merupakan konsensus umum lapangan dan bahkan mungkin mengandung beberapa promosi diri.
Masalah menunjukkan 'halo dunia' komputasi kuantum adalah bahwa kita pada dasarnya masih jauh dari komputer kuantum seperti Leibnitz atau Babbage dari komputer Anda saat ini. Sementara kita tahu bagaimana mereka harus beroperasi secara teoritis, tidak ada cara standar untuk benar-benar membangun komputer kuantum fisik. Efek sampingnya adalah tidak ada model pemrograman komputasi kuantum tunggal. Buku teks seperti Nielsen et al. akan menampilkan diagram 'sirkuit kuantum', tetapi itu jauh dari bahasa pemrograman formal: mereka mendapatkan sedikit 'lambaian tangan' pada detail seperti kontrol klasik atau berurusan dengan input / output / hasil pengukuran.
Apa yang paling cocok bagi saya dalam penelitian saya sebagai ilmuwan komputer bahasa pemrograman, dan untuk mendapatkan inti QC kepada ilmuwan komputer lain, adalah menggunakan model QC paling sederhana yang pernah saya temui yang melakukan segalanya.
Program komputasi kuantum paling sederhana yang saya lihat yang mengandung semua elemen penting adalah program tiga instruksi kecil dalam model pemrograman kuantum paling sederhana yang pernah saya temui. Saya menggunakannya seperti yang Anda lakukan 'halo dunia' untuk mendapatkan dasar-dasar.
Izinkan saya untuk memberikan ringkasan singkat yang disederhanakan dari Kalkulus Pengukuran oleh Danos et al. 1 yang didasarkan pada didasarkan pada komputer kuantum satu arah 2 : qubit dihancurkan saat diukur, tetapi mengukurnya mempengaruhi semua qubit lain yang terjerat dengannya. Ini memiliki beberapa manfaat teoritis dan praktis atas komputer kuantum 'berbasis sirkuit' seperti yang direalisasikan oleh chip fotonik, tetapi itu adalah diskusi yang berbeda.
Pertimbangkan komputer kuantum yang hanya memiliki lima instruksi: N, E, M, X, dan Z. "Bahasa assembly" -nya mirip dengan komputer biasa Anda, setelah menjalankan satu instruksi, ia melanjutkan ke instruksi berikutnya dalam urutan. Setiap instruksi mengambil pengidentifikasi qubit target, kami hanya menggunakan angka di sini, dan argumen lainnya.
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'
Program di atas dengan demikian menciptakan ancilla, menjeratnya dengan input qubit, mengukur input dan tergantung pada hasil pengukuran melakukan operasi pada ancilla. Hasilnya adalah qubit 2 sekarang berisi status qubit 1 setelah operasi Hadamard .
Di atas secara alami pada tingkat rendah sehingga Anda tidak ingin kode tangan itu. Manfaat kalkulus pengukuran adalah ia memperkenalkan 'pola', semacam makro komposer yang memungkinkan Anda untuk menyusun algoritma yang lebih besar seperti yang Anda lakukan dengan subrutin. Anda mulai dengan pola 1-instruksi dan menumbuhkan pola yang lebih besar dari sana.
Alih-alih urutan instruksi assembler-like, juga umum untuk menuliskan program sebagai grafik:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
di mana panah penuh adalah dependensi qubit dan panah putus-putus adalah ketergantungan 'sinyal'.
Berikut ini adalah contoh Hadamard yang sama diungkapkan dalam alat pemrograman kecil seperti yang saya bayangkan seorang 'programmer kuantum' akan digunakan.
sunting: (menambahkan hubungan dengan komputer 'klasik') Komputer klasik masih benar-benar efisien dalam apa yang mereka lakukan yang terbaik, dan dengan demikian visinya adalah bahwa komputer kuantum akan digunakan untuk memuat algoritma tertentu, analog dengan bagaimana komputer saat ini memuat grafik ke sebuah GPU. Seperti yang Anda lihat di atas, CPU akan mengontrol komputer kuantum dengan mengirimkannya aliran instruksi dan membaca kembali hasil pengukuran dari 'sinyal' boolean. Dengan cara ini Anda memiliki pemisahan ketat kontrol klasik oleh CPU dan status kuantum dan efek pada komputer kuantum.
Sebagai contoh, saya akan menggunakan co-prosesor kuantum saya untuk menghitung boolean atau cointoss acak. Komputer klasik bersifat deterministik, sehingga buruk dalam mengembalikan angka acak yang baik. Komputer kuantum secara inheren probabilistik, yang harus saya lakukan untuk mendapatkan 0 atau 1 acak adalah mengukur qubit yang seimbang. Komunikasi antara CPU dan 'QPU' akan terlihat seperti ini:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Di mana { ... }
memori kuantum QPU berisi qubit dan [...]
merupakan memori klasik (sinyal) yang berisi boolean.
- Danos et al. Kalkulus Pengukuran. arXiv (2007) vol. quant-ph
- Raussendorf dan Briegel. Komputer kuantum satu arah. Physical Review Letters (2001) vol. 86 (22) hlm. 5188-5191