[bglug] Tempi di esecuzione
Pier
pier.damato@gmail.com
Ven 28 Lug 2006 14:35:13 CEST
Ciao a tutti.
Vi propongo un piccolo quesito tecnico.
Sto facendo un'analisi dei diversi algoritmi che operano su immagini,
l'obiettivo è quello di determinare i migliori. Al termine quelli scelti
verranno inclusi all'interno di una piattaforma che opera in ambiente
real-time. Visto l'ambito di utilizzo è necessario effettuare una stima
abbastanza precisa dei tempi, ed è proprio qui che ho dei problemi.
Lo stralcio di codice è il seguente
imageOut=(unsigned char *)calloc(rows*cols,sizeof(unsigned char));
cmnGetTimestamp(&timeStart);
averageFilter3x3(imageIn,rows,cols,&imageOut,&time);
cmnGetTimestamp(&timeStop);
printf("\n\n\n\nTime: %lld\n",timeStop-timeStart);
cmnGetTimestamp(&timeStart);
averageFilter3x3(imageIn,rows,cols,&imageOut,&time);
cmnGetTimestamp(&timeStop);
printf("\n\n\n\nTime: %lld\n",timeStop-timeStart);
cmnGetTimestamp(&timeStart);
averageFilter3x3(imageIn,rows,cols,&imageOut,&time);
cmnGetTimestamp(&timeStop);
printf("\n\n\n\nTime: %lld\n",timeStop-timeStart);
Ecco la domanda. La prima esecuzione della funzione averageFilter
impiega circa il doppio del tempo (120 ms) delle due successive (66 - 67
ms)
Perchè?
L'unica risposta che mi sono dato è che la prima volta i dati sono
prelevati dalla memoria, mentre per le altre due esecuzioni si trovano
in cache. Vi sembra plausibile oppure avete altre spiegazioni? Questo
significherebbe che con i dati in cache i tempi sono solo dimezati,
mentre io mi aspetterei che fossero ben più bassi, tipo qualche ordine
di grandezza o no?
Se tutto questo è vero come posso fare per ottenere una stima dei tempi?
Considerando l'ambito real-time non posso ipotizzare tempi pari a 65 -
70 ms, perchè tutte le volte che ne impiega 120 mi va il crash il
sistema, ma non posso neppure ipotizzare tempi pari a 120 - 125 ms
quando nel 80% - 90% dei casi impiega la metà.
Se avete qualche idea o suggerimento vi ringrazio.
Ciao Pier
Maggiori informazioni sulla lista
bglug