[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