Un punto di riferimento è qualcosa che misura il tempo per tutta l'operazione. per esempio. Operazioni di I/O al secondo con carico di lavoro. Quindi il risultato è in genere un numero singolo, in secondi o operazioni al secondo. O un set di dati con risultati per diversi parametri, in modo da poterlo rappresentare graficamente.
È possibile utilizzare un benchmark per confrontare lo stesso software su hardware diverso o versioni diverse di altri software con cui il benchmark interagisce. per esempio. connessioni max di benchmark al secondo con diverse impostazioni di apache.
La creazione di profili non mira al confronto di cose diverse: riguarda la comprensione del comportamento di un programma. Un risultato del profilo può essere un intervallo di tempo impiegato per la funzione o even per instruction with a sampling profiler. Si può dire che è un profilo non un punto di riferimento perché non ha senso dire "quella funzione ha richiesto meno tempo in modo che manterremo quella e smetteremo di usare il resto".
Leggi l'articolo di Wikipedia per saperne di più: https://en.wikipedia.org/wiki/Profiling_(computer_programming)
Si utilizza un profilo per capire dove per ottimizzare. Un aumento del 10% in una funzione in cui il tuo programma spende il 99% del suo tempo è più prezioso di un aumento della velocità del 100% in qualsiasi altra funzione. Ancora meglio è quando puoi migliorare il tuo design di alto livello in modo che la funzione costosa venga chiamata meno, oltre a renderla più veloce.
Microbenchmarking è una forma specifica di benchmarking. Significa che stai testando una cosa super-specifica per misurare solo questo in isolamento, non la prestazione complessiva di tutto ciò che è veramente utile.
risultati Esempio: microbenchmark
esemplificativo e non micro risultati dei benchmark:
- comprimere questa collezione 100MB di file ha preso 23 secondi con 7-zip (con opzioni specifiche e hardware).
- la compilazione di un kernel Linux ha impiegato 99 secondi su una combinazione hardware/software.
Vedere anche https://en.wikipedia.org/wiki/Benchmark_(computing)#Types_of_benchmarks.
Micro-benchmarking è un caso speciale di benchmarking. Se lo fai bene, ti dice quali operazioni sono costose e quali sono a buon mercato, il che ti aiuta mentre cerchi di ottimizzare. Se lo fai male, probabilmente non hai nemmeno misurato quello che hai deciso di misurare. per esempio. hai scritto qualche C per testare loops vs. while loop, ma il compilatore ha creato un codice diverso per ragioni diverse, ei tuoi risultati sono privi di significato. (Diversi modi di esprimere la stessa logica non hanno quasi mai importanza con i moderni compilatori di ottimizzazione, non perdere tempo in questo.) Il micro-benchmarking è difficile.
L'altro modo per dire che è un micro-benchmark è che di solito è necessario controllare l'output asm del compilatore per assicurarsi che stia testando ciò che si desidera testare. (per esempio che non ha ottimizzato le iterazioni del ciclo di ripetizione 10M sollevando qualcosa di costoso dal ciclo che dovrebbe ripetere l'intera operazione abbastanza volte per fornire una durata che può essere misurata con precisione.)
Micro -benchmarking può distorcere le cose, perché mettono alla prova la vostra funzione con cache calde e predizione delle diramazioni innescato, e non corrono alcun altro codice tra le chiamate del codice in prova. Questo può far sembrare buono lo svolgimento di enormi loop, quando come parte di un programma reale porterebbe a più errori di cache. Allo stesso modo, rende le grandi tabelle di ricerca un bell'aspetto, perché l'intera tabella di ricerca finisce nella cache. Il programma completo di solito sporca abbastanza cache tra le chiamate alla funzione che la tabella di ricerca non sempre colpito nella cache, in modo che sarebbe stato più conveniente solo per calcolare qualcosa. (La maggior parte dei programmi ha limiti di memoria.)
Grazie per aver dedicato del tempo. Ma la mia confusione inizia con il micro-benchmarking: significherebbe solo _benchmark_ solo una determinata funzione del mio programma? Ed esattamente qual è la differenza rispetto a _profile_ una determinata funzione? –
@JimMcAdams: Sì, questo è esattamente il genere di cosa è il microbenchmarking: ripetere lo stesso lavoro molte volte. In un risultato del profilo, il drill-down fino a una singola funzione si spera possa mostrarti% del tempo totale su base riga-per-riga. (O istruzioni per istruzione, dato che a questa granularità conta più l'aspetto asm della sorgente.) Oppure potresti profilare i miss della cache di registrazione invece dei cicli di clock. –
Bella risposta, (sto cercando di imparare come spiegare le cose abbastanza chiaramente) hai praticato l'insegnamento? :). – 0xc0de