Tipos de perfil QIR target no Azure Quantum
Este artigo discute os diferentes tipos de perfil QIR target disponíveis nos provedores de computação quântica no Azure Quantum. Os tipos de perfil QIR target são usados para definir as capacidades dos dispositivos quânticos que você pode target com seus programas Q#.
Target Perfis e suas limitações
Os dispositivos quânticos ainda são uma tecnologia emergente, e nem todos eles podem executar todo o código Q#. Como tal, você precisa ter algumas restrições em mente ao desenvolver programas para diferentes targets. Atualmente, o Azure Quantum e o QDK gerenciam três perfis diferentes target :
- Unrestricted: Este perfil pode executar qualquer programa QIR dentro dos limites de memória para simuladores ou o número de qubits para computadores quânticos físicos.
- QIR base: Este perfil pode executar qualquer programa Q# que não exija o uso dos resultados de medições de qubit para controlar o fluxo do programa. Dentro de um programa Q# direcionado para esse tipo de QPU, valores do tipo
Result
não suportam comparação de igualdade. - QIR Adaptive RI: Este perfil tem capacidade limitada de usar os resultados de medições de qubit para controlar o fluxo do programa. Dentro de um programa Q# direcionado para esse tipo de QPU, você pode comparar valores do tipo
Result
como parte das condições dentroif
de instruções em operações, permitindo a medição no meio do circuito.
Criar e executar aplicativos para Unrestrictedtarget perfil
Unrestrictedtarget perfis podem executar qualquer programa, o que significa que você pode escrever programas Q# sem restrições de funcionalidade. O Azure Quantum não fornece nenhum target com esse perfil. No entanto, você pode executar Unrestricted programas Q# em simuladores fornecidos pelo QDK.
Configurar Unrestrictedtarget perfil
No código do Visual Studio:
- Selecione Exibir -> Paleta de Comandos e digite Q#: Definir o perfil QIR target do Azure Quantum. Prima Enter.
- Selecione Sem restrições.
Em Python, você pode definir o target perfil usando o qsharp.init
método.
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Criar e executar aplicativos para QIR Basetarget perfil
QIR Basetarget perfis podem executar uma grande 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, valores do tipo Result
não suportam comparação de igualdade.
Por exemplo, esta operação não pode ser executada em um QIR Basetarget:
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Se você tentar executar essa operação em um QIR Basetarget, a operação falhará porque faz uma comparação usando um resultado de medição (M(q) == Zero
) para controlar o fluxo de computação com uma if
instrução. O mesmo é aplicável a qualquer tipo de ramificação condicional, como elif
e else
declarações.
Configurar QIR Basetarget perfil
No código do Visual Studio:
- Selecione Exibir -> Paleta de Comandos e digite Q#: Definir o perfil QIR target do Azure Quantum. Prima Enter.
- Selecione a base QIR.
Em Python, você pode definir o target perfil usando o qsharp.init
método.
qsharp.init(target_profile=qsharp.TargetProfile.Base)
Suportado targets
Atualmente, estes QIR Basetargets estão disponíveis para o Azure Quantum:
Fornecedor: IonQ
- IonQ simulador (
ionq.simulator
) - QPU IonQ (
ionq.qpu.*
)
- IonQ simulador (
Fornecedor: Rigetti
- Simulador Rigetti (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Simulador Rigetti (
Criar e executar aplicativos para QIR Adaptive RI perfil targets
QIR Adaptive RI pode targets executar uma grande variedade de aplicativos Q#, com algumas restrições. Este tipo de perfil supõe uma melhoria em relação aos QIR Base perfis, mas ainda está sujeito a algumas limitações.
QIR Adaptive RI perfil targets permite operações condicionais baseadas em medição e medições de circuito médio, o que significa que os qubits podem ser medidos seletivamente em um ponto diferente da declaração final de um programa quântico, e a saída da medição pode ser usada em outras operações. A medição no meio do circuito permite várias medições em qualquer ponto do programa quântico. A informação quântica dos qubits medidos colapsa para um estado clássico (zero ou um), mas os qubits não medidos permanecem em seu estado quântico.
Em Q# ao medir um qubit, um valor de tipo Result
é retornado. Se você quiser usar esse resultado em uma instrução condicional, você terá que comparar diretamente na instrução condicional. Os blocos condicionais correspondentes não podem conter return
instruções OR set
.
Por exemplo, o seguinte código Q# seria permitido em um QIR Adaptive RItarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
Configurar QIR Adaptive RItarget perfil
No código do Visual Studio:
- Selecione Exibir -> Paleta de Comandos e digite Q#: Definir o perfil QIR target do Azure Quantum. Prima Enter.
- Selecione QIR Adaptive RI.
Em Python, você pode definir o target perfil usando o qsharp.init
método.
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
Suportado targets
Atualmente, estes QIR Adaptive RItargets estão disponíveis para o Azure Quantum:
- Fornecedor: Quantinuum
- Emuladores Quantinuum (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - QPUs quantinuum (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Emuladores Quantinuum (