This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
td9:part2 [2021/11/06 15:22] bmonsuez [Question n°2] |
td9:part2 [2022/11/18 10:48] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Partie 2 :Mesuré le temps passé par une fonction ====== | + | ====== Partie 2 : Mesurer le temps passé par une fonction ====== |
[[in204:tds:sujets:td9|TD9]] | [[in204:tds:sujets:td9|TD9]] | ||
Line 97: | Line 97: | ||
<code cpp> | <code cpp> | ||
template<class numericalT> | template<class numericalT> | ||
- | constexpr numericalT power_by_int(numericalT x, int y) | + | numericalT power_by_int(numericalT x, int y) |
{ | { | ||
numericalT result = (numericalT)1.0; | numericalT result = (numericalT)1.0; | ||
Line 114: | Line 114: | ||
template<class Function, class ... Args> | template<class Function, class ... Args> | ||
- | std::pair<std::chrono::high_resolution_clock::duration, long double> estimate_function_time(Function function, Args... arguments) | + | auto estimate_function_time(Function function, Args... arguments) |
{ | { | ||
auto starting_time = std::chrono::high_resolution_clock::now(); | auto starting_time = std::chrono::high_resolution_clock::now(); | ||
Line 140: | Line 140: | ||
==== Question n°5 ==== | ==== Question n°5 ==== | ||
- | Créer une fonction nouvelle qui va appeller la fonction <code>estimate_time</code> pour calculer <code>x</code> fois le temps et retourné le temps moyen pour effectuer un "run" de la fonction. | + | Créer une fonction nouvelle qui va appeller la fonction ''estimate_function_time'' pour calculer ''x'' fois le temps nécessaire pour calculer la fonction et qui retourn le temps moyen pour effectuer un "run" de la fonction. |
- | Exécuter cette fonction pour les fonctions <code>power</code> et <code>factorial</code> précédemment définie. | ||
- | ==== Question n°4 ==== | + | Cette fonction aura l'entête suivante : |
- | Que faut-il faire ajouter pour dire au compilateur que la fonction <code>factorial</code> ou que la fonction <code>power</code> peut-être exécutée au moment de l'exécution ? | + | <code cpp> |
+ | template<class Function, class ... Args> | ||
+ | long long mean_function_time(int number_of_runs, Function function, Args... arguments) | ||
+ | { | ||
+ | ... | ||
+ | } | ||
+ | </code> | ||
- | Effectuer la modification. | + | <hidden Correction> |
+ | |||
+ | Il suffit de lancer ''number_of_runs'' fois un appel à ''estimate_function_time'' pour la fonction et les arguments. Ceci donne le code suivant : | ||
+ | |||
+ | <code cpp> | ||
+ | template<class Function, class ... Args> | ||
+ | long long mean_function_time(int number_of_runs, Function function, Args... arguments) | ||
+ | { | ||
+ | long long duration = 0L; | ||
+ | int remaining_runs = number_of_runs; | ||
+ | while (remaining_runs-- > 0) | ||
+ | duration += estimate_function_time(function, arguments...).first.count(); | ||
+ | return duration / (long long)number_of_runs; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | </hidden> | ||
- | Calculer le temps pris désormais par ces fonctions. | ||
+ | [[.td9:part1|Manipuler un nombre variable de paramètres]] | ||
+ | [[.td9:part3|Exécution à la compilation]] | ||