Compartir a través de


Optimización de los tiempos de ejecución para programas grandes con el estimador de recursos

En este artículo, aprenderá a usar el estimador de recursos de Microsoft Quantum para optimizar los tiempos de ejecución de los programas de gran tamaño Q# .

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

Requisitos previos

Si desea usar Python en VS Code, también debe hacer lo siguiente:

  • Instale las versiones más recientes de las extensiones de Python y Jupyter en VS Code.

  • Instale la versión más reciente de la qdk biblioteca de Python.

    python -m pip install --upgrade qdk
    

Almacenamiento en caché manual con programas de Q#

Al enviar un trabajo de estimación de recursos al estimador de recursos, el estimador de recursos evalúa todo el programa cuántico para calcular las estimaciones. Si el Q# programa llama a la misma operación muchas veces, por ejemplo, en un bucle con muchas iteraciones, el tiempo de ejecución del trabajo de estimación de recursos podría ser muy largo. Para reducir la ejecución prolongada de estos tipos de programas, puede ejecutar la operación una vez para calcular y almacenar en caché sus costos y, a continuación, usar los datos almacenados en caché en las llamadas posteriores a la operación. 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 y EndEstimateCaching. La BeginEstimateCaching función toma las siguientes entradas:

Parámetro de entrada Tipo Description
name String Nombre único del fragmento de código para el que desea almacenar en caché los costos
variant Int Indica la variante de costo para el mismo fragmento de código.

Nota:

Las dos operaciones BeginEstimateCaching especiales y EndEstimateCaching son operaciones intrínsecas para el estimador de recursos. Si el Q# programa contiene cualquiera de estas operaciones, el programa no se puede ejecutar en otro simulador o hardware targets.

Por ejemplo, supongamos que tiene una operación denominada Q#, llamada ExpensiveOperation muchas veces en su programa. Almacene en caché la estimación del coste de ejecutar ExpensiveOperation para reducir el tiempo total de estimación de recursos.

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

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

Cuando ExpensiveOperation se llama a la segunda vez (y posteriormente), el estimador de recursos busca los datos de costo almacenados (almacenados en caché), lo incorpora al costo total del programa y devuelve false. Esto hace que el estimador de recursos omita las ejecuciones posteriores del fragmento de código costoso. Para que el almacenamiento en caché funcione correctamente, coloque EndEstimateCaching al final de la condición y anida las regiones entre BeginEstimateCaching y EndEstimateCaching.

El SingleVariant() argumento indica que los datos de costo recopilados en la primera ejecución de ExpensiveOperation 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 costos diferentes para 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 y pares de c. En otras palabras, los datos recopilados para los valores pares de c solo se reutilizan para los valores pares de c, y lo mismo se aplica a los valores impares de c.

Nota:

Si experimenta problemas al trabajar con el estimador de recursos, consulte la página Solución de problemas o póngase en contacto con AzureQuantumInfo@microsoft.com.