Come hanno contato il numero di righe di codice eseguite in fase di runtime?

5

Nel 2001 è stato pubblicato un gioco per PC chiamato Black & Bianco di studi Lionhead in cui è presente una lunga pagina di statistiche aggiornata in tempo reale. C'erano statistiche come quante persone sono state uccise, quanti soldi hai guadagnato, ecc ... ma quello davvero sconcertante è stato il totale delle righe di codice eseguite, che erano miliardi e contando.

Come avrebbero saputo questo, come avrebbero calcolato questo a runtime? Lo hanno inventato?

    
posta Gary Willoughby 13.06.2011 - 19:22
fonte

5 risposte

6

Ci sono state molte statistiche sulle guancie in bianco e nero. È anche possibile che la statistica sia solo un numero semi-casuale basato su una funzione che in realtà non è collegata a nessuna statistica di esecuzione di codice reale.

    
risposta data 13.06.2011 - 20:20
fonte
3

Suppongo:

(how-long-you-played-for) / (tempo medio di esecuzione-per-80x86)

ti farebbe ottenere una figura da campo.

In realtà, ho appena trovato la mia vecchia copia di Black & Bianco sul retro di un armadio che stavo svuotando - forse lo farò andare avanti, anche se ricordo di non averlo pensato molto in quel momento.

    
risposta data 13.06.2011 - 19:28
fonte
3

I processori Intel e AMD ragionevolmente recenti (e molti altri processori ad alte prestazioni) includono registri PMC (Performance Monitoring Counter). Puoi monitorare una varietà di cose diverse, ma probabilmente la più rilevante per la domanda in questione sarebbe il numero di istruzioni ritirate.

Mettere questi su un uso serio può essere un po 'complicato - per esempio, ci sono circostanze in cui possono essere sottostimate al numero di istruzioni effettive ritirate (per esempio, se un interrupt di gestione del sistema si verifica mentre si esegue un'istruzione di interruzione, alcuni processori hanno vinto contare il resume dalle istruzioni di gestione del sistema). Per gli scopi a portata di mano, tuttavia, probabilmente mostreresti solo ciò che ha e ignorerai i dettagli minori che a volte potrebbero essere un po 'off.

Vale la pena notare, tuttavia, che questo è il conteggio delle istruzioni del linguaggio assembly, che non corrispondono direttamente alle righe di codice in un tipico linguaggio di livello superiore. La conversione tra i due potrebbe essere non banale - anche in C, non è affatto fissa (anche se molte linee saranno vicine a 1: 1) ma in qualcosa come Perl, ad esempio, il numero di istruzioni per una linea Il codice potrebbe non solo essere abbastanza grande, ma potrebbe anche variare (enormemente) a seconda del contenuto di una stringa, se fosse usato come pattern.

    
risposta data 13.06.2011 - 19:39
fonte
0

È certamente una stima. Come lo stimano anche se è una domanda interessante.

Scrivo uno strumento che analizza l'intero codice sorgente e crea una tabella di ricerca contenente il nome della funzione e le linee del codice sorgente per quella funzione.

Quindi eseguirò il debug del gioco per un certo tempo t , dice 1 ora, tracciando ogni funzione chiamata e scrivendo i risultati su un file. Alla fine della sessione, lancerei uno script che legge il file e cerca le linee del codice sorgente per ogni funzione chiamata e somma il numero di linee.

Ora conosci le linee di codice eseguite per il tempo t e potresti facilmente ricavare le linee di codice eseguite per il tempo t2 che è l'intervallo a cui vuoi aggiorna le tue statistiche, dì ogni 5 secondi.

Questo numero è valido per un giocatore, moltiplicandolo per il numero di giocatori attuali e ottieni una buona stima del numero totale di linee di codice sorgente eseguite in tempo reale.

    
risposta data 14.06.2011 - 06:40
fonte
0

Credo che abbiano usato solo uno strumento di copertura del codice come GNU Gcov.

Modifica: GNU Gcov è uno strumento di copertura del codice utilizzato principalmente nei test del software. Durante i test, integrano semplicemente Gcov con il software in fase di test e quindi eseguono i loro soliti test. Alla fine del test, generano report utilizzando i dati raccolti da Gcov in fase di runtime. Gcov raccoglie molti dati tra cui quali funzioni sono state eseguite, il numero di volte in cui sono state eseguite e simili.

Copertura del codice su Wikipedia

    
risposta data 14.06.2011 - 07:24
fonte

Leggi altre domande sui tag