Partilhar via


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 dentro if 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:

  1. Selecione Exibir -> Paleta de Comandos e digite Q#: Definir o perfil QIR target do Azure Quantum. Prima Enter.
  2. 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:

  1. Selecione Exibir -> Paleta de Comandos e digite Q#: Definir o perfil QIR target do Azure Quantum. Prima Enter.
  2. 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:

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:

  1. Selecione Exibir -> Paleta de Comandos e digite Q#: Definir o perfil QIR target do Azure Quantum. Prima Enter.
  2. 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)