Типы целевых профилей в Azure Quantum

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

Квантовые единицы обработки (QPU): различные профили и их ограничения

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

Будучи развивающейся технологией, квантовые устройства пока могут не иметь возможности выполнять все программы на Q#. Таким образом, необходимо учитывать некоторые ограничения при разработке программ для разных targets. В настоящее время в Azure Quantum и QDK доступны три профиля QPU:

  • Full: этот профиль может запускать любую программу Q# в пределах памяти для симуляторов или количества кубитов для физических квантовых компьютеров.
  • No Control Flow: этот профиль может запускать любую программу Q#, которая не требует использования результатов измерений кубитов для управления потоком программы. В программе targetQ# для этого типа QPU значения типа Result не поддерживают сравнение на равенство.
  • Basic Measurement Feedback: этот профиль имеет ограниченную возможность использовать результаты измерений кубитов для управления потоком программы. В программе targetQ# для этого типа QPU можно сравнивать значения типа Result как часть условий в if инструкциях в операциях, что позволяет выполнять измерения в середине цепи. Соответствующие условные блоки не могут содержать инструкции return или set.

Создание и запуск приложений для Full профиля targets

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

Создание и запуск приложений для No Control Flow профиля targets

No Control Flow Profile targets может запускать широкий спектр приложений Q# с ограничением, что они не могут использовать результаты измерений кубитов для управления потоком программы. В частности, значения типа Result не поддерживают сравнение на равенство.

Например, эту операцию нельзя выполнить в No Control Flowtarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
        if (desired != M(q)) {
            X(q);
        }
    }

Попытка выполнить эту операцию в завершится сбоем No Control Flowtarget , так как вычисляется сравнение двух результатов (desired != M(q)) для управления потоком вычислений с помощью инструкции if . Это будет применимо к любому типу условного ветвления, например elif к операторам и else .

Примечание

В настоящее время вы не можете отправлять квантовые программы, которые применяют операции к кубитам, измеренным в No Control Flowtargets, даже если вы не используете результаты для управления потоком программы. То есть No Control Flowtargets не допускайте средние измерения цепи.

Например, следующий код нельзя выполнить в No Control Flowtarget:

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

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

В настоящее время для Azure Quantum доступны следующие No Control Flowtargets компоненты:

Создание и запуск приложений для Basic Measurement Feedback профиля targets

Basic Measurement Feedback Profile targets может выполнять множество приложений Q# с ограничением, которое позволяет сравнивать значения типа Result только как часть условий в if инструкциях в операциях. Этот тип профиля предполагает улучшение по сравнению с No Control Flow профилями, но по-прежнему распространяются некоторые ограничения.

Basic Measurement Feedback профиль targets позволяет выполнять условные операции на основе измерений и измерения по средней цепи. Это означает, что кубиты могут быть выборочно измерены в точке, отличной от конечной инструкции квантовой программы, а выходные данные измерения могут использоваться в других операциях. Измерение по средней цепи позволяет выполнять несколько измерений в любой точке квантовой программы. Квантовая информация измеренных кубитов сворачивается в классическое состояние (ноль или единица), но неизменимые кубиты сохраняют свое квантовое состояние.

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

Например, следующий код Q# будет разрешен в Basic Measurement Feedbacktarget:

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

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

Однако один и тот же код с перемещенной логической оценкой не будет разрешен:

operation BeOne(q : Qubit) : Bool {
     return M(q) == One;
}

operation SetToZeroUsingBeOne(q : Qubit) : Unit {
     if BeOne(q) { X(q); }
}

Операцию SetQubitState в можно использовать в ,targetBasic Measurement Feedbackесли вы не включаете оператор return или set в инструкцию if .No Control Flow Это будет применимо к любому типу условного ветвления, например elif к операторам и else . Например, следующую операцию нельзя использовать в Basic Measurement Feedbacktarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
    if desired != M(q) {
        X(q);
        return M(q);
    }
}

В настоящее время для Azure Quantum доступны следующие Basic Measurement Feedbacktargets компоненты: