Поделиться через


Различные типы профилей target в Azure Quantum

Квантовые устройства по-прежнему являются новыми технологиями, и, к сожалению, не все из них могут выполнять каждый код Q#. Таким образом, при разработке квантовых программ необходимо учитывать некоторые ограничения. target Типы профилей используются для определения возможностей квантовых устройств, которые можно использовать target с помощью программ Q#, то есть возможностей текущих квантовых устройств, доступных в Azure Quantum.

В этой статье рассматриваются различные типы профилей target в Azure Quantum, их ограничения и способы их настройки с помощью пакета средств разработки Quantum (QDK).

Целевые профили и их ограничения

В настоящее время Azure Quantum и QDK управляют тремя различными target профилями в зависимости от их способности выполнять программы квантового промежуточного представления (QIR).

  • Unrestricted: Этот профиль может запускать любую программу QIR, а значит любую программу Q#, в пределах доступной памяти для симуляторов или доступного числа кубитов для физических квантовых компьютеров.
  • QIR base: Этот профиль может запускать любую программу Q#, которая не требует использования результатов из измерений кубитов для управления потоком программы. В программе на Q#, предназначенной для QPU такого типа, значения типа Result не поддерживают сравнение на равенство.
  • QIR Adaptive RI: Этот профиль имеет ограниченную возможность использовать результаты измерений кубитов для управления потоком программы. В программе Q#, предназначенной для этого типа QPU, вы можете сравнивать значения типа Result в условиях инструкций if в операциях, что позволяет измерять в середине цикла.

Создание и запуск программ для Unrestrictedtarget профиля

Unrestricted target профили могут запускать любую программу, что означает, что вы можете писать программы Q# без ограничений функциональности. Azure Quantum не предоставляет target для этого профиля. Однако вы можете запускать Unrestricted программы Q# на симуляторах, предоставляемых QDK.

Настройка Unrestrictedtarget профиля

В Visual Studio Code:

  1. Выберите Вид —> Палитра команд и введите Q#: Задать профиль Azure Quantum QIRtarget. Нажмите ВВОД.
  2. Выберите "Без ограничений".

В Python можно задать target профиль с помощью qsharp.init метода.

qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted) 

Создание и запуск программ для QIR Basetarget профиля

QIR Base target профили могут выполнять широкий спектр приложений Q# с тем ограничением, что они не могут использовать результаты измерений кубитов для управления потоком программы. В частности, значения типа Result не поддерживают сравнение равенства.

Например, эта операция не может выполняться в :QIR Basetarget

    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

Если вы попытаетесь запустить эту операцию на объекте QIR Basetarget, операция завершится ошибкой, так как она выполняет сравнение с помощью результата измерения (M(q) == Zero) для управления потоком вычислений с помощью инструкции if . То же самое применимо к любому типу условного ветвления, например, к операторам , elif и else.

Настройка QIR Basetarget профиля

В Visual Studio Code:

  1. Выберите Просмотр —> Командная палитра и введите Q#: задайте профиль Azure Quantum QIRtarget. Нажмите ВВОД.
  2. Выберите базу QIR.

В Python можно задать target профиль с помощью qsharp.init метода.

qsharp.init(target_profile=qsharp.TargetProfile.Base) 

Поддержка targets для профиля QIR Basetarget

В настоящее время в Azure Quantum доступны следующие QIR Basetargets.

Создание и запуск программ для QIR Adaptive RItarget профиля

QIR Adaptive RI профиль targets может выполнять широкий спектр приложений Q# с некоторыми ограничениями. Этот тип профиля предполагает улучшение профилей QIR Base , но по-прежнему имеет некоторые ограничения.

QIR Adaptive RI профиль targets разрешает условные операции на основе измерений и измерения среднего канала, что означает, что кубиты можно выборочно измерять в точке, отличной от конечной инструкции квантовой программы, а выходные данные измерения можно использовать в других операциях. Измерение среднего канала позволяет выполнять несколько измерений в любой точке в рамках квантовой программы. Квантовая информация измеренных кубитов сворачивается до классического состояния (ноль или одна), но неизмеренные кубиты остаются в своём квантовом состоянии.

В Q# при измерении кубита возвращается значение типа Result . Если вы хотите использовать этот результат в условном выражении, необходимо сравнивать его напрямую. Соответствующие условные блоки не могут содержать операторы return или set.

Например, в следующем коде Q# разрешено:QIR Adaptive RItarget

operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); }
}

Настройка QIR Adaptive RItarget профиля

В Visual Studio Code:

  1. Выберите Просмотр —> Палитра команд и введите Q#: Задайте профиль QIR Azure Quantum. Нажмите ВВОД.
  2. Выберите QIR Adaptive RI.

В Python можно задать профиль target с помощью метода qsharp.init.

qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI) 

Поддерживается targets для QIR Adaptive RItarget профиля

В настоящее время в Azure Quantum доступны следующие QIR Adaptive RItargets: