L'analyse comparative des programmes dans la Rouille
Comment est-il possible de comparer les programmes de la Rouille? Par exemple, comment pourrais-je obtenir le temps d'exécution du programme en quelques secondes?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer de timing de composants individuels à l'intérieur du programme à l'aide de la le temps de cage.
precise_time_ns
etprecise_time_s
.time
la caisse est maintenant apparemment obsolète.Il pourrait être intéressant de noter 2 ans plus tard (pour aider à l'avenir toute la Rouille programmeurs qui trébuchent sur cette page) il y a maintenant des outils de référence de la Rouille du code en tant que partie d'une suite de test.
(Dans le guide du lien ci-dessous) à l'Aide de la
#[bench]
attribut, on peut utiliser la norme de la Rouille de l'outillage pour les méthodes de référence dans leur code.Pour la commande
cargo bench
ce sorties quelque chose comme:Liens:
test
caisse)Si vous voulez simplement le temps d'un morceau de code, vous pouvez utiliser le
temps
caisse. le temps en attendant obsolète, cependant. Un suivi caisse estchrono
.Ajouter
time = "*"
à votreCargo.toml
.Ajouter
avant votre fonction principale et
Exemple complet
De fret.toml
la rouille.rs
time
la caisse est maintenant apparemment obsolète.chrono
la caisse est probablement ce que vous recherchez, à la suite de la dépréciation de latime
caisse. * Ne pas confondretime
caisse avec lestd::time
module de la bibliothèque standardPour le calendrier de tests que vous pouvez utiliser
std::temps::Instantanée
Bien sûr, si vous avez fait cela souvent, vous voulez généraliser la conversion, ou l'utilisation d'une caisse qui fournit des utilitaires pour cela, ou de la pellicule
Instant
etDuration
dans vos propres fonctions de sorte qu'ils peuvent être écrits dans moins verbeux.std::time::SystemTime
n'est pas garanti d'être de plus en plus monotone, il n'est pas le meilleur choix pour l'analyse comparative. Pour ce cas d'utilisation, il est préférable d'utiliser la fonction monotonestd::time::Instant
.time
cageprecise_time_ns
?Un moyen rapide de savoir le temps d'exécution d'un programme, indépendamment de la mise en œuvre de la langue, est d'exécuter
time prog
sur la ligne de commande. Par exemple:Les plus intéressants de mesure est généralement
user
, qui mesure le montant réel du travail effectué par le programme, peu importe ce qui se passe dans le système (sleep
est assez ennuyeux programme de référence).real
mesures le temps réel écoulé, etsys
mesures de la quantité de travail effectué par le système d'exploitation pour le compte du programme.Actuellement, il n'y a pas d'interface à Linux fonctions:
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts)
getrusage
times
(page de manuel:man 2 times
)Les méthodes disponibles pour mesurer le temps de calcul et les points chauds de la Rouille programme sur Linux sont:
/usr/bin/time program
perf stat program
perf record --freq 100000 program; perf report
valgrind --tool=callgrind program; kcachegrind callgrind.out.*
La sortie de
perf report
etvalgrind
dépend de la disponibilité des informations de débogage dans le programme. Il peut ne pas fonctionner.J'ai créé une petite caisse pour les ce (measure_time), dont les journaux ou imprime le temps jusqu'à la fin de la portée.