Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Квантовые вычисления по-прежнему являются новыми технологиями. Не все квантовое оборудование может запускать все квантовые программы. Например, только определённое аппаратное обеспечение может выполнять измерения в середине квантовой схемы, которые необходимы для запуска программ с условными ветвями на основе результатов измерения кубита.
Когда вы отправляете программу для выполнения на Azure Quantum, она преобразуется в формат промежуточного квантового представления (QIR). QIR не зависит от языка программирования или типа квантового оборудования, на котором выполняется программа. Модель MicrosoftQuantum Development Kit (QDK) поддерживает несколько целевых профилей QIR для различных аппаратных возможностей.
Дополнительные сведения см. в QIRразделе "Квантовое промежуточное представление".
Обзор целевых профилей
Azure Quantum и QDK поддерживают несколько QIR целевых профилей. Тип целевого профиля, который вы выбираете, определяет, какой из следующих конструкций программирования может использовать ваша программа.
- Условные ветви с операторами
ifв зависимости от результатов измерения кубита - Арифметические операции с числами с плавающей запятой, вычисляемых из результатов измерения кубита
- Фиксированные и несвязанные циклы на основе результатов измерения кубитов
В следующей таблице перечислены все целевые профили QIR в QDK и конструкции программирования, которые они поддерживают, в порядке от наиболее строгих к наименее строгим.
| QIR целевой профиль | Условные ветви | Операции с плавающей запятой | Loops |
|---|---|---|---|
| Base | ❌ | ❌ | ❌ |
| Adaptive RI | ✅ | ❌ | ❌ |
| Adaptive RIF | ✅ | ✅ | ❌ |
| Adaptive | ✅ | ✅ | ✅ |
| Unrestricted | ✅ | ✅ | ✅ |
Настройте целевые профили в QDK
Чтобы запустить программу на QDK симуляторах или Azure Quantum целевом объекте, необходимо задать целевой QIR профиль. Если вы не настраиваете профиль целевого объекта вручную, QDK пытается автоматически задать соответствующий профиль для выбранного целевого объекта.
при отправке программ для выполнения через Azure Quantum службу QDK пытается автоматически выбрать соответствующий профиль для выбранного целевого объекта выполнения.
Base QIR профиль
Базовый QIR целевой профиль является самым строгим. Используйте базовый профиль для более простых программ, которые не используют классические структуры программирования, такие как ветви и циклы. Если целевой объект квантового оборудования не может выполнять измерения среднего канала, вероятно, вам потребуется использовать базовый профиль.
Следующие Azure Quantum целевые объекты могут запускать программы, использующие базовый QIR профиль.
| Provider | Симулятор | Квантовый процессор (QPU) |
|---|---|---|
| IonQ | ionq.simulator |
ionq.qpu.* |
| Rigetti | rigetti.sim.* |
rigetti.qpu.* |
Дополнительные сведения об этих Azure Quantum поставщиках см. в разделе поставщика IonQ и поставщика Rigetti.
Настройка базового профиля
Чтобы задать базовый QIR целевой профиль в QDK расширении для Visual Studio Code (VS Code), выберите один из следующих параметров.
Если вы настроили проект Q#, добавьте следующую команду в файл проекта
qsharp.json.{ "targetProfile": "base" }Если вы работаете в
.qsфайле, который не является частью проекта Q#, задайте целевой профиль непосредственно в коде Q#. Для этого добавьте@EntryPoint(Base)в строке перед операцией точки входа в вашей программе.@EntryPoint(Base) operation Main() : Unit { ... }
Чтобы задать базовый целевой профиль в пакете QDK Python, выполните следующий код.
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Base)
Ограничения на программы Q# с базовым профилем
Базовый целевой профиль может выполнять широкий спектр программ Q#. Основное ограничение заключается в том, что программы Q# не могут выполнять логические сравнения со значениями Result типов из операций измерения.
Например, нельзя выполнить следующую FlipQubitOnZero операцию в базовом целевом объекте, так как программа содержит if инструкцию, которая использует результат измерения.
@EntryPoint(Base)
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Adaptive RI QIR профиль
Адаптивный целевой профиль RI поддерживает запуск более широкого набора программ, чем базовый профиль, но всё же имеет некоторые ограничения.
Adaptive RI целевые объекты поддерживают программы, использующие измерения среднего канала в условных if инструкциях. Если ваше квантовое оборудование поддерживает измерения в середине схемы, а программа использует операторы if, зависящие от результатов измерений, то вам, вероятно, нужно использовать адаптивный профиль RI.
Например, следующая программа Q# может выполняться в адаптивном целевом объекте ri.
@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Следующие Azure Quantum целевые объекты могут запускать программы, использующие адаптивный профиль целевого объекта RI.
| Provider | Симулятор | Квантовый процессор (QPU) |
|---|---|---|
| Квантинум | quantinuum.sim.h2-1e |
quantinuum.qpu.h2-1 |
| Квантинум | quantinuum.sim.h2-2e |
quantinuum.qpu.h2-2 |
Дополнительные сведения о Quantinuum см. в Azure Quantumразделе "Поставщик Quantinuum".
Настройка адаптивного профиля RI
Чтобы задать целевой профиль adaptive RI QIR в расширении QDK для VS Code, выберите один из следующих вариантов.
Если вы настроили проект Q#, добавьте в файл проекта
qsharp.jsonследующую команду:{ "targetProfile": "adaptive_ri" }Если вы работаете в
.qsфайле, который не является частью проекта Q#, задайте целевой профиль непосредственно в коде Q#. Для этого добавьте@EntryPoint(Adaptive_RI)в строке перед операцией точки входа в вашей программе.@EntryPoint(Adaptive_RI) operation Main() : Unit { ... }
Чтобы задать целевой профиль адаптивного RI в пакете Python QDK, запустите следующий код.
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Adaptive_RI)
Adaptive RIF QIR профиль
Адаптивный целевой профиль RIF имеет те же возможности, что и адаптивный профиль RI, но также поддерживает программы, содержащие арифметические операции с плавающей запятой. Если ваше квантовое оборудование может выполнять измерения в середине схемы, а ваша программа использует операторы if и числа с плавающей запятой, вычисляемые на основе результатов измерений, то вам, вероятно, нужно использовать адаптивный профиль RIF.
Например, следующая программа Q# может выполняться в адаптивном целевом объекте RIF.
@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
use q = Qubit();
H(q);
mutable f = 0.0;
if M(q) == One {
f = 0.5;
}
Reset(q);
return f;
}
Azure Quantum в настоящее время не имеют адаптивных целевых объектов RIF, но вы можете запускать программы для адаптивных целевых объектов RIF на локальных QDK симуляторах. Дополнительные сведения об симуляторах см. в QDKразделе "Общие сведения о квантовых симуляторах" в этой QDKстатье.
Настройка адаптивного профиля RIF
Чтобы задать адаптивный целевой профиль RIF QIR в QDK расширении VS Code, выберите один из следующих параметров.
Если вы настроили проект Q#, добавьте в файл проекта
qsharp.jsonследующую команду:{ "targetProfile": "adaptive_rif" }Если вы работаете в
.qsфайле, который не является частью проекта Q#, задайте целевой профиль непосредственно в коде Q#. Для этого добавьте@EntryPoint(Adaptive_RIF)в строке перед операцией точки входа в вашей программе.@EntryPoint(Adaptive_RIF) operation Main() : Unit { ... }
Чтобы задать адаптивный целевой профиль RIF в пакете QDK Python, выполните следующий код.
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Adaptive_RIF)
Adaptive QIR профиль
Адаптивный целевой профиль имеет те же возможности, что и адаптивный профиль RIF, но также поддерживает программы, использующие циклы на основе результатов измерения. Adaptive Программы могут использовать циклы с заданным числом итераций и циклами повторения до успешного выполнения (RUS).
Azure Quantum в настоящее время не имеет адаптивных целевых объектов, но вы можете запускать программы для адаптивных целевых объектов на локальных QDK симуляторах. Дополнительные сведения об симуляторах см. в QDKразделе "Общие сведения о квантовых симуляторах" в этой QDKстатье.
Настройка адаптивного профиля
Чтобы задать адаптивный QIR целевой профиль в QDK расширении VS Code, выберите один из следующих параметров.
Если вы настроили проект Q#, добавьте в файл проекта
qsharp.jsonследующую команду:{ "targetProfile": "adaptive" }Если вы работаете в
.qsфайле, который не является частью проекта Q#, задайте целевой профиль непосредственно в коде Q#. Для этого добавьте@EntryPoint(Adaptive)в строке перед операцией точки входа в вашей программе.@EntryPoint(Adaptive) operation Main() : Unit { ... }
Чтобы задать адаптивный целевой профиль в пакете QDK Python, выполните следующий код.
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Adaptive)
Unrestricted QIR профиль
Неограниченный целевой профиль позволяет запускать все квантовые программы. Текущий квантовый целевой объект не поддерживает неограниченный QIR, но можно использовать неограниченный профиль для выполнения сложных программ на QDK симуляторах для квантовой разработки.
Настройка неограниченного профиля
Чтобы задать неограниченный профиль целевого QIR объекта в QDK расширении VS Code, выберите один из следующих параметров.
Если вы настроили проект Q#, добавьте в файл проекта
qsharp.jsonследующую команду:{ "targetProfile": "unrestricted" }Если вы работаете в
.qsфайле, который не является частью проекта Q#, задайте целевой профиль непосредственно в коде Q#. Для этого добавьте@EntryPoint(Unrestricted)в строке перед операцией точки входа в вашей программе.@EntryPoint(Unrestricted) operation Main() : Unit { ... }
Чтобы задать неограниченный профиль целевого объекта в пакете QDK Python, выполните следующий код.
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Unrestricted)