mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Added mix_areas_srv and */srv ratio
This commit is contained in:
parent
8d2eecb547
commit
f74660eaeb
1 changed files with 53 additions and 5 deletions
58
test/code.c
58
test/code.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue