Tipos de perfil de destino de Azure Quantum

En este artículo se describen los distintos tipos de target perfil disponibles en los proveedores de computación cuántica de Azure Quantum. En este momento, debido a la fase de desarrollo temprana del campo, estos dispositivos cuánticos tienen algunas limitaciones y requisitos para los programas que se ejecutan en ellos.

Unidades de procesamiento cuántico (QPU): diferentes perfiles y sus limitaciones

Una unidad de procesamiento cuántico (QPU) es un procesador físico o simulado que contiene una serie de cúbits interconectados que se pueden manipular para calcular algoritmos cuánticos. Es el componente central de un equipo cuántico o simulador cuántico.

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 el kit de desarrollo de Quantum administran tres perfiles diferentes para las QPU:

  • Full: este perfil puede ejecutar cualquier programa de Q# dentro de los límites de memoria para simuladores o el número de cúbits para equipos cuánticos físicos.
  • No Control Flow: este perfil puede ejecutar cualquier programa de Q# que no requiera el uso de los resultados de las medidas de cúbits para controlar el flujo del programa. Dentro de un programa targetde Q# para este tipo de QPU, los valores de tipo Result no admiten la comparación de igualdad.
  • Basic Measurement Feedback: 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 targetde Q# para este tipo de QPU, puede comparar valores de tipo Result como parte de las condiciones dentro de las instrucciones en if las operaciones, lo que permite la medición del circuito medio. Los bloques condicionales correspondientes no pueden contener instrucciones return ni set.

Creación y ejecución de aplicaciones para Full el perfil targets

Full profile targets puede ejecutar cualquier programa de Q#, lo que significa que puede escribir programas sin restricciones de funcionalidad. Azure Quantum aún no proporciona ninguno target con este perfil.

Creación y ejecución de aplicaciones para No Control Flow el perfil targets

No Control Flow profile targets puede ejecutar una amplia variedad de aplicaciones de Q#, con la restricción de que no pueden usar resultados de medidas de cúbits para controlar el flujo del programa. Específicamente, los valores de tipo Result no admiten la comparación de igualdad.

Por ejemplo, esta operación no se puede ejecutar en :No Control Flowtarget

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

Si intenta ejecutar esta operación en , No Control Flowtarget se producirá un error porque evalúa una comparación entre dos resultados (desired != M(q)) para controlar el flujo de cálculo con una if instrucción . Esto se aplicará a cualquier tipo de bifurcación condicional, como elif las instrucciones y else .

Nota

Actualmente, no puede enviar programas cuánticos que apliquen operaciones en cúbits medidos en No Control Flowtargets, aunque no use los resultados para controlar el flujo del programa. Es decir, No Control Flowtargets no permita mediciones de circuito medio.

Por ejemplo, el código siguiente no se puede ejecutar en :No Control Flowtarget

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

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

Actualmente, están No Control Flowtargets disponibles para Azure Quantum:

Creación y ejecución de aplicaciones para Basic Measurement Feedback el perfil targets

Basic Measurement Feedback profile targets puede ejecutar una amplia variedad de aplicaciones de Q#, con la restricción que solo puede comparar valores de tipo Result como parte de las condiciones dentro if de las instrucciones en las operaciones. Este tipo de perfil supone una mejora de los No Control Flow perfiles, pero todavía está sujeto a algunas limitaciones.

Basic Measurement Feedback profile targets permite operaciones condicionales basadas en medidas y medidas de circuito medio, lo que significa que los cúbits se pueden medir selectivamente 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 conservan 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 permitiría el siguiente código de Q# en :Basic Measurement Feedbacktarget

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

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

Sin embargo, no se permitiría el mismo código con la evaluación booleana movida:

operation BeOne(q : Qubit) : Bool {
     return M(q) == One;
}

operation SetToZeroUsingBeOne(q : Qubit) : Unit {
     if BeOne(q) { X(q); }
}

La SetQubitState operación en se puede usar en No Control Flow un Basic Measurement Feedbacktarget siempre y cuando no incluya ninguna return instrucción o set dentro de la if instrucción . Esto se aplicará a cualquier tipo de bifurcación condicional, como elif las instrucciones y else . Por ejemplo, la siguiente operación no se puede usar en :Basic Measurement Feedbacktarget

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

Actualmente, están Basic Measurement Feedbacktargets disponibles para Azure Quantum: