# [USE] mmx y sse(X) (cerrado)

## the incredible hurd

Hace poco, curioseando acerca de sse3 y ssse3, me topé con esto:

 *Quote:*   

> Intel was generally disappointed with their first IA-32 SIMD effort, MMX. MMX had two main problems: it re-used existing floating point registers making the CPU unable to work on both floating point and SIMD data at the same time, and it only worked on integers.

 

Por lo que estoy pensando en quitar MMX en todos los programas que lo permitan en amd64, y en las máquinas i686 no sé hasta qué punto sería razonable quitar MMX, dado que SSE sin números adicionales sólo soporta single precision arithmetics, por lo que sigue haciendo uso del 387 y acaso parece más adecuado quitar SSE, con mfpmath=387

¿Alguien podría recomendarme algún método para hacer pruebas de rendimiento más o menos fiables a tan bajo nivel?

No tengo ni idea de benchmarking, por lo que cualquier sugerencia será bienvenida... Creo que povray incluía algo muy similar a lo que busco. A ver si indago esta semana de puente...

----------

## gringo

 *Quote:*   

> dado que SSE sin números adicionales sólo soporta single precision arithmetics, por lo que sigue haciendo uso del 387 y acaso parece más adecuado quitar SSE, con mfpmath=387 

 

yo pregunté lo mismo una vez y básicamente un dev de gentoo me dijo que no lo hiciera por no sé que rollo del ensamblador, pero no recuerdo si era sólo para amd64 o si era válido tb. para x86. Creo recordar que en amd64 era redundante pero tampoco encuentro el hilo ahora mismo ...

Por lo de las pruebas de rendimiento, nunca me he parao a mirarlo, pero yo entiendo que una forma rápida de ver la diferencia de rendimiento es compilar un paquete como lame o libquicktime con y sin esa USE. En teoría entiendo que el que se haya compilado con esa USE debería aportar un plus de rendimiento, es decir, debería ser mas rápido a la hora de crear un mp3 p.ej.

Pero bueno, seguro que hay formas mas científicas de probar esto.

saluetes

----------

## pelelademadera

si, proba con mplayer y ripeate algun dvd...

compara los tiempos con un time y contanos que paso...

----------

## i92guboj

No conozco el caso concreto de las cpu's the intel. Pero coincido con los demás que lo más sencillo sería diseñar una batería de pruebas usando tres o cuatro programas distintos. lame, mencoder y povray probablemente sean los candidatos más cercanos. Eso te permitirá ver los resultados en el mundo real.

----------

## the incredible hurd

 *emerge -vp lame wrote:*   

> These are the packages that would be merged, in order:
> 
> Calculating dependencies... done!
> 
> [ebuild   R   ] media-sound/lame-3.98.2-r1  USE="-debug mmx -mp3rtp sndfile" 1,297 kB
> ...

 

```
$ time lame -h -V 0 cancion.wav cancion.mp3

LAME 3.98.2 32bits (http://www.mp3dev.org/)

CPU features: MMX (ASM used), 3DNow! (ASM used), SSE (ASM used)

Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz

Encoding cancion.wav to cancion.mp3

Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)

    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 

   991/991   (100%)|    0:02/    0:02|    0:02/    0:02|   11.207x|    0:00 

 32 [  0] 

 40 [  0] 

 48 [  0] 

 56 [  0] 

 64 [  0] 

 80 [  0] 

 96 [  0] 

112 [  0] 

128 [  0] 

160 [  2] %

192 [150] %%%%%%%%%%%%%%%%%%%%%%

224 [789] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

256 [ 49] %%%%%%%%

320 [  1] %

----------------------------------------------------------------------------------------------------------------------------

   kbps        LR    MS  %     long switch short %

  220.7       99.9   0.1        99.6   0.2   0.2

Writing LAME Tag...done

ReplayGain: -11.9dB

real   0m2.593s

user   0m2.276s

sys   0m0.052s

```

# USE="-mmx" emerge lame

reinicio y...

```
$ time lame -h -V 0 cancion.wav cancion.mp3

LAME 3.98.2 32bits (http://www.mp3dev.org/)

CPU features: MMX (ASM used), 3DNow! (ASM used), SSE (ASM used)

Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz

Encoding cancion.wav to cancion.mp3

Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)

    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 

   991/991   (100%)|    0:02/    0:02|    0:02/    0:02|   11.354x|    0:00 

 32 [  0] 

 40 [  0] 

 48 [  0] 

 56 [  0] 

 64 [  0] 

 80 [  0] 

 96 [  0] 

112 [  0] 

128 [  0] 

160 [  2] %

192 [150] %%%%%%%%%%%%%%%%%%%%%%

224 [789] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

256 [ 49] %%%%%%%%

320 [  1] %

----------------------------------------------------------------------------------------------------------------------------

   kbps        LR    MS  %     long switch short %

  220.7       99.9   0.1        99.6   0.2   0.2

Writing LAME Tag...done

ReplayGain: -11.9dB

real   0m2.960s

user   0m2.250s

sys   0m0.059s

```

NOTA> con USE -mmx sigue indicando CPU features: MMX (ASM used)

Por lo que lo compilo con el parametro -mno-mmx y USE -mmx, reinicio y

```
$ time lame -h -V 0 cancion.wav cancion.mp3

LAME 3.98.2 32bits (http://www.mp3dev.org/)

CPU features: MMX (ASM used), 3DNow! (ASM used), SSE

Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz

Encoding cancion.wav to cancion.mp3

Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)

    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 

   991/991   (100%)|    0:02/    0:02|    0:02/    0:02|   10.923x|    0:00 

 32 [  0] 

 40 [  0] 

 48 [  0] 

 56 [  0] 

 64 [  0] 

 80 [  0] 

 96 [  0] 

112 [  0] 

128 [  0] 

160 [  2] %

192 [150] %%%%%%%%%%%%%%%%%%%%%%

224 [789] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

256 [ 49] %%%%%%%%

320 [  1] %

----------------------------------------------------------------------------------------------------------------------------

   kbps        LR    MS  %     long switch short %

  220.7       99.9   0.1        99.6   0.2   0.2

Writing LAME Tag...done

ReplayGain: -11.9dB

real   0m2.796s

user   0m2.323s

sys   0m0.065s

```

Ummmmm, USE -mmx y CFLAG -mmmx, reinicio y 

```
$ time lame -h -V 0 cancion.wav cancion.mp3

LAME 3.98.2 32bits (http://www.mp3dev.org/)

CPU features: MMX (ASM used), 3DNow! (ASM used), SSE (ASM used)

Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz

Encoding cancion.wav to cancion.mp3

Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)

    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 

   991/991   (100%)|    0:02/    0:02|    0:02/    0:02|   11.158x|    0:00 

 32 [  0] 

 40 [  0] 

 48 [  0] 

 56 [  0] 

 64 [  0] 

 80 [  0] 

 96 [  0] 

112 [  0] 

128 [  0] 

160 [  2] %

192 [150] %%%%%%%%%%%%%%%%%%%%%%

224 [789] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

256 [ 49] %%%%%%%%

320 [  1] %

----------------------------------------------------------------------------------------------------------------------------

   kbps        LR    MS  %     long switch short %

  220.7       99.9   0.1        99.6   0.2   0.2

Writing LAME Tag...done

ReplayGain: -11.9dB

real   0m2.733s

user   0m2.252s

sys   0m0.072s

```

USE -mmmx deberia comprobar las CFLAGS y filtrarlas, es un gran BUG, en mi opinion.

El 3dnowext de AMD es genial, dado que incorporaba un cambio rapido de 387 a SIMD y se nota, lo que hace que usar mmx y mmxext en procesadores de AMD sea muy recomendable, dudo que lo sea tanto en los de intel, a menos que lo hayan copiado y no hayan dicho nada.

Ah! A todo esto, mis CFLAGS son en esta i686>

CFLAGS="-march=athlon-xp -O2 -pipe -fomit-frame-pointer"

Si alguien me cuenta como hacer pruebas con mencoder y povray las hare, no dispongo de mucho tiempo para aprender a hacerlas.

Acentos omitidos inintencionadamente, con xorg-server y hal tengo el teclado en ingles estadounidense irremediablemente en esta i686.......   que ascazo!!!!  :Evil or Very Mad: 

----------

