Tipos de perfil QIR target en Azure Quantum

En este artículo se describen los distintos tipos de perfil de QIR target disponibles en los proveedores de computación cuántica de Azure Quantum. Los tipos de perfil QIR target se usan para definir las funcionalidades de los dispositivos cuánticos que puede target con los programas de Q#.

Target perfiles y sus limitaciones

Los dispositivos cuánticos siguen siendo una tecnología emergente y no todos pueden ejecutar todo el código de Q#. Por lo tanto, debe tener en cuenta algunas restricciones al desarrollar programas para diferentes targets. Actualmente, Azure Quantum y QDK administran tres perfiles diferentes target :

  • Unrestricted: este perfil puede ejecutar cualquier programa QIR dentro de los límites de memoria de los simuladores o el número de cúbits para equipos cuánticos físicos.
  • QIR base: este perfil puede ejecutar cualquier programa de Q# que no requiera el uso de los resultados de las mediciones de cúbits para controlar el flujo del programa. En un programa de Q# destinado a este tipo de QPU, los valores de tipo Result no admiten la comparación de igualdad.
  • QIR Adaptive RI: este perfil tiene una capacidad limitada de usar los resultados de las mediciones de cúbits para controlar el flujo del programa. Dentro de un programa de Q# destinado a este tipo de QPU, puede comparar valores de tipo Result como parte de las condiciones dentro if de las instrucciones en las operaciones, lo que permite la medición del circuito medio.

Creación y ejecución de aplicaciones para el Unrestrictedtarget perfil

Unrestrictedtarget Los perfiles pueden ejecutar cualquier programa, lo que significa que puede escribir programas de Q# sin restricciones de funcionalidad. Azure Quantum no proporciona ningún target perfil. Sin embargo, puede ejecutar Unrestricted programas de Q# en simuladores proporcionados por el QDK.

Configuración del Unrestrictedtarget perfil

En Visual Studio Code:

  1. Seleccione Ver:> paleta de comandos y escriba Q#: establezca el perfil de QIR target de Azure Quantum. Presione ENTRAR.
  2. Seleccione Sin restricciones.

En Python, puede establecer el target perfil mediante el qsharp.init método .

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

Creación y ejecución de aplicaciones para el QIR Basetarget perfil

QIR Basetarget Los perfiles pueden ejecutar una amplia variedad de aplicaciones de Q#, con la restricción que no pueden usar los resultados de las mediciones de cúbits para controlar el flujo del programa. En concreto, los valores de tipo Result no admiten la comparación de igualdad.

Por ejemplo, esta operación no se puede ejecutar en :QIR Basetarget

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

Si intenta ejecutar esta operación en , QIR Basetargetse producirá un error en la operación porque realiza una comparación mediante un resultado de medida (M(q) == Zero) para controlar el flujo de cálculo con una if instrucción . Lo mismo es aplicable a cualquier tipo de bifurcación condicional, como elif las instrucciones y else .

Configuración del QIR Basetarget perfil

En Visual Studio Code:

  1. Seleccione Ver:> paleta de comandos y escriba Q#: establezca el perfil de QIR target de Azure Quantum. Presione ENTRAR.
  2. Seleccione BASE QIR.

En Python, puede establecer el target perfil mediante el qsharp.init método .

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

Se ha agregado compatibilidad con targets.

Actualmente, QIR Basetargets están disponibles para Azure Quantum:

Creación y ejecución de aplicaciones para el QIR Adaptive RI perfil targets

QIR Adaptive RI Profile targets puede ejecutar una amplia variedad de aplicaciones de Q#, con algunas restricciones. Este tipo de perfil supone una mejora de QIR Base los perfiles, pero todavía está sujeto a algunas limitaciones.

QIR Adaptive RIprofile targets permite las operaciones condicionales basadas en medidas y las medidas del circuito medio, lo que significa que los cúbits se pueden medir de forma selectiva en un punto distinto de la instrucción final de un programa cuántico y la salida de la medida se puede usar en otras operaciones. La medición del circuito medio permite varias medidas en cualquier punto del programa cuántico. La información cuántica de los cúbits medidos se contrae a un estado clásico (cero o uno), pero los cúbits no medidos permanecen en su estado cuántico.

En Q# al medir un cúbit, se devuelve un valor de tipo Result . Si desea usar este resultado en una instrucción condicional, debe comparar directamente en la instrucción condicional. Los bloques condicionales correspondientes no pueden contener instrucciones return ni set.

Por ejemplo, se permite el siguiente código de Q# en :QIR Adaptive RItarget

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

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

Configuración del QIR Adaptive RItarget perfil

En Visual Studio Code:

  1. Seleccione Ver:> paleta de comandos y escriba Q#: establezca el perfil de QIR target de Azure Quantum. Presione ENTRAR.
  2. Seleccione QIR Adaptive RI.

En Python, puede establecer el target perfil mediante el qsharp.init método .

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

Se ha agregado compatibilidad con targets.

Actualmente, QIR Adaptive RItargets están disponibles para Azure Quantum:

  • Proveedor: Quantinuum
    • Emuladores de Quantinuum (quantinuum.sim.h1-1e, quantinuum.sim.h2-1e)
    • QPU quantinuum (quantinuum.qpu.h1-1, quantinuum.qpu.h2-1)