Optimized DCT, 74% performance increment.

This commit is contained in:
evilsocket 2009-05-26 06:30:39 +02:00
parent 807baca8a4
commit c80f671655

34
main.c
View file

@ -98,7 +98,7 @@ int main (int argc, char **argv) {
return 1; return 1;
} }
} }
printf( "DEVICE : %s\n", device );
buf = (u8*) malloc(TOTSIZE); buf = (u8*) malloc(TOTSIZE);
neutral = (double*) malloc(TOTSIZE*sizeof(double)); neutral = (double*) malloc(TOTSIZE*sizeof(double));
trans = (double*) malloc(TOTSIZE*sizeof(double)); trans = (double*) malloc(TOTSIZE*sizeof(double));
@ -132,18 +132,28 @@ int main (int argc, char **argv) {
printf ("capture done, computing DCT...\n" ); printf ("capture done, computing DCT...\n" );
t1 = time((unsigned) NULL); t1 = time((unsigned) NULL);
for (i=0; i<TOTSIZE; ++i) {
t = PIconst*i; /* porto fuori il loop per i = 0 così da evitare controlli su t (che dipende da i)
v = 0.0; * e j nel secondo loop più consistente . */
v = 0;
for (j=0; j<TOTSIZE; ++j) { for( j = 0; j < TOTSIZE; ++j ){
if (t && j) v += buf[j];
v += buf[j] * taylor_cosine( t * j, 10 ); }
else v *= coeff;
v += buf[j]; v -= neutral[0];
v = (v >= 0) ? v : -v;
trans[0] = log(v);
double init = buf[0];
for( i = 1; i < TOTSIZE; ++i ) {
t = PIconst * i;
v = init;
/* dato che ho inizializzato v a buf[0] e sono sicuro che t != 0,
* posso partire da j = 1 . */
for( j = 1; j < TOTSIZE; ++j ){
v += buf[j] * taylor_cosine( t * j, 10 );
} }
v *= coeff; v *= coeff;
v -= neutral[i]; v -= neutral[i];
v = (v >= 0) ? v : -v; v = (v >= 0) ? v : -v;