[Speex-dev] Encoder performance on ARM9

llandre r&d2 at dave-tech.it
Fri May 6 02:03:51 PDT 2005


Hi there,

I've just started to work with the great speex encoder on ARM9-based
embedded platform. This is my configuration:

CPU: Cirrus Logic EP9315 @ 200 MHz (ARM920T)
o.s.: Linux 2.6.9-rc2-ep93xx
GCC: gcc version 3.3.3 (DENX ELDK 3.1 3.3.3-10) without MaverickCrunch support
ogg library: 1.0
speex command line configuration: ./configure --enable-fixed-point 
--enable-arm4-asm

The code is natively built on the target (i.e. no cross compilation)

I performed some tests with this simple script (the test-gab.pcm file is
about 10.1 seconds):

echo --------------------------------------------------------------------------
echo comp 0, bitrate 6600
time ../src/speexenc  -w --bitrate 6600 --comp 0 test-gab.pcm 
test-gab_b6600_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 0, bitrate 8000
time ../src/speexenc  -w --bitrate 8000 --comp 0 test-gab.pcm 
test-gab_b8000_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 0, bitrate 16000
time ../src/speexenc  -w --bitrate 16000 --comp 0 test-gab.pcm 
test-gab_b16000_c1.arm.spx
echo --------------------------------------------------------------------------
echo --------------------------------------------------------------------------
echo comp 1, bitrate 6600
time ../src/speexenc  -w --bitrate 6600 --comp 1 test-gab.pcm 
test-gab_b6600_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 1, bitrate 8000
time ../src/speexenc  -w --bitrate 8000 --comp 1 test-gab.pcm 
test-gab_b8000_c1.arm.spx
echo --------------------------------------------------------------------------
echo comp 1, bitrate 16000
time ../src/speexenc  -w --bitrate 16000 --comp 1 test-gab.pcm 
test-gab_b16000_c1.arm.spx
echo --------------------------------------------------------------------------
echo --------------------------------------------------------------------------
echo comp 3, bitrate 6600
time ../src/speexenc  -w --bitrate 6600 --comp 3 test-gab.pcm 
test-gab_b6600_c3.arm.spx
echo --------------------------------------------------------------------------
echo comp 3, bitrate 8000
time ../src/speexenc  -w --bitrate 8000 --comp 3 test-gab.pcm 
test-gab_b8000_c3.arm.spx
echo --------------------------------------------------------------------------
echo comp 3, bitrate 16000
time ../src/speexenc  -w --bitrate 16000 --comp 3 test-gab.pcm 
test-gab_b16000_c3.arm.spx
echo --------------------------------------------------------------------------
echo --------------------------------------------------------------------------
echo comp 8, bitrate 6600
time ../src/speexenc  -w --bitrate 6600 --comp 8 test-gab.pcm 
test-gab_b6600_c8.arm.spx
echo --------------------------------------------------------------------------
echo comp 8, bitrate 8000
time ../src/speexenc  -w --bitrate 8000 --comp 8 test-gab.pcm 
test-gab_b8000_c8.arm.spx
echo --------------------------------------------------------------------------
echo comp 8, bitrate 16000
time ../src/speexenc  -w --bitrate 16000 --comp 8 test-gab.pcm 
test-gab_b16000_c8.arm.spx


Here are the results I got:

--------------------------------------------------------------------------
comp 0, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m5.286s
user    0m4.560s
sys     0m0.420s
--------------------------------------------------------------------------
comp 0, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m4.836s
user    0m4.510s
sys     0m0.250s
--------------------------------------------------------------------------
comp 0, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m8.159s
user    0m5.550s
sys     0m0.280s
--------------------------------------------------------------------------
--------------------------------------------------------------------------
comp 1, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m7.596s
user    0m4.820s
sys     0m0.200s
--------------------------------------------------------------------------
comp 1, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m5.033s
user    0m4.780s
sys     0m0.170s
--------------------------------------------------------------------------
comp 1, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m6.149s
user    0m5.740s
sys     0m0.280s
--------------------------------------------------------------------------
--------------------------------------------------------------------------
comp 3, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m5.650s
user    0m5.310s
sys     0m0.220s
--------------------------------------------------------------------------
comp 3, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m5.780s
user    0m5.430s
sys     0m0.260s
--------------------------------------------------------------------------
comp 3, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m8.905s
user    0m8.530s
sys     0m0.210s
--------------------------------------------------------------------------
--------------------------------------------------------------------------
comp 8, bitrate 6600
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m7.168s
user    0m6.870s
sys     0m0.210s
--------------------------------------------------------------------------
comp 8, bitrate 8000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m8.510s
user    0m8.090s
sys     0m0.290s
--------------------------------------------------------------------------
comp 8, bitrate 16000
Encoding 16000 Hz audio using wideband (sub-band CELP) mode (mono)

real    0m17.096s
user    0m16.740s
sys     0m0.260s


This processor integrates a so-called MaverickCrunch coprocessor.
This coprocessor accelerates both IEEE-754 floating point and 32-bit
and 64-bit fixed point operations. Datasheet claims it is considerable
faster than ARM920T MAC operation.
So we can enable/disable at least four parameters:
1) fixed-point implementation (--enable-fixed-point)
2) ARM4T assembly optimization (--enable-arm4-asm)
3) support for MaverickCrunch (if this is enabled, I think
point 1 and 2 become meaningless)
4) command-line comp parameter

Clearly the best solution is exploiting the MaverickCrunch coprocessor.
Assuming we have MaverickCrunch-enabled GCC e glibc, do you suggest
to use e full floating point implementation or to use the
--enable-fixed-point anyway?



Thanks in advance and best regards,

llandre

DAVE Electronics System House - R&D Department
web:   http://www.dave-tech.it
email: r&d2 at dave-tech.it



More information about the Speex-dev mailing list