[speex-dev] libspeex/SSE Intrinsics with GCC 3.3.x
Steve Kann
stevek at stevek.com
Thu Apr 1 17:03:11 PST 2004
On that note, I'd also suggest trying the following compilation flags.
They seemed to help me get speex (at least on Athlon) to go from
Encode/Decode = 31.9x / 146x realtime
to
Encode/Decode = 53.4x / 361x realtime
The flags I used are -O3 -ffast-math -funroll-all-loops -march=pentium3
-fprefetch-loop-arrays -fsingle-precision-constant
You might also try -mcpu=pentium3 instead; that will make your code not
require pentium3.
This was based on work I was doing with the preprocessor; interestingly,
-fsingle-precision-constant alone gave me about 40% improvement on P4s
this way. (from 78X realtime to 109X realtime). But, the preprocessor
still needs lots of work, especially on P4; it's actually significantly
faster to execute on Athlon 1.4Ghz (XP 1700+) than P4 2.8Ghz HT.
-SteveK
<p><p>Michael T. Dean wrote:
> When compiling Speex 1.1.4 with GCC 3.3.2, the option -msse must be
> added to the CFLAGS in libspeex/Makefile.
>
> GCC 3.1.1 added a new option "-msse" (see
> http://gcc.gnu.org/gcc-3.1/changes.html , specifically under "New
> Targets and Target Specific Improvements") to enable SSE instructions
> within the compiler's output (for appropriate architectures).
>
> Compiling speex on GCC 3.3.2 without the -msse option yields the error
> message shown at bottom. The referenced file (xmmintrin.h) contains a
> check to ensure that SSE is enabled (via -msse) before use:
>
> #ifndef __SSE__
> # error "SSE instruction set not enabled"
> #else
>
> This check seems to have been added to the GCC 3.3.x series.
>
> Once the option is added to CFLAGS, libspeex (and the rest of the
> speex package) compiles cleanly and executes properly.
>
> Thanks,
> Mike Dean
>
>
> gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\"
> -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1
> -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1
> -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1
> -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1
> -DHAVE_DLFCN_H=1 -DHAVE_SYS_SOUNDCARD_H=1 -DHAVE_LIBOGG=1
> -DHAVE_LIBM=1 -DVERSION=\"1.1.4\" -D_USE_SSE=1 -I. -I. -g -O2 -MT
> nb_celp.lo -MD -MP -MF .deps/nb_celp.Tpo -c nb_celp.c -fPIC -DPIC -o
> .libs/nb_celp.o
> In file included from vq.h:43,
> from nb_celp.c:41:
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/xmmintrin.h:34:3:
> #error "SSE instruction set not enabled"
> In file included from nb_celp.c:41:
> vq.h:44: error: parse error before '*' token
> vq.h:46: error: parse error before '*' token
> make[1]: *** [nb_celp.lo] Error 1
> make[1]: Leaving directory `/usr/local/src/mdean/speex-1.1.4/libspeex'
> make: *** [all-recursive] Error 1
>
>
> --- >8 ----
> List archives: http://www.xiph.org/archives/
> Ogg project homepage: http://www.xiph.org/ogg/
> To unsubscribe from this list, send a message to
> 'speex-dev-request at xiph.org'
> containing only the word 'unsubscribe' in the body. No subject is
> needed.
> Unsubscribe messages sent to the list will be ignored/filtered.
>
--- >8 ----
List archives: http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'speex-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body. No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.
More information about the Speex-dev
mailing list