Domanda

E 'possibile determinare il throughput di un'applicazione su un processore dai conteggi di ciclo (cicli di istruzione processore) consumate con l'applicazione? Se sì, come calcolarlo?

È stato utile?

Soluzione

Se il processo è interamente CPU bound, quindi si dividere la velocità del processore per il numero di cicli per ottenere il throughput.

In realtà, pochi processi sono interamente CPU bound, però, nel qual caso si deve prendere altri fattori (velocità del disco, velocità di memoria, di serializzazione, ecc) in considerazione.

Altri suggerimenti

Semplice:

#include <time.h>
clock_t c;
c = clock(); // c holds clock ticks value
c = c / CLOCKS_PER_SEC; // real time, if you need it

Si noti che il valore che si ottiene è un'approssimazione, per maggiori informazioni vedere il href="http://swoolley.org/man.cgi/clock" rel="nofollow noreferrer"> pagina clock() man .

Alcune CPU hanno interni registri prestazioni che consentono di raccogliere tutti i tipi di statistiche interessanti, come cicli di istruzione (a volte anche su una base per unità di esecuzione base), cache miss, # di cache / memoria legge scrive /, ecc si può accedere a questi direttamente, ma a seconda di ciò che CPU e sistema operativo utilizzato ci possono essere gli strumenti esistenti che gestiscono tutti i dettagli per voi tramite una GUI. Spesso un buon strumento di profiling avrà il supporto per i registri di prestazioni e consentono di statistiche Raccogliere con loro.

Se si utilizza il Cortex-M3 da TI / Luminary Micro, è possibile utilizzare il driverlib consegnato da TI / Luminary Micro. Utilizzando le funzioni SysTick è possibile impostare lo SysTickPeriod al ciclo 1 processore: In modo da avere 1 clock del processore tra gli interrupt. Contando il numero di interrupt si dovrebbe ottenere un "abbastanza vicino stima" da quanto tempo un blocco funzionale o di una funzione introito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top