Типы профилей 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:
- Выберите представление —> палитра команд и тип Q#: задайте профиль QIR target Azure Quantum. Нажмите ВВОД.
- Выберите "Без ограничений".
В 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:
- Выберите представление —> палитра команд и тип Q#: задайте профиль QIR target Azure Quantum. Нажмите ВВОД.
- Выберите базу QIR.
В Python можно задать target профиль с помощью qsharp.init
метода.
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Добавлена поддержка targets.
В настоящее время они QIR Basetargets доступны для Azure Quantum:
Поставщик: IonQ
- Симулятор IonQ (
ionq.simulator
) - Единица обработки запросов IonQ (
ionq.qpu.*
)
- Симулятор IonQ (
Поставщик услуг: Rigetti
- Симулятор Rigetti (
rigetti.sim.*
) - QPU Rigetti (
rigetti.qpu.*
)
- Симулятор Rigetti (
Создание и запуск приложений для 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:
- Выберите представление —> палитра команд и тип Q#: задайте профиль QIR target Azure Quantum. Нажмите ВВОД.
- Выберите QIR Adaptive RI.
В Python можно задать target профиль с помощью qsharp.init
метода.
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Добавлена поддержка targets.
В настоящее время они QIR Adaptive RItargets доступны для Azure Quantum: