Added mix_areas_srv and */srv ratio

This commit is contained in:
Jaroslav Kysela 2003-02-20 19:47:37 +00:00
parent 8d2eecb547
commit f74660eaeb

View file

@ -85,6 +85,35 @@ static double detect_cpu_clock()
return (tsc_end - tsc_begin) / (tm_end.tv_sec - tm_begin.tv_sec + (tm_end.tv_usec - tm_begin.tv_usec) / 1e6);
}
void mix_areas_srv(unsigned int size,
const s16 *src,
volatile s32 *sum,
unsigned int src_step)
{
while (size-- > 0) {
atomic_add(sum, *src);
((char*)src) += src_step;
sum++;
}
}
void saturate(unsigned int size,
s16 *dst, const s32 *sum,
unsigned int dst_step)
{
while (size-- > 0) {
s32 sample = *sum;
if (unlikely(sample < -0x8000))
*dst = -0x8000;
else if (unlikely(sample > 0x7fff))
*dst = 0x7fff;
else
*dst = sample;
((char*)dst) += dst_step;
sum++;
}
}
void mix_areas0(unsigned int size,
volatile s16 *dst, s16 *src,
volatile s32 *sum,
@ -381,7 +410,7 @@ int main(int argc, char **argv)
int size = 2048, n = 4, max = 32267;
int LOOP = 100;
int i, t;
unsigned long long begin, end, diff, diff0, diff1, diff1_mmx, diff2;
unsigned long long begin, end, diff, diffS, diff0, diff1, diff1_mmx, diff2;
double cpu_clock = detect_cpu_clock();
setscheduler();
@ -407,6 +436,20 @@ int main(int argc, char **argv)
}
}
for (t = 0, diffS = -1; t < LOOP; t++) {
init(dst, sum, size);
rdtscll(begin);
for (i = 0; i < n; i++) {
mix_areas_srv(size, srcs[i], sum, 2);
}
saturate(size, dst, sum, 2);
rdtscll(end);
diff = end - begin;
if (diff < diffS)
diffS = diff;
printf("mix_areas_srv : %lld \r", diff); fflush(stdout);
}
for (t = 0, diff0 = -1; t < LOOP; t++) {
init(dst, sum, size);
rdtscll(begin);
@ -461,10 +504,15 @@ int main(int argc, char **argv)
printf(" \r");
printf("Summary (the best times):\n");
printf("mix_areas0 : %lld\n", diff0);
printf("mix_areas1 : %lld\n", diff1);
printf("mix_areas1_mmx: %lld\n", diff1_mmx);
printf("mix_areas2 : %lld\n", diff2);
printf("mix_areas_srv : %lld %f%%\n", diffS, 100*2*44100.0*diffS/(size*n*cpu_clock));
printf("mix_areas0 : %lld %f%%\n", diff0, 100*2*44100.0*diff0/(size*n*cpu_clock));
printf("mix_areas1 : %lld %f%%\n", diff1, 100*2*44100.0*diff1/(size*n*cpu_clock));
printf("mix_areas1_mmx: %lld %f%%\n", diff1_mmx, 100*2*44100.0*diff1_mmx/(size*n*cpu_clock));
printf("mix_areas2 : %lld %f%%\n", diff2, 100*2*44100.0*diff2/(size*n*cpu_clock));
printf("\n");
printf("areas1/srv ratio : %f\n", (double)diff1 / diffS);
printf("areas1_mmx/srv ratio : %f\n", (double)diff1_mmx / diffS);
return 0;
}