Характеристики квантовых компьютеров

f7532b6443b2819740643ad56fdf5b17

Мощность квантового компьютера измеряется в кубитах, базовой единице измерения в квантовом компьютере. Источник.
Я делаю фейспалм после каждого прочтения подобной фразы. До добра это не довело, начало садиться зрение; скоро придется обращаться к Meklon.

Думаю, пора несколько систематизировать основные параметры квантового компьютера. Их несколько:

  1. Количество кубитов
  2. Время удержания когерентности (время декогеренции)
  3. Уровень ошибок
  4. Архитектура процессора
  5. Цена, доступность, условия содержания, время амортизации, инструменты программирования, и т.д.

Количество кубитов

Тут все очевидно, чем больше, тем лучше. На деле же, за кубиты нужно платить, и в идеале нужно покупать ровно столько кубитов, сколько требуется для выполнения задачи. Для разработчика эксклюзивных игровых автоматов достаточно одного кубита на автомат (для генерации рандома). Для «брутфорса» RSA-2048 — как минимум 2048 кубитов.

Самые распиаренные квантовые алгоритмы носят имена Гровера и Шора. Гровер позволяет «хакать» хеши. Для краха биткоина нужны компьютеры с как минимум 256 кубитами на борту (можно пошаманить со сложностью биткоина, но давайте остановимся на этой круглой цифре). Шор позволяет факторизовать числа. Для факторизации числа длиной n двоичных разрядов нужно как минимум n кубитов.

Текущий максимум: 50 кубитов (уже 72?). И на самом деле, 50 кубитов это предел. Предел симуляции квантового компьютера. В теории, мы можем симулировать любое число кубитов на классических вычислителях. На практике, добавление одного кубита в симуляцию требует удвоения классических вычислителей. Добавьте сюда слухи об удвоении кубитов каждый год, и задайте себе вопрос: как дебажить алгоритмы для 256\512\1024\2048 кубитов? Симулятора нет, на квантовом процессоре брейк-поинт не поставишь.

Время удержания когерентности (время декогеренции)


Когеренция и когерентность — это не одно и то же. Я предпочитаю сравнивать когерентность с регенерацией оперативной памяти. На планке RAM миллиарды ячеек, на каждой висит заряд, нулевой или единичный. У этого заряда есть очень интересное свойство — он стекает. Изначально «единичная» ячейка становится ячейкой на 0.99, затем 0.98, и так далее. Соответственно, на нулевой накапливается 0.01, 0.02, 0.03… Приходится этот заряд обновлять, «регенерировать». Все, что меньше половины, сбрасывается до нуля, все остальное добивается до единицы.

Квантовые процессоры регенерировать не получится. Соответственно, на все вычисления есть один цикл, до первого «потекшего» кубита. Время до первого «подтека» и называется временем декогеренции. Когерентность же это состояние, когда кубиты еще не «протекли». Здесь можно посмотреть чуть более взрослые объяснения.

Декогеренция связана с числом кубитов: чем больше кубитов, тем сложнее удерживать когерентность. С другой стороны, при наличии большого числа кубитов можно пустить часть из них на коррекцию ошибок, связанных с декогеренцией. Отсюда вытекает, что количество кубитов само по себе ничего не решает. Можно удвоить количество кубитов, и потратить 90% из них на фиксацию декогеренции.

Приблизительно здесь возникает понятие логического кубита. Грубо говоря, если у вас есть процессор на 100 кубитов, но 40 из них направлены на фиксацию декогерентности — у вас остаются 60 логических кубитов. Тех, на которых вы исполняете ваш алгоритм. Концепт логических кубитов сейчас скорее теоретический, про практические реализации лично я не слышал.

Ошибки и их коррекция


Еще один бич квантовых процессоров. Если вы инвертируете кубит, с вероятностью в 2% операция закончится ошибкой. Если вы запутываете 2 кубита, вероятность ошибки достигает 8%. Возьмите число в 256 битов, захешируйте его на SHA-256, посчитайте количество операций, посчитайте вероятность выполнить ВСЕ эти операции безошибочно.

Математики предоставляют решение: коррекция ошибок. Алгоритмы есть. Реализация одного запутывания 2 логических кубитов требует 100.000 физических кубитов. Битко-капец наступит нескоро.

Архитектура процессора


Строго говоря, квантовых компьютеров нет. Есть только квантовые процессоры. Зачем нужна оперативка, когда время на работу ограничиается миллисекундами? Я программирую на Q#, но это язык высокого уровня. Выделил себе 15 кубитов, и делай с ними что хочешь. Захотел, запутал первый кубит с десятым. Возжелал — запутал первые шесть.

На реальном процессоре такой свободы нет. Попросил запутать первый кубит с 15 — компилятор сгенерирует 26 дополнительных операций. Если повезет. Если не повезет — сгенерирует сотню. Дело в том, что кубит может запутываться только с соседями. Больше, чем 6 соседей на кубит, я не видел. В принципе, есть оптимизирующие квантовые программы компиляторы, но они пока скорее теоретические.

У каждого процессора свой набор инструкций, и связи между кубитами различаются. В идеальном мире у нас есть произвольные Rx, Ry, Rz, и их комбинации, плюс свободное запутывание пл десятку признаков, плюс Swap: посмотрите на операторы в Quirk. В реале же у нас имеется несколько пар кубитов, и запутывание CNOT (q[0], q[1]) обходится в одну операцию, а CNOT (q[1], q[0]) — уже в 7. А когерентность тает…

Цена, доступность, условия содержания, время амортизации, инструменты программирования…

Цены не афишируются, доступность рядовому гражданину околонулевая, время амортизации на практике не посчитано, инструменты программирования только зарождаются. Документация на arxiv.org.

Так какую же информация требовать от экспертов при выпуске нового квантового компьютера?


Помимо списка сверху, мне нравятся варианты от PerlPower и Alter2:

Вот бы каждая статья про новый квантовый компьютер начиналась с двух характеристик — количества одновременного спутанных кубитов, и времени удержания кубитов.
Или ещё лучше — с времени выполнения простейшего бенчмарка, например нахождения простых множителей числа 91.

© Habrahabr.ru