Comment optimiser l’exécution de programmes volumineux avec l’estimateur de ressources
Dans cet article, vous allez apprendre à optimiser le temps d’exécution lors de l’exécution de programmes volumineux Q# avec l’estimateur de ressources Azure Quantum.
Pour plus d’informations sur l’exécution de l’estimateur de ressources, consultez Différentes façons d’exécuter l’estimateur de ressources.
Prérequis
- Dernière version de Visual Studio Code ou ouvrez VS Code sur le web.
- Dernière version de l’extension Azure Quantum Development Kit . Pour plus d’informations sur l’installation, consultez Installation du QDK moderne sur VS Code.
Si vous souhaitez utiliser Python dans VS Code, vous avez également besoin des éléments suivants :
Installez la dernière version de Python et les extensions Jupyter pour VS Code.
Dernier package Azure Quantum
qsharp
.python -m pip install --upgrade qsharp
Comment gérer des programmes volumineux Q#
Lorsque vous envoyez un travail d’estimation des ressources à l’estimateur de ressources, le programme quantique est évalué entièrement pour extraire les estimations des ressources. Si vous souhaitez estimer les ressources d’une Q# opération appelée plusieurs fois, par exemple, dans une boucle avec de nombreuses itérations, l’exécution du travail d’estimation des ressources peut prendre beaucoup de temps. L’un des moyens de réduire les longs temps d’exécution consiste à exécuter l’opération une seule fois, à calculer et à mettre en cache ses coûts, et à utiliser les données lors des appels suivants. Cette technique est appelée mise en cache manuelle.
L’estimateur target de ressources prend en charge deux Q# fonctions pour effectuer une mise en cache manuelle : BeginEstimateCaching(name: String, variant: Int): Bool
et EndEstimateCaching(): Unit
. BeginEstimateCaching
la fonction prend comme entrées un name
qui est le nom unique du fragment de code pour lequel vous souhaitez mettre en cache les coûts, et un entier variant
qui distingue différentes variantes de coût pour le même fragment.
Notes
Les deux opérations spéciales et EndEstimateCaching
sont des opérations BeginEstimateCaching
intrinsèques pour l’estimateur de ressources. Ils ne sont pas pris en charge par d’autres exécutions targets.
Par exemple, supposons que vous ayez une Q# opération appelée ExpensiveOperation
qui est appelée plusieurs fois dans une itération. Vous pouvez utiliser la mise en cache pour réduire son temps d’estimation :
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
Quand ExpensiveOperation
est utilisé à plusieurs reprises, BeginEstimateCaching
est appelé à chaque fois. Quand BeginEstimateCaching
est appelé pour la première fois, il retourne true
et commence l’accumulation des données de coût. Cela entraîne l’exécution du fragment de code coûteux. Lorsqu’elles EndEstimateCaching
sont appelées, les données de coût sont stockées pour une utilisation future et elles sont incorporées dans le coût global du programme.
Quand ExpensiveOperation
est appelé la deuxième fois (et par la suite), l’estimateur de ressources recherche les données de coût stockées (mises en cache), les incorpore dans le coût global du programme et retourne false
. Cela entraîne l’ignorer d’un fragment de code coûteux, par conséquent, l’estimateur de ressources exécute le programme plus rapidement. EndEstimateCaching
doit être placé à la fin de la condition et les régions placées dans BeginEstimateCaching-EndEstimateCaching
peuvent être imbriquées.
SingleVariant()
indique que les données de coût collectées lors de la première exécution peuvent être réutilisées dans toutes les exécutions suivantes du fragment de code. Ce n’est peut-être pas toujours le cas. Par exemple, si votre code a un coût différent pour les valeurs impaires et paires d’une variable « c », vous pouvez fournir une variant
valeur :
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
// Some code
EndEstimateCaching();
}
}
Dans ce cas, le cache est différent pour les valeurs impaires et paires de c
. En d’autres termes, les données collectées pour les valeurs paires de c
sont réutilisées uniquement pour les valeurs paires de c
, et il en va de même pour les valeurs impaires de c
.
Notes
Si vous rencontrez un problème lors de l’utilisation de l’estimateur de ressources, case activée la page Résolution des problèmes ou contactez AzureQuantumInfo@microsoft.com.
Étapes suivantes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour