[FoLUG] Tempi di esecuzione

Pier pier.damato@gmail.com
Ven 28 Lug 2006 14:33:38 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 FoLUG