Domanda

Io cerco di misurare le cyles di clock necessari per eseguire un pezzo di codice sul TMS32064x + DSP che viene fornito con l'OMAP ZOOM 3430 MDK. Guardo il "manuale del programmatore" del chip DSP e si dice che il DSP supporta la funzione orologio ().

Quello che faccio è molto semplice, io faccio solo

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

e poi mettere i valori di "start", "stop" e "totale" per una memoria condivisa precedentemente allocato con il processore ARM. Poi ho semplicemente stamparlo su schermo a lato ARM.

Il problema è che nei miei primi esegue, ho sempre arrivare lo stesso valore "totale", e poi nei miei prossimi run ho sempre 0! "Start" e "Stop" valori andare avanti con il valore "totale".

La cosa più strana è che sembrano seguire uno schema di bit! Ho messo l'output di seguito:

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9

A quanto pare, l'orologio () non funziona bene, ma non sono sicuro se questo è a causa di qualcosa che faccio di sbagliato o perché questo tipo di cose non è supportata con l'hardware ho. Tutte le idee perché questo potrebbe accadere?

È stato utile?

Soluzione

Dalla lettura delle domande fino ad ora, direi che il manifesto originale ha sostanzialmente più la conoscenza di questa materia rispetto ai contribuenti fino ad ora, e che il sospetto che l'orologio () è rotto (o non supportato, e restituisce un non definito risultato) sul DSP sembra molto probabile.

Altri suggerimenti

Curiosamente, Perché avete bisogno di un precedentemente allocato memoria condivisa . Perché non provare con una variabile di stack normale? C'è qualcosa che mi manca?

Forse è necessario inizializzare l'orologio prima.

Come stai stampando fuori? forse il problema è in realtà con la visualizzazione del risultato?

sulla maggior parte delle piattaforme clock_t è molto lunga. Se stai usando printf con% d si potrebbe ottenere risultati variabili che è quello che si sta vedendo.

Supponendo l'inizio e la variabile end sono di tipo 'clock_t', e la vostra memoria condivisa assume la stessa interpretazione del l'altra estremità dei numeri passati, quindi il problema non è con la chiamata a orologio, e il vostro handleing della differenza tra l'inizio fine fine dei tempi.

Credo che il problema è nella memoria condivisa tra i due. Potete per favore inserire il codice per mostrare come si sta condividendo la memoria tra due processori separati?

Forse si potrebbe utilizzare alcuni assembly inline per accedere direttamente i registri del contatore della CPU.

Il TMS320C64x + ha un registro timestamp a 64 bit in TsCI, TSCH. Il contatore non è abilitata sul reset, è necessario scrivere al registro per avviare il contatore (forse questo è il problema con clock?). La lettura dal registro non è abbastanza banale come ogni metà deve essere letto con un'istruzione separata (e si può ottenere interrupt ...).

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