48-кубитный гибридный симулятор Гровера на домашней видеокарте: пробиваем стены памяти и времени

от автора

Вокруг квантовых вычислений много маркетингового шума. Если вы попытаетесь смоделировать честное 48-кубитное квантовое состояние в комплексном базисе complex128, то неизбежно упретесь в «стену памяти» в 4.5 Петабайта. Если же вы решите применить блочную декомпозицию пространства состояний для ее поочередного обсчета, то упретесь в «стену времени» длиною в несколько лет непрерывных вычислений на GPU.

В этой статье мы разберем проект гибридного симулятора, который обходит обе стены, удерживая потребление видеопамяти в пределах 268 МБ, а время симуляции сокращает в 400 раз.

Давайте сразу снимем маски: физически данный симулятор не удерживает 48 кубитов в единой суперпозиции. Между старшей и младшей половиной регистра полностью отсутствует квантовая запутанность (entanglement).

Вместо этого применена жесткая, но эффективная классическая блочная декомпозиция (принцип Space‑Time Trade‑off, то есть размен памяти на время):

  • Старшие 24 бита вынесены в обычный классический цикл for на Python. Они последовательно перебирают 16.7 миллионов независимых блоков (макроузлов).

  • Младшие 24 бита — это честное квантовое подпространство, которое последовательно симулируется внутри GPU.

Благодаря этому память выделяется только под один текущий 24-кубитный блок:
Расчет памяти: 2^24 состояний * 16 байт (тип complex128) = 268.4 МБ видеопамяти.

Однако у такой схемы есть обратная сторона. Если просто использовать блочную декомпозицию пространства состояний и перебирать эти сектора (всего их 2^24 штук) один за другим в лоб, то мы немедленно упремся в стену времени, и вычисления на обычной видеокарте займут несколько лет.

Главный плюс такого подхода — полная свобода масштабирования. Мы можем динамически менять баланс между классическим циклом и видеокартой, подстраивая алгоритм под любое количество кубитов если позволяет объем VRAM (подробнее об этом ниже).

Стена времени и 8-шаговый «Экспресс‑Радар» (Алгоритм BBHT)

Если просто перебирать 16.7 млн блоков и в каждом крутить полный алгоритм Гровера, то для 24 кубитов видеокарта обязана выполнить строго 3217 итераций диффузора в каждом узле. Это и есть «стена времени», из-за которой расчеты всего пространства 2^48 вариантов растянутся на несколько лет работы.

Чтобы пробить её, в проект внедрена концепция Dynamic Circuits (динамических квантовых схем с промежуточными измерениями) в связке с идеями алгоритма BBHT (Boyer-Brassard-Høyer-Tapp) для квантового подсчета.

Вместо всех 3217 шагов симулятор делает всего 8 экспресс-итераций. Оракул (в нашем случае — урезанный криптографический хэш SHA48, написанный на нативных CUDA-ядрах) взаимодействует с волновым вектором. Фазовый сдвиг проецируется на вспомогательный кубит (ансиллу). По логике BBHT, даже такого малого количества шагов достаточно, чтобы зафиксировать наличие правильного решения в подпространстве до завершения полного цикла Гровера.

На 8-м шаге выполняется математическое измерение средней амплитуды регистра. Если в текущем блоке искомого хэша нет, геометрия поля остается идеально «плоской». В таком случае модуль разности текущей средней величины и стартовой амплитуды стремится к нулю. Фильтр фазовых аномалий выполняет мгновенный сброс блока (Early-Exit):

Тяжелый и долгий дорасчет на все 3217 шагов запускается только тогда, когда этот «радар» зафиксировал искривление фазы. Для пустых блоков время проверки падает со стартовых 14 секунд до 0.035 секунды. Это и дает примерно 400-кратное ускорение самого процесса симуляции, сжимая потенциальные несколько лет ожидания до вполне подъемных дней.

Физический смысл против симуляционного артефакта

Здесь важно ответить на критику: применимы ли эти 8 шагов на реальном квантовом компьютере? Ведь в реальном мире любое промежуточное измерение рабочих кубитов разрушает суперпозицию до окончания алгоритма.

Обоснование метода строится на том, что промежуточному замеру подвергаются не рабочие кубиты, а вспомогательный кубит (ансилла), что по законам квантовой механики сохраняет суперпозицию основного регистра. На реальном квантовом процессоре с поддержкой динамических схем это физически реализуемо и позволяет аппаратно останавливать вычисления, экономя машинное время и криогенный ресурс.

Однако на классическом железе данный подход — это, по сути, высокотехнологичный математический симулякр классического флага (if hash == target), обернутый в тяжелые формулы волновой функции с комплексными числами.

Перед нами гибридная система, оценивать её нужно не по критериям хакерского софта для взлома. Обычный классический брутфорсер на GPU без комплексных чисел будет быстрее данного симулятора, так как не тратит огромные ресурсы на просчет волновой математики для каждого элемента.

Реальная ценность проекта лежит исключительно в научно-исследовательской и образовательной плоскостях:

Криптографический верификационный стенд. Поскольку оракул SHA48 научно воспроизводит честный лавинный эффект на CUDA, криптографы могут использовать этот проект для оценки квантовой устойчивости симметричных шифров. Изменяя количество раундов, можно изучать, как хаотичное перемешивание бит влияет на способность динамических квантовых схем распознавать фазовые аномалии.

Цифровой двойник (Digital Twin) для квантовых инженеров. Проект позволяет на обычном ПК отлаживать логику алгоритмов обратной связи и ветвления в динамических схемах (триггеры раннего выхода) до того, как отправлять задачи на дорогое реальное квантовое железо.

Доступная академическая база. Этот проект дает студентам и ученым возможность изучать физику волнового вектора и интерференцию на больших размерностях (24 кубита или более локально в блоке) на любой домашней видеокарте.

Важное преимущество этой гибридной архитектуры — ее гибкость. Текущая конфигурация «48 виртуальных кубитов = 24 в Python + 24 на GPU» не вшита в код намертво. Систему можно легко масштабировать в зависимости от задач и доступного железа:

Масштабирование старшего регистра (Python-цикл): Первые 24 бита, которые перебираются классическим циклом на Python, можно масштабировать абсолютно свободно в любую сторону. Если вы уменьшите их количество до 10, общая размерность симулятора станет 34 кубита, а вычисления завершатся мгновенно. Если вы увеличите их количество до 36, общая размерность вырастет до 60 кубитов. При этом объем памяти видеокарты не вырастет ни на один байт — он останется равен тем же 268.4 МБ, так как GPU всегда обрабатывает только один локальный блок за раз. Меняется исключительно количество шагов внешнего цикла.

Масштабирование младшего регистра (GPU-блок): Размер подпространства на видеокарте тоже можно двигать. Если у вас старая GPU с малым объемом VRAM, можно выделить под нее всего 20 кубитов (потребуется всего 16 МБ видеопамяти), а остальные кубиты «перекинуть» на классический цикл Python. Если же в вашем распоряжении мощная современная RTX с 16 ГБ или 24 ГБ VRAM, размер GPU-блока можно смело увеличить до 28 или 29 кубитов, что позволит видеокарте обсчитывать в сотни раз больше комбинаций за один проход.

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

Исходный код симулятора, CUDA-ядра для усеченного SHA48 и документация открыты и доступны в моем репозитории на GitHub.

ссылка на оригинал статьи https://habr.com/ru/articles/1043474/