Azure Quantum QIR perfiles de destino en QDK

La computación cuántica sigue siendo una tecnología emergente. No todo el hardware cuántico puede ejecutar todos los programas cuánticos. Por ejemplo, solo cierto hardware puede realizar mediciones de circuitos intermedios, que es necesario para ejecutar programas con ramas condicionales basadas en los resultados de medición de cúbits.

Al enviar un programa para que se ejecute en Azure Quantum, el programa se convierte en formato de representación intermedia cuántica (QIR). QIR no depende del lenguaje de programación ni del tipo de hardware cuántico en el que se ejecuta el programa. El MicrosoftQuantum Development Kit (QDK) es compatible con varios QIR perfiles de destino para distintas capacidades de hardware.

Para obtener más información sobre QIR, consulte Representación intermedia cuántica.

Introducción a los perfiles de destino

Azure Quantum y QDK admiten varios perfiles de destino QIR. El tipo de perfil de destino que elija determina cuál de las siguientes construcciones de programación puede usar el programa.

  • Ramas condicionales con if instrucciones basadas en los resultados de medición de cúbits
  • Operaciones aritméticas en números de punto flotante calculados a partir de resultados de medición de cúbits
  • Bucles fijos y sin enlazar basados en los resultados de medición de cúbits

En la tabla siguiente se muestran todos los QIR perfiles de destino en QDK y los constructos de programación que admiten, en orden del más restrictivo al menos restrictivo.

QIR perfil de destino Bifurcaciones condicionales Operaciones de punto flotante Bucles
Base
Adaptive RI
Adaptive RIF
Adaptive
Unrestricted

Establecer perfiles de destino en QDK

Para ejecutar un programa en los simuladores QDK o en el destino Azure Quantum, debe establecer un perfil de destino QIR. Si no configura manualmente un perfil de destino, QDK intenta establecer automáticamente el perfil adecuado para el destino elegido.

al enviar programas para que se ejecuten a través del Azure Quantum servicio, intenta QDK seleccionar automáticamente el perfil adecuado para el destino de ejecución elegido.

Base QIR perfil

El perfil de destino base QIR es el más restrictivo. Use el perfil base para programas más sencillos que no usan estructuras de programación clásicas como ramas y bucles. Si su hardware cuántico de destino no puede realizar mediciones a mitad del circuito, probablemente necesite usar el perfil base.

Los siguientes Azure Quantum destinos pueden ejecutar programas que usen el perfil base QIR .

Provider Simulador QPU
IonQ ionq.simulator ionq.qpu.*
Rigetti rigetti.sim.* rigetti.qpu.*

Para obtener más información sobre estos Azure Quantum proveedores, consulte Proveedor de IonQ y Proveedor rigetti.

Establecimiento del perfil base

Para establecer el perfil de destino base QIR en la QDK extensión para Visual Studio Code (VS Code), elija una de las siguientes opciones.

  • Si configura un proyecto de Q#, agregue el siguiente comando al archivo del qsharp.json proyecto.

    {
      "targetProfile": "base"
    }
    
  • Si trabaja en un archivo .qs que no forma parte de un proyecto de Q#, establezca el perfil de destino directamente en el código de Q#. Para ello, agregue @EntryPoint(Base) en la línea antes de la operación de punto de entrada en el programa.

    @EntryPoint(Base)
    operation Main() : Unit {
    
    ...
    
    }
    

Para establecer el perfil de destino base en el QDK paquete de Python, ejecute el código siguiente.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Base) 

Limitaciones de los programas Q# con perfil básico

El perfil de destino base puede ejecutar una amplia variedad de programas de Q#. La restricción principal es que los programas de Q# no pueden realizar comparaciones lógicas con Result valores de tipo de las operaciones de medida.

Por ejemplo, no se puede ejecutar la siguiente FlipQubitOnZero operación en un destino base porque el programa contiene una if instrucción que usa un resultado de medida.

    @EntryPoint(Base)
    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

Adaptive RI QIR perfil

El perfil de destino de RI adaptable puede ejecutar una variedad más amplia de programas que el perfil base, pero sigue teniendo algunas limitaciones. Adaptive RI objetivos son compatibles con programas que usan mediciones a mitad del circuito en sentencias if condicionales. Si el hardware cuántico puede realizar mediciones a mitad del circuito y el programa usa instrucciones if basadas en los resultados de las mediciones, probablemente necesite usar el perfil RI adaptativo.

Por ejemplo, el siguiente programa de Q# se puede ejecutar en un destino de RI adaptable.

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

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); }
}

Los siguientes Azure Quantum destinos pueden ejecutar programas que usen el perfil de destino de RI adaptable.

Provider Simulador QPU
Quantinuum quantinuum.sim.h2-1e quantinuum.qpu.h2-1
Quantinuum quantinuum.sim.h2-2e quantinuum.qpu.h2-2

Para obtener más información sobre Quantinuum en Azure Quantum, vea Quantinuum provider.

Configurar el perfil adaptable de RI

Para establecer el perfil de destino de RI QIR adaptable en la QDK extensión para VS Code, elija una de las siguientes opciones.

  • Si configura un proyecto de Q#, agregue el siguiente comando al archivo del qsharp.json proyecto:

    {
      "targetProfile": "adaptive_ri"
    }
    
  • Si trabaja en un archivo .qs que no forma parte de un proyecto de Q#, establezca el perfil de destino directamente en el código de Q#. Para ello, agregue @EntryPoint(Adaptive_RI) en la línea antes de la operación de punto de entrada en el programa.

    @EntryPoint(Adaptive_RI)
    operation Main() : Unit {
    
    ...
    
    }
    

Para establecer el perfil de destino de RI adaptable en el QDK paquete de Python, ejecute el código siguiente.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RI)

Adaptive RIF QIR perfil

El perfil de destino RIF adaptable tiene las mismas funcionalidades que el perfil de RI adaptable, pero también admite programas que contienen operaciones aritméticas de punto flotante. Si el hardware cuántico puede realizar mediciones de circuito medio y el programa usa instrucciones if y números de punto flotante calculados a partir de los resultados de la medición, es probable que tenga que usar el perfil RIF adaptable.

Por ejemplo, el siguiente programa de Q# se puede ejecutar en un destino RIF adaptable.

@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
    use q = Qubit();
    H(q);
    mutable f = 0.0;
    if M(q) == One {
        f = 0.5;
    }
    Reset(q);
    return f;
}

Azure Quantum no tiene destinos RIF adaptables en este momento, pero puede ejecutar programas para destinos RIF adaptables en los simuladores locales QDK . Para obtener más información sobre los simuladores de QDK, vea Información general de los simuladores cuánticos en QDK.

Configure el perfil RIF adaptativo

Para establecer el perfil de destino RIF QIR adaptable en la QDK extensión para VS Code, elija una de las siguientes opciones.

  • Si configura un proyecto de Q#, agregue el siguiente comando al archivo del qsharp.json proyecto:

    {
      "targetProfile": "adaptive_rif"
    }
    
  • Si trabaja en un archivo .qs que no forma parte de un proyecto de Q#, establezca el perfil de destino directamente en el código de Q#. Para ello, agregue @EntryPoint(Adaptive_RIF) en la línea antes de la operación de punto de entrada en el programa.

    @EntryPoint(Adaptive_RIF)
    operation Main() : Unit {
    
    ...
    
    }
    

Para establecer el perfil de destino RIF adaptable en el QDK paquete de Python, ejecute el código siguiente.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive_RIF) 

Adaptive QIR perfil

El perfil de destino adaptable tiene las mismas funcionalidades que el perfil RIF adaptable, pero también admite programas que usan bucles basados en los resultados de la medición. Adaptive los programas pueden usar bucles con un número fijo de iteraciones y bucles de repetición hasta el éxito (RUS).

Azure Quantum no tiene destinos adaptables en este momento, pero puede ejecutar programas para destinos adaptables en los simuladores locales QDK . Para obtener más información sobre los simuladores de QDK, vea Información general de los simuladores cuánticos en QDK.

Establecimiento del perfil adaptable

Para establecer el perfil de destino adaptable QIR en la QDK extensión para VS Code, elija una de las siguientes opciones.

  • Si configura un proyecto de Q#, agregue el siguiente comando al archivo del qsharp.json proyecto:

    {
      "targetProfile": "adaptive"
    }
    
  • Si trabaja en un archivo .qs que no forma parte de un proyecto de Q#, establezca el perfil de destino directamente en el código de Q#. Para ello, agregue @EntryPoint(Adaptive) en la línea antes de la operación de punto de entrada en el programa.

    @EntryPoint(Adaptive)
    operation Main() : Unit {
    
    ...
    
    }
    

Para establecer el perfil de destino adaptable en el QDK paquete de Python, ejecute el código siguiente.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Adaptive) 

Unrestricted QIR perfil

El perfil de destino sin restricciones puede ejecutar todos los programas cuánticos. Ningún destino cuántico actual admite un QIR sin restricciones, pero puede usar el perfil sin restricciones para ejecutar programas complejos en los simuladores QDK para el desarrollo cuántico.

Establecimiento del perfil sin restricciones

Para establecer el perfil de destino sin restricciones QIR en la QDK extensión para VS Code, elija una de las siguientes opciones.

  • Si configura un proyecto de Q#, agregue el siguiente comando al archivo del qsharp.json proyecto:

    {
      "targetProfile": "unrestricted"
    }
    
  • Si trabaja en un archivo .qs que no forma parte de un proyecto de Q#, establezca el perfil de destino directamente en el código de Q#. Para ello, agregue @EntryPoint(Unrestricted) en la línea antes de la operación de punto de entrada en el programa.

    @EntryPoint(Unrestricted)
    operation Main() : Unit {
    
    ...
    
    }
    

Para establecer el perfil de destino sin restricciones en el QDK paquete de Python, ejecute el código siguiente.

from qdk import init, TargetProfile

init(target_profile=TargetProfile.Unrestricted)