Tipos de perfis de destino no Azure Quantum
Este artigo aborda o tipo diferente de tipos de target perfil disponíveis nos fornecedores de computação quântica no Azure Quantum. Neste momento, devido à fase inicial de desenvolvimento do campo, os dispositivos quânticos têm algumas limitações e requisitos para programas que são executados nos mesmos.
Unidades de Processamento Quântico (QPU): perfis diferentes e as suas limitações
Uma Unidade de Processamento Quântico (QPU) é um processador físico ou simulado que contém vários qubits interligados que podem ser manipulados para calcular algoritmos quânticos. É o componente central de um computador quântico ou simulador quântico.
Os dispositivos quânticos continuam a ser uma tecnologia emergente e nem todos podem executar todo o código Q#. Como tal, tem de ter em mente algumas restrições ao desenvolver programas para diferentes targets. Atualmente, o Azure Quantum e o QDK gerem três perfis diferentes para QPUs:
- Full: este perfil pode executar qualquer programa Q# dentro dos limites de memória para simuladores ou o número de qubits para computadores quânticos físicos.
- No Control Flow: este perfil pode executar qualquer programa Q# que não exija a utilização dos resultados das medições de qubit para controlar o fluxo do programa. Num programa targetQ# para este tipo de QPU, os valores do tipo
Result
não suportam a comparação de igualdade. - Basic Measurement Feedback: este perfil tem capacidade limitada para utilizar os resultados das medições de qubit para controlar o fluxo do programa. Num programa targetQ# para este tipo de QPU, pode comparar valores do tipo
Result
como parte das condições dentroif
das instruções em operações, permitindo a medição média do circuito. Os blocos condicionais correspondentes podem não conterreturn
ouset
instruções.
Criar e executar aplicações para Full perfil targets
Full O perfil targets pode executar qualquer programa Q#, o que significa que pode escrever programas sem restrições de funcionalidade. O Azure Quantum ainda não fornece nenhum target com este perfil.
Criar e executar aplicações para No Control Flow perfil targets
No Control Flow O perfil targets pode executar uma grande variedade de aplicações Q#, com a restrição de que não podem utilizar os resultados das medições de qubit para controlar o fluxo do programa. Mais especificamente, os valores do tipo Result
não suportam a comparação de igualdade.
Por exemplo, esta operação não pode ser executada num No Control Flowtarget:
operation SetQubitState(desired : Result, q : Qubit) : Result {
if (desired != M(q)) {
X(q);
}
}
Tentar executar esta operação num No Control Flowtarget irá falhar porque avalia uma comparação entre dois resultados (desired != M(q)
) para controlar o fluxo de computação com uma instrução if
. Isto será aplicável a qualquer tipo de ramificação condicional, como elif
instruções e else
.
Nota
Atualmente, não pode submeter programas quânticos que apliquem operações em qubits que tenham sido medidos no No Control Flowtargets, mesmo que não utilize os resultados para controlar o fluxo do programa. Ou seja, No Control Flowtargets não permita medições a meio do circuito.
Por exemplo, o seguinte código não pode ser executado num No Control Flowtarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SampleMeasuredQubit(q : Qubit) : Result {
H(MeasureQubit(q));
return M(MeasureQubit(q));
}
Atualmente, estão No Control Flowtargets disponíveis para o Azure Quantum:
Fornecedor: IonQ
- Simulador IonQ (
ionq.simulator
) - QPU do IonQ (
ionq.qpu
)
- Simulador IonQ (
Fornecedor: Rigetti
- Simulador rigetti (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Simulador rigetti (
Criar e executar aplicações para Basic Measurement Feedback perfil targets
Basic Measurement Feedback O perfil targets pode executar uma grande variedade de aplicações Q#, com a restrição de que só pode comparar valores do tipo Result
como parte das condições nas if
instruções em operações. Este tipo de perfil suponha uma melhoria em termos No Control Flow de perfis, mas ainda está sujeito a algumas limitações.
Basic Measurement Feedback O perfil targets permite operações condicionais baseadas na medição e medições de meio circuito, o que significa que os qubits podem ser medidos seletivamente num ponto diferente da instrução final de um programa quântico e a saída da medição pode ser utilizada noutras operações. A medição a meio do circuito permite várias medições em qualquer ponto ao longo do programa quântico. As informações quânticas dos qubits medidos são fechadas para um estado clássico (zero ou um), mas os qubits não medidos mantêm o estado quântico.
Em Q# ao medir um qubit, é devolvido um valor do tipo Result
. Se quiser utilizar este resultado numa instrução condicional, tem de comparar diretamente na instrução condicional. Os blocos condicionais correspondentes podem não conter return
ou set
instruções.
Por exemplo, o seguinte código Q# seria permitido num Basic Measurement Feedbacktarget:
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
No entanto, o mesmo código com a avaliação booleana movida não seria permitido:
operation BeOne(q : Qubit) : Bool {
return M(q) == One;
}
operation SetToZeroUsingBeOne(q : Qubit) : Unit {
if BeOne(q) { X(q); }
}
A SetQubitState
operação no No Control Flow pode ser utilizada numa Basic Measurement Feedbacktarget desde que não inclua nenhuma return
instrução ou set
na if
instrução . Isto será aplicável a qualquer tipo de ramificação condicional, como elif
instruções e else
. Por exemplo, a seguinte operação não pode ser utilizada num Basic Measurement Feedbacktarget:
operation SetQubitState(desired : Result, q : Qubit) : Result {
if desired != M(q) {
X(q);
return M(q);
}
}
Atualmente, estão Basic Measurement Feedbacktargets disponíveis para o Azure Quantum:
- Fornecedor: Quantinuum
- Emuladores de Quantinuum (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - QPUs de Quantinuum (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Emuladores de Quantinuum (
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários