Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- La versión más reciente de Visual Studio Code (VS Code) o abra VS Code para la Web.
- La versión más reciente de la extensión Microsoft Quantum Development Kit (QDK). Para obtener más información sobre la instalación, consulte Configuración del QDK.
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
qdkbiblioteca 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.