Optimización de la ejecución de programas grandes con el estimador de recursos

En este artículo, aprenderá a optimizar el tiempo de ejecución al ejecutar programas de gran tamaño Q# con el estimador de recursos de Azure Quantum.

Para obtener información sobre cómo ejecutar el estimador de recursos, consulte Distintas formas de ejecutar el estimador de recursos.

Requisitos previos

Si quiere usar Python en VS Code, también necesita lo siguiente:

  • Instale la versión más reciente de las extensiones de Python y Jupyter para VS Code.

  • El paquete de Azure Quantum qsharp más reciente.

    python -m pip install --upgrade qsharp 
    

Cómo controlar programas de gran tamaño Q#

Al enviar un trabajo de estimación de recursos al estimador de recursos, el programa cuántico se evalúa completamente para extraer las estimaciones de recursos. Si desea calcular los recursos de una Q# operación que se invoca muchas veces, por ejemplo, en un bucle con muchas iteraciones, la ejecución del trabajo de estimación de recursos puede tardar mucho tiempo. Una manera de reducir los tiempos de ejecución largos es ejecutar la operación una vez, calcular y almacenar en caché sus costos, y usar los datos en llamadas posteriores. Esta técnica se denomina almacenamiento en caché manual.

El estimador target de recursos admite dos Q# funciones para realizar el almacenamiento en caché manual: BeginEstimateCaching(name: String, variant: Int): Bool y EndEstimateCaching(): Unit. BeginEstimateCaching function toma como entradas , name que es el nombre único del fragmento de código para el que desea almacenar en caché los costos y un entero variant que distingue diferentes variantes de costo para el mismo fragmento.

Nota

Las dos operaciones BeginEstimateCaching especiales y EndEstimateCaching son operaciones intrínsecas para el estimador de recursos. No son compatibles con otras ejecuciones targets.

Por ejemplo, supongamos que tiene una Q# operación denominada que se llama ExpensiveOperation muchas veces en una iteración. Puede usar el almacenamiento en caché para reducir su tiempo de estimación:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
        // Code block to be cached
        EndEstimateCaching();
    }
}

Cuando ExpensiveOperation se usa repetidamente, BeginEstimateCaching se llama a cada vez. Cuando BeginEstimateCaching se llama por primera vez, devuelve true y comienza la acumulación de datos de costos. Esto hace que el código continúe con la ejecución del fragmento de código costoso. Cuando EndEstimateCaching se llama a , los datos de costo se almacenan para el uso futuro y se incorporan al costo total del programa.

Cuando ExpensiveOperation se llama a la segunda vez (y posteriormente), el estimador de recursos busca los datos de costos almacenados (almacenados en caché), lo incorpora al costo total del programa y devuelve false. Esto hace que se omita un fragmento de código costoso, por lo que el estimador de recursos ejecuta el programa más rápido. EndEstimateCaching debe colocarse al final de la condición y las regiones incluidas en BeginEstimateCaching-EndEstimateCaching se pueden anidar.

SingleVariant() indica que los datos de costo recopilados en la primera ejecución se pueden reutilizar en todas las ejecuciones posteriores del fragmento de código. Esto podría no ser siempre el caso. Por ejemplo, si el código tiene un costo diferente para los valores impares e pares de una variable "c", puede proporcionar un variant valor:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
        // Some code
        EndEstimateCaching();
    }
}

En este caso, la memoria caché es diferente para los valores impares e pares de c. En otras palabras, los datos recopilados para los valores pares de c solo se reutilizan para los valores pares de cy lo mismo se aplica a los valores impares de c.

Nota

Si tiene algún problema mientras trabaja con el Estimador de recursos, consulte la página Solución de problemas o póngase en contacto con AzureQuantumInfo@microsoft.com.

Pasos siguientes