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

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