c'è qualche modo GNU valido su come misurare il tempo di esecuzione medio (caso peggiore, caso migliore) di qualche programma da riga di comando? Ho un filtro immagine, una quantità non specificata di immagini, filtrandole usando il ciclo for in bash. Finora sto usando il tempo , ma non riesco a trovare un modo per ottenere statistiche.Tempo medio di esecuzione
risposta
C'è un interessante programma Perl chiamato dumbbench che è essenzialmente un wrapper attorno al comando time
. Esegue il tuo programma un certo numero di volte, elimina i valori anomali, quindi calcola alcune statistiche.
L'autore ha un paio di articoli (here e here) che delineano a) perché il benchmarking fa schifo, e b) che tipo di grafici carini si possono fare per rendere i vostri numeri di benchmarking risucchiano un po 'meno.
Spero solo di poter passare diversi parametri per ogni corsa, lo proverò stasera. –
Sei sulla strada giusta con time
. È quello che uso per preformare le analisi di esecuzione di piccoli codici.
Quindi utilizzo python per raccogliere le statistiche leggendo l'output di time
. Per aumentare la precisione, di solito eseguo il test da 10 a 1000 volte, a seconda della durata di ciascun processo.
Non ho familiarità con nessuna applicazione GNU preinstallata che faccia questo tipo di analisi.
Se avete intenzione di usare Python, potreste voler usare [timeit] (http://www.python.org/doc//current/library/timeit.html). – GreenMatt
Ai vecchi tempi, eseguivamo il programma 12 volte usando 'time', buttando fuori i momenti migliori e peggiori, poi facendo una media dei restanti 10 valori. –
Amo timeit! Io raccomando di eseguire il piping dei dati da 'time' perché non voglio che Python controlli l'esecuzione dei miei comandi e quindi rallenti potenzialmente l'esecuzione catturando stdin e quant'altro. È un po 'come, dovrei usare C o dovrei usare Python: quel tipo di sensazione. – Sean
È possibile inviare l'output di tempo per qualche file, e poi "lavorare" il file
echo "some info" >> timefile.txt
time (./yourprog parm1 parm2) 2>> timefile.txt
#!/bin/bash
for i in {1..100}
do
env time --append -o time_output.txt ./test_program --arguments-to-test-program
done
exit
Se si scopre che la {1..100} sintassi non funziona per voi allora dovresti dare un'occhiata al comando seq.
Ho utilizzato il env time
per eseguire il programma orario anziché il comando incorporato della shell, che non accetta tutti gli argomenti che il programma orario impiega. Il programma orario impiega anche altri argomenti per modificare il formato del suo output, che probabilmente vorrai utilizzare per rendere i dati più facili da elaborare da un altro programma. L'argomento -p (--portability) lo rende in uscita nel formato POSIX (come fa il tempo incorporato di BASH), ma usando l'opzione -f puoi avere più controllo. man 1 time
per maggiori informazioni.
Dopo aver raccolto i dati, un semplice script perl o python può facilmente analizzare e analizzare i dati di temporizzazione.
Non è necessario utilizzare 'seq'. Puoi fare 'for ((i = 1; i <= 100; i ++))'. –
Se possibile, voglio evitare di scrivere il mio stesso analizzatore se qualcun altro lo ha fatto. –
Si dovrebbe considerare se eseguire il ciclo esterno e dividere per le ripetizioni anziché cronometrare ciascuna iterazione separatamente. Se sei preoccupato di scartare l'alto e il basso, fai ancora qualche altra iterazione per soffocarlo.
time for i in {1..1000}
do
something
done
È possibile capture the output from time in a variable:
foo=$({ time {
echo "stdout test message demo"
for i in {1..30}
do
something
done
echo "stderr test message demo" >&2
} 1>&3 2>&4; } 2>&1)
e fare un po 'di matematica falso:
foo=${foo/.} # "divide" by ...
echo "0.00${foo/#0}" # ... 1000
o semplicemente usare bc
:
echo "scale=8; $foo/1000" | bc
- 1. Tempo medio T-SQL
- 2. Come calcolare il tempo medio di attesa e il tempo medio di restituzione nella programmazione SJF?
- 3. Tempo medio di calcolo T-SQL
- 4. Panda: rolling medio per intervallo di tempo
- 5. tempo medio estratto dal ping -c
- 6. Hash Collision Linear Probing Tempo di esecuzione
- 7. tempo di esecuzione mysql
- 8. Tempo medio di pressione tra i tasti durante la digitazione
- 9. Razione di errore nella cache e calcolo del tempo medio
- 10. Postgres Query tempo di esecuzione
- 11. "vero" tempo di esecuzione limite
- 12. valore medio di due interi
- 13. Stampa Tempo di esecuzione dell'obiettivo di formica
- 14. drupal tempo massimo di esecuzione di cron
- 15. Registrazione del metodo di tempo di esecuzione
- 16. Tempo di esecuzione codice di misurazione
- 17. tempo di esecuzione nell'ambiente di multithreading
- 18. Tempo autore vs tempo di esecuzione in JavaScript
- 19. Gruppo medio filtro incrociato
- 20. medio di tuple
- 21. Tempo trascorso programma in esecuzione
- 22. Controllo del tempo di esecuzione nell'intelligence IDEA
- 23. Tempo di esecuzione della CPU in Java
- 24. Android: simula il lungo tempo di esecuzione
- 25. Tempo di esecuzione codice misura C (Linux)
- 26. Tempo di esecuzione con Notazione grande 01
- 27. C# 2.0 Timer tempo di esecuzione
- 28. inserimento lista concatenata tempo di esecuzione confusione
- 29. C# Passo Generics a tempo di esecuzione
- 30. proprietà aggiornamento file java tempo di esecuzione
@chown Qual è il punto del commento sopra? –
Domanda simile che ha alcune buone risposte - [bash: tempo medio di esecuzione su un numero di esecuzioni] (http://stackoverflow.com/questions/8215482/mean-running-time-over-a-number-of-runs/ 8216082 # 8216082). – chown