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 dentro if das instruções em operações, permitindo a medição média do circuito. Os blocos condicionais correspondentes podem não conter return ou set 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:

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: