Compartilhar 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 os recursos 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 podem executar todo o código Q#. Como tal, você precisa manter 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: esse perfil pode executar qualquer programa QIR dentro dos limites de memória para simuladores ou do número de qubits para computadores quânticos físicos.
  • QIR base: 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 em Q# direcionado para esse tipo de QPU, os valores do tipo Result não dão suporte à comparação de igualdade.
  • QIR Adaptive RI: esse perfil tem capacidade limitada de usar os resultados de medições de qubit para controlar o fluxo do programa. Em 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 de circuito intermediário.

Criar e executar aplicativos para Unrestrictedtarget o perfil

Unrestrictedtarget Os 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 Visual Studio Code:

  1. Selecione Exibir –> Paleta de Comandos e digite Q#: Defina o perfil QIR target do Azure Quantum. Pressione Enter.
  2. Selecione Irrestrito.

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 o perfil

QIR Basetarget Os perfis podem executar uma ampla 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, os valores do tipo Result não dão suporte à 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 se aplica a qualquer tipo de ramificação condicional, como elif instruções and else .

Configurar QIR Basetarget perfil

No Visual Studio Code:

  1. Selecione Exibir –> Paleta de Comandos e digite Q#: Defina o perfil QIR target do Azure Quantum. Pressione Enter.
  2. Selecione Base QIR.

Em Python, você pode definir o target perfil usando o qsharp.init método.

qsharp.init(target_profile=qsharp.TargetProfile.Base) 

targets com suporte

Atualmente, eles QIR Basetargets estão disponíveis para o Azure Quantum:

Criar e executar aplicativos para QIR Adaptive RI o perfil targets

QIR Adaptive RI O perfil targets pode executar uma ampla variedade de aplicativos Q#, com algumas restrições. Esse tipo de perfil supõe uma melhoria em relação QIR Base aos perfis, mas ainda está sujeito a algumas limitações.

QIR Adaptive RI permitem targets operações condicionais baseadas em medição e medições de circuito intermediário, 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 medição pode ser usada em outras operações. A medição de circuito intermediário permite várias medições em qualquer ponto do programa quântico. A informação quântica dos qubits medidos é recolhida 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 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 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 Visual Studio Code:

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

targets com suporte

Atualmente, eles QIR Adaptive RItargets estão disponíveis para o Azure Quantum:

  • Fornecido por: Quantinuum
    • Emuladores Quantinuum (quantinuum.sim.h1-1e, quantinuum.sim.h2-1e)
    • QPUs Quantinuum (quantinuum.qpu.h1-1, quantinuum.qpu.h2-1)