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


Типы профилей QIR target в Azure Quantum

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

Target профили и их ограничения

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

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

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

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

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

В Visual Studio Code:

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

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

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

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

QIR Basetarget профили могут выполнять широкий спектр приложений 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#: задайте профиль QIR target Azure Quantum. Нажмите ВВОД.
  2. Выберите базу QIR.

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

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

Добавлена поддержка targets.

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

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

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 target Azure Quantum. Нажмите ВВОД.
  2. Выберите QIR Adaptive RI.

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

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

Добавлена поддержка targets.

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

  • Поставщик: Quantinuum
    • Эмуляторы Quantinuum (quantinuum.sim.h1-1e, quantinuum.sim.h2-1e)
    • QPUs quantinuum (quantinuum.qpu.h1-1, quantinuum.qpu.h2-1)