Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os dispositivos quânticos ainda são uma tecnologia emergente e, infelizmente, nem todos eles podem executar todos os programas Q#. Dessa forma, você precisa ter algumas restrições em mente enquanto desenvolve programas quânticos. Os target tipos de perfil definem os recursos dos dispositivos quânticos que você target utiliza com seus programas de Q#. O QDK (Quantum Development Kit) tem um conjunto de tipos de perfil diferentes target , que juntos dão suporte a todos os recursos dos dispositivos quânticos atuais que estão disponíveis no Azure Quantum.
Este artigo discute os diferentes tipos de target perfis no Azure Quantum, suas limitações e como configurá-los no QDK.
Perfis de destino e suas limitações
Atualmente, o Azure Quantum e o QDK gerenciam perfis diferentestarget, dependendo de sua capacidade de executar programas de representação intermediária quântica (QIR).
- Unrestricted: Esse perfil pode executar qualquer QIR programa e, portanto, qualquer programa Q# dentro dos limites de memória para simuladores ou o número de qubits para computadores quânticos físicos.
-
Base: Esse perfil pode executar qualquer programa Q# que não exija o uso dos resultados de medidas de qubit para controlar o fluxo do programa. Em um programa Q# direcionado para esse tipo de QPU, os valores do tipo
Resultnão dão suporte à comparação de igualdade. -
Adaptive RI: Esse perfil tem capacidade limitada de usar os resultados de medidas de qubit para controlar o fluxo do programa. Em um programa Q# direcionado para esse tipo de QPU, você pode comparar valores de tipo
Resultcomo parte das condições dentro de instruçõesifem operações, permitindo a medição de meio-circuito. - Adaptive RIF: Esse perfil tem os mesmos recursos que o Adaptive RI perfil, mas também dá suporte a operações de ponto flutuante.
Criar e executar programas para Unrestrictedtarget perfil
Unrestricted target os perfis podem executar todo o programa Q#, para que você possa escrever código Q# sem a necessidade de considerar restrições de funcionalidade. O Azure Quantum não fornece nenhum dispositivo targets real que dê suporte a esse perfil. No entanto, você pode executar Unrestricted programas Q# que têm esse perfil nos simuladores fornecidos com o QDK.
Configurar Unrestrictedtarget perfil
Se você não definir manualmente seu QIRtarget perfil, o compilador definirá automaticamente o target perfil para você. O compilador escolhe o perfil mais restritivo que ainda permite que seu programa seja executado no dispositivo target Azure Quantum escolhido.
Para definir manualmente o QIRtarget perfil como Irrestrito, escolha uma das seguintes opções:
Se você configurar um projeto Q#, adicione o seguinte comando ao arquivo do
qsharp.jsonprojeto:{ "targetProfile": "unrestricted" }Se você estiver trabalhando em um
.qsarquivo que não faz parte de um projeto Q#, defina o target perfil diretamente no código Q#. Para fazer isso, inclua@EntryPoint(Unrestricted)logo antes da operação de ponto de entrada em seu programa, mesmo quando essa operação for o padrãoMain.No Python, chame o método
qdk.initpara definir o perfil target.from qdk import init, TargetProfile init(target_profile=TargetProfile.Unrestricted)
Criar e executar programas para Basetarget perfil
Base
target Os perfis podem executar uma ampla variedade de aplicativos Q#, com a restrição de que eles não podem usar resultados de medições de qubit para controlar o fluxo do programa. Mais especificamente, os valores do tipo Result não dão suporte à comparação de igualdade.
Por exemplo, você não pode executar a seguinte FlipQubitOnZero operação em um Basetarget:
@EntryPoint(Base)
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
A FlipQubitOnZero operação falha quando você executa esse código em um Basetarget porque o target dispositivo não pode usar o resultado de uma medida de qubit para executar a lógica condicional enquanto o algoritmo quântico está em execução. Se você planeja executar algoritmos em um Basetarget dispositivo, verifique se o código não contém blocos if para ramificação condicional que dependem de qubits medidos para avaliar uma condição lógica.
Configurar Basetarget perfil
Para definir manualmente o QIRtarget para o perfil Base, escolha uma das seguintes opções:
Se você configurar um projeto Q#, adicione o seguinte comando ao arquivo do
qsharp.jsonprojeto:{ "targetProfile": "base" }Se você estiver trabalhando em um
.qsarquivo que não faz parte de um projeto Q#, defina o target perfil diretamente no código Q#. Para fazer isso, inclua@EntryPoint(Base)logo antes da operação de ponto de entrada em seu programa, mesmo quando essa operação for o padrãoMain.No Python, chame o método
qdk.initpara definir o perfil target.from qdk import init, TargetProfile init(target_profile=TargetProfile.Base)
Suporte para targets do perfil Basetarget
Por enquanto, o Azure Quantum fornece acesso ao seguinte Basetargets:
| Fornecedor | Simulador | QPU |
|---|---|---|
| IonQ | ionq.simulator |
ionq.qpu.* |
| Rigetti | rigetti.sim.* |
rigetti.qpu.* |
Para saber mais sobre esses provedores no Azure Quantum, consulte o provedor IonQ e o provedor Rigetti.
Criar e executar programas para Adaptive RItarget perfil
Adaptive RI target perfis podem executar uma maior variedade de aplicativos Q# do que Base perfis, mas ainda têm algumas limitações. Ao contrário dos perfis Basetarget, Adaptive RItargets oferecem suporte a medições de circuito intermediário.
Com as medidas de circuito médio, você pode medir seletivamente qubits a qualquer momento no programa quântico, não apenas no final. Em seguida, você pode usar os resultados de medida para outras operações em seu programa, como ramificação condicional com if blocos. Os qubits que você mede o meio do circuito entram em colapso em um estado clássico (zero ou um), mas os qubits não medidos permanecem em seu estado quântico.
Quando você mede um qubit em Q#, um valor do tipo Result é retornado. Se você quiser usar esse resultado em uma instrução condicional, precisará comparar diretamente na instrução condicional. Os blocos condicionais correspondentes não podem conter instruções return ou set.
Por exemplo, o código Q# a seguir é permitido em um Adaptive RItarget:
@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Configurar Adaptive RItarget perfil
Para definir manualmente o QIRtarget para o perfil Adaptive RI, escolha uma das seguintes opções:
Se você configurar um projeto Q#, adicione o seguinte comando ao arquivo do
qsharp.jsonprojeto:{ "targetProfile": "adaptive_ri" }Se você estiver trabalhando em um
.qsarquivo que não faz parte de um projeto Q#, defina o target perfil diretamente no código Q#. Para fazer isso, inclua@EntryPoint(Adaptive_RI)logo antes da operação de ponto de entrada em seu programa, mesmo quando essa operação for o padrãoMain.No Python, chame o método
qdk.initpara definir o perfil target.from qdk import init, TargetProfile init(target_profile=TargetProfile.Adaptive_RI)
Suporte para targets do perfil Adaptive RItarget
Por enquanto, o Quantinuum é o único provedor no Azure Quantum que tem Adaptive RItargets.
-
Emuladores:
quantinuum.sim.h2-1eequantinuum.sim.h2-2e -
QPUs:
quantinuum.qpu.h2-1equantinuum.qpu.h2-2
Para obter mais informações sobre as ofertas do Quantinuum no Azure Quantum, consulte Quantinuum Emulators.
Criar e executar programas para Adaptive RIFtarget perfil
Adaptive RIF target perfis possuem todas as capacidades de Adaptive RI perfis e também oferecem suporte a programas Q# que contêm cálculos de ponto flutuante.
Por exemplo, o código Q# a seguir é permitido em um Adaptive RIFtarget:
@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;
}
Configurar Adaptive RIFtarget perfil
Para definir manualmente o QIRtarget para o perfil Adaptive RIF, escolha uma das seguintes opções:
Se você configurar um projeto Q#, adicione o seguinte comando ao arquivo do
qsharp.jsonprojeto:{ "targetProfile": "adaptive_rif" }Se você estiver trabalhando em um
.qsarquivo que não faz parte de um projeto Q#, defina o target perfil diretamente no código Q#. Para fazer isso, inclua@EntryPoint(Adaptive_RIF)logo antes da operação de ponto de entrada em seu programa, mesmo quando essa operação for o padrãoMain.No Python, chame o método
qdk.initpara definir o perfil target.from qdk import init, TargetProfile init(target_profile=TargetProfile.Adaptive_RIF)
Suporte para targets do perfil Adaptive RIFtarget
Por enquanto, o Azure Quantum não tem Adaptive RIFtargets. No entanto, você pode executar programas para Adaptive RIFtargets no simulador local no QDK.