Caveat Emptor: наступне сильно упереджене в моїх власних дослідженнях та поглядах на поле QC. Це не становить загального консенсусу на місцях і навіть може містити певну саморекламу.
Проблема показу "привіт світу" квантових обчислень полягає в тому, що ми, як правило, ще далекі від квантових комп'ютерів, як Лейбніц або Беббідж, від вашого поточного комп'ютера. Хоча ми знаємо, як вони повинні працювати теоретично, не існує стандартного способу побудови фізичного квантового комп'ютера. Побічним ефектом цього є те, що не існує єдиної моделі програмування квантових обчислень. Підручники, такі як Nielsen та ін. покаже діаграму «квантової схеми», але вони далекі від формальних мов програмування: вони отримують трохи «махання руками» щодо деталей, таких як класичне управління або обробка результатів введення / виводу / вимірювання.
Те, що мені найбільше підходить у моєму дослідженні як інформатик з мов програмування, а також для того, щоб перетворити суть QC на інших вчених-комп'ютерів, - це використовувати найпростішу модель QC, яку я натрапив, і це все.
Найпростіша програма, з якої я бачив, що містить усі найважливіші елементи, - це невелика програма з трьома інструкціями в найпростішій моделі квантового програмування, яку я натрапила. Я використовую це, як ви б "привіт світ", щоб отримати основні принципи.
Дозвольте мені дати короткий спрощений підсумок обчислення вимірювань Danos et al. 1, що базується на основі квантового комп'ютера, що односторонній 2 : кубіт знищується при вимірюванні, але вимірювання впливає на всі інші кубіти, які були заплутані з ним. Він має певні теоретичні та практичні переваги перед «квотовими» квантовими комп'ютерами, що реалізовані фотонним чіпом, але це вже інше обговорення.
Розглянемо квантовий комп'ютер, у якого є лише п'ять інструкцій: N, E, M, X і Z. Його "мова складання" схожа на звичайний комп'ютер, після виконання однієї інструкції переходить до наступної інструкції в послідовності. Кожна інструкція бере цільовий ідентифікатор кубіта, тут ми використовуємо лише число та інші аргументи.
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'
Вищеописана програма таким чином створює анцилу, обплутує її вхідним кубітом, вимірює вхід і в залежності від результату вимірювання виконує операцію над ациллою. В результаті виходить, що кубіт 2 тепер містить стан кубіта 1 після операції Адамара .
Наведене вище, природно, на такому низькому рівні, що вам не хотілося б його кодувати вручну. Перевага обчислення вимірювань полягає в тому, що він вводить "шаблони", якісь композиційні макроси, які дозволяють складати більші алгоритми, як і підпрограми. Ви починаєте з шаблонів з 1 інструкцією і вирощуєте звідси більші візерунки.
Замість послідовності інструкцій, що нагадує асемблер, програму також часто записувати у вигляді графіка:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
де повні стрілки - кубітна залежність, а пунктирна - залежність 'сигналу'.
Далі той самий приклад Хадамара, виражений у невеликому інструменті програмування, як я б міг би використовувати «квантовий програміст».
редагувати: (додаючи відношення до "класичних" комп'ютерів) Класичні комп'ютери все ще дуже ефективні в тому, що їм найкраще, і тому бачення полягає в тому, що квантові комп'ютери будуть використовуватися для вивантаження певних алгоритмів, аналогічно тому, як поточний комп'ютер завантажує графіку на GPU. Як ви вже бачили вище, центральний процесор керував квантовим комп'ютером, надсилаючи йому потік інструкцій та зчитуючи результати вимірювань із булевих "сигналів". Таким чином, у вас є чітке розділення класичного управління процесором та квантовим станом та ефектами на квантовий комп'ютер.
Наприклад, я буду використовувати свій квантовий спільний процесор для обчислення випадкових булевих чи коінтос. Класичні комп’ютери детерміновані, тому погано повертати гарне випадкове число. Квантові комп’ютери за своєю суттю є ймовірнісними, але все, що мені потрібно зробити, щоб отримати випадковий 0 або 1, - це виміряти рівноважний кубіт. Зв'язок між процесором та QPU виглядатиме приблизно так:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
Де { ... }
є квантова пам'ять QPU, що містить кубіти, і [...]
є її класична (сигнальна) пам'ять, що містить булеві.
- Данос та ін. Обчислення вимірювання. arXiv (2007) вип. квант-ph
- Рауссендорф і Брігель. Односторонній квантовий комп'ютер. Фізичний огляд листів (2001), вип. 86 (22) С. 5188-5191