2010-01-28 20 views
6

Ho intenzione di fare un po 'di rispolverare la mia conoscenza delle statistiche. Un'area in cui sembra che le statistiche sarebbero utili è nel codice di profilazione. Dico questo perché sembra che la profilazione implichi quasi sempre il tentativo di estrarre alcune informazioni da una grande quantità di dati.Quali concetti statistici sono utili per la profilazione?

Esistono argomenti in statistica che potrei rispolverare per ottenere una migliore comprensione dell'output del profiler? Punti bonus se puoi indicarmi un libro o un'altra risorsa che mi aiuterà a capire meglio questi argomenti.

risposta

3

Non sono sicuro che i libri sulle statistiche siano utili quando si tratta di profilare. Esecuzione di un profiler dovrebbe darvi un elenco di funzioni e la percentuale di tempo trascorso in ciascuno. Poi guardi quello che ha preso la maggior parte delle percentuali e vedere se è possibile ottimizzarlo in qualsiasi modo. Ripeti fino a quando il tuo codice è abbastanza veloce. Non ho molto spazio per la deviazione standard o per il chi quadrato, mi sento.

+0

Questo è davvero alla fine come lo faccio, e probabilmente hai ragione. Tuttavia, mi piacerebbe saperne di più sulle statistiche, e questo sembra essere un buon posto per cercare di renderlo pratico. –

+0

++ Neil ha ragione, anche se per lo più guardo il livello della linea, non il livello della funzione. (E, Neil, spero che per "percentuale di tempo" tu volessi dire "tempo totale", non "tempo di auto", e spero che intendessi "tempo dell'orologio a muro", non solo CPU, perché il software diventa grande, spreco di tempo diventa sempre più a causa di chiamate di funzione non necessarie, e alcune di queste fanno I/O.) –

1

Penso che il concetto statistico più importante da comprendere in questo contesto sia Amdahl's law. Sebbene comunemente indicato in contesti di parallelizzazione, la legge di Amdahl ha un'interpretazione più generale. Ecco un estratto dalla pagina Wikipedia:

Più tecnicamente, la legge è interessato con l'aumento di velocità ottenibile da un miglioramento un calcolo che colpisce una percentuale P di tale calcolo in cui il miglioramento ha un'accelerazione di S. (Ad esempio, se un miglioramento di può accelerare il 30% del calcolo , P sarà 0.3, se il miglioramento di rende la porzione interessata due volte più veloce, S sarà 2.) La legge di Amdahl afferma che la velocità complessiva di che applica il miglioramento sarà

alt text

+2

Non proprio statistiche, vero? –

+1

@Neil: Non lo so davvero :-) Wikipedia dice "Le statistiche sono la scienza di fare un uso efficace dei dati numerici relativi a gruppi di individui o di esperimenti" - non è applicabile, quindi? –

+2

@Eli Precisamente - Non vedo alcun dato "di gruppo" in questa equazione. –

-1

Se si applica il metodo di programmazione MVC con PHP Questo sarebbe ciò che è necessario al profilo:

Application: 
    Controller Setup time 
    Model Setup time 
    View Setup time 
Database 
    Query - Time 
Cookies 
    Name - Value 
Sessions 
    Name - Value 
+0

Siamo spiacenti, non conosco PHP. E sono un po 'confuso su come questo si riferisce alla mia domanda. Dove si inseriscono le statistiche qui? –

+0

Bene PHP è ancora un altro linguaggio di programmazione. (Scusa per aver immaginato (erroneamente) che intendi php. Btw si merita davvero un downvote?Non è che sto scrivendo spam o una risposta completamente inutile – RJD22

3

statistiche è divertente e interessante, ma per tuning delle prestazioni, non ne hai bisogno. Here's an explanation why, ma una semplice analogia potrebbe dare l'idea.

Un problema di prestazioni è come un oggetto (che potrebbe essere effettivamente più oggetti connessi) sepolto sotto un acro di neve, e si sta cercando di trovarlo sondando a caso con un bastone. Se il tuo bastone lo colpisce un paio di volte, lo hai trovato - la sua dimensione esatta non è così importante. (Se vuoi davvero una stima migliore di quanto è grande, prendi più sonde, ma questo non cambierà la sua dimensione.) Il numero di volte che devi sondare la neve prima di trovarlo dipende da quanta parte dell'area la neve è sotto

Una volta trovato, è possibile estrarlo. Ora c'è meno neve, ma potrebbero esserci più oggetti sotto la neve che rimane. Quindi con più sondaggi, puoi trovare e rimuovere anche quelli. In questo modo, puoi andare avanti fino a quando non riesci a trovare altro che puoi rimuovere.

Nel software, la neve è il tempo, e il sondaggio sta prendendo campioni a caso della pila di chiamate. In questo modo, è possibile trovare e rimuovere più problemi, risultando in large speedup factors.

E le statistiche non hanno nulla a che fare con questo.

1

Penso che un concetto relativo sia alla statistica che alla profilazione (la tua domanda originale) che è molto utile e utilizzato da alcuni (vedi la tecnica consigliata di volta in volta) è mentre si fa "micro profiling": molti programmatori si radunerà e urlerà "non puoi micro profilo, il microprofilo semplicemente non funziona, troppe cose possono influenzare il tuo calcolo".

Eppure basta eseguire n volte la profilazione, e tenere solo x% delle vostre osservazioni, quelle intorno alla mediana, perché la mediana è una "statistica robusta" (contrariamente alla media) che non è influenzata per valori anomali (i valori anomali sono precisamente il valore che non si vuole prendere in considerazione quando si effettua tale profilazione).

Questa è sicuramente una tecnica statistica molto utile per i programmatori che vogliono microprofilo il loro codice.

+0

Non misurare. * Catch it in the act. * Http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024 –

+1

Io faccio e vedo questi due metodi come complementari ... Mi piace inviare un SIGQUIT ai miei programmi Java multi-thread, che scaricano tutti i thread, esattamente dove sono. Lo faccio tutto il tempo. Questo significa che non risponde alla domanda * affatto *. La domanda riguardava i concetti statistici utili per la profilazione. – SyntaxT3rr0r

+0

Beh, immagino ci sia un concetto statistico su cui mi baso, la distribuzione binomiale, ma non la uso *, tranne come spiegazione del perché "catching" funziona. Uso anche il teorema di Bayes per spiegare perché funziona. Ma il calabrone non ha bisogno di sapere * come * vola, semplicemente vola. –

3

Tutto ciò che so sulla creazione di profili è ciò che ho appena letto su Wikipedia :-) ma conosco un bel po 'di statistiche. L'articolo di profilazione parlava di campionamento e analisi statistica dei dati campionati. Chiaramente l'analisi statistica sarà in grado di utilizzare questi campioni per sviluppare alcune dichiarazioni statistiche sulle prestazioni. Supponiamo che tu abbia una certa misura delle prestazioni, m, e che campiona quella misura 1000 volte. Diciamo anche che sai qualcosa sui processi sottostanti che hanno creato quel valore di m. Ad esempio, se m è la somma di un gruppo di variabili casuali, la distribuzione di m è probabilmente normale. Se m è il PRODOTTO di un gruppo di variabili casuali, la distribuzione è probabilmente lognormale. E così via ...

Se non si conosce la distribuzione sottostante e si desidera fare alcune affermazioni sul confronto delle prestazioni, potrebbero essere necessarie le cosiddette statistiche non parametriche.

Nel complesso, io suggerirei di qualsiasi testo standard su inferenza statistica (DeGroot), un testo che copre distribuzioni di probabilità diversa e dove sono applicabili (Hastings & Peacock), e un libro sulle statistiche non parametriche (Conover) . Spero che questo ti aiuti.

+1

++ per la tua discussione sulle statistiche, in particolare sui tuoi riferimenti. Mi affido a Hastings & Peacock. Ho soppresso un (-) per la tua conoscenza di Wikipedia di profilazione :-) Vedi la mia risposta. La mia analogia sulla neve non è grandiosa, ma c'è un grande malinteso generale tenuto dal mondo, e da Wikipedia, e dalla maggior parte dei venditori di profiler, e la carta gprof ** originale, che l'ottimizzazione delle prestazioni riguarda la misurazione e le statistiche. Ecco un dissenso: http://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion/1562802#1562802 –

2

Zed Shaw, come al solito, ha qualche thoughts in materia di statistiche e di programmazione, ma lui li mette molto più eloquente di quanto ho potuto.

Problemi correlati