Tipos de perfil de destino no Azure Quantum

Este artigo discute os diferentes tipos de target perfil disponíveis nos provedores de computação quântica no Azure Quantum. No momento, devido à fase inicial de desenvolvimento da área, os dispositivos quantum têm algumas limitações e requisitos para programas executados neles.

QPU (Unidades de Processamento Quântico): perfis diferentes e suas limitações

Uma QPU (Unidade de Processamento Quantum) é um processador físico ou simulado que contém um número de qubits interconectados que podem ser manipulados para computar algoritmos quantum. É o componente central de um computador quântico ou simulador quântico.

Os dispositivos quânticos ainda são uma tecnologia emergente e nem todos podem executar todo o código Q#. Dessa forma, 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 para QPUs:

  • Full: esse 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: 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 targetQ# para esse tipo de QPU, os valores do tipo Result não dão suporte à comparação de igualdade.
  • Basic Measurement Feedback: esse perfil tem capacidade limitada de usar os resultados de medidas qubit para controlar o fluxo do programa. Em um programa targetQ# para esse tipo de QPU, você pode comparar valores do tipo Result como parte das condições dentro if de instruções em operações, permitindo a medição de circuito médio. Os blocos condicionais correspondentes não podem conter as instruções return ou set.

Criar e executar aplicativos para Full o perfil targets

Full O perfil targets pode executar qualquer programa Q#, o que significa que você pode escrever programas sem restrições de funcionalidade. O Azure Quantum ainda não fornece nenhum target com esse perfil.

Criar e executar aplicativos para No Control Flow o perfil targets

No Control Flow O perfil targets pode executar uma ampla variedade de aplicativos Q#, com a restrição de que eles não podem usar resultados de medidas de qubit para controlar o fluxo do programa. Mais especificamente, valores do tipo Result não dão suporte à comparação de igualdade.

Por exemplo, essa operação não pode ser executada em um No Control Flowtarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
        if (desired != M(q)) {
            X(q);
        }
    }

Tentar executar essa operação em um No Control Flowtarget falhará porque ele avalia uma comparação entre dois resultados (desired != M(q)) para controlar o fluxo de computação com uma instrução if . Isso será aplicável a qualquer tipo de ramificação condicional, como elif instruções e else .

Observação

Atualmente, você não pode enviar programas quânticos que aplicam operações em qubits que foram medidos em No Control Flowtargets, mesmo que você não use os resultados para controlar o fluxo do programa. Ou seja, No Control Flowtargets não permita medições no meio do circuito.

Por exemplo, o código a seguir não pode ser executado em um No Control Flowtarget:

operation MeasureQubit(q : Qubit) : Result { 
   return M(q); 
}

operation SampleMeasuredQubit(q : Qubit) : Result {
    H(MeasureQubit(q));
    return M(MeasureQubit(q));
}

Atualmente, eles No Control Flowtargets estão disponíveis para o Azure Quantum:

Criar e executar aplicativos para Basic Measurement Feedback o perfil targets

Basic Measurement Feedback O perfil targets pode executar uma ampla variedade de aplicativos Q#, com a restrição de que você só pode comparar valores do tipo Result como parte das condições dentro if de instruções em operações. Esse tipo de perfil supõe uma melhoria em relação No Control Flow aos perfis, mas ainda está sujeito a algumas limitações.

Basic Measurement Feedback O perfil targets permite operações condicionais baseadas em medidas e medidas de circuito médio, o que significa que os qubits podem ser medidos seletivamente em um ponto diferente da instrução final de um programa quântico e a saída da medida pode ser usada em outras operações. A medição de circuito médio permite várias medidas a qualquer momento em todo o programa quântico. As informações quânticas dos qubits medidos entram em colapso em um estado clássico (zero ou um), mas os qubits não medidos mantêm seu estado quântico.

Em Q# ao medir um qubit, 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 seguinte código Q# seria permitido em um 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 booliana 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 em No Control Flow pode ser usada em um Basic Measurement Feedbacktarget desde que você não inclua nenhuma return instrução ou set dentro da if instrução . Isso será aplicável a qualquer tipo de ramificação condicional, como elif instruções e else . Por exemplo, a operação a seguir não pode ser usada em um Basic Measurement Feedbacktarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
    if desired != M(q) {
        X(q);
        return M(q);
    }
}

Atualmente, eles Basic Measurement Feedbacktargets estão disponíveis para o Azure Quantum: