Psmaniaco escribió:Pues no,no estoy muy puesto en la programacion en C,respecto a programar en x86 usando MMX/SSE/3DNOW pues no,nunca he compilado nada,de hay que no me aclare¿Que me recomiendas hacer?
Un saludo.
vale, ok, empezaremos por el principio:
quizas tu estas acostumbrado a programar procesadores escalares o superescalares (los x86, los PC), en los cuales estas acostumbrado a una algoritmia del tipo 'compara un valor, y dependiendo del resultado, haz una cosa u otra'. bien, eso, aunque valido desde el punto de vista de los procesadores escalares y superescalares, no es del todo valido en los procesadores VECTORIALES como los SPU. los procesadores escalares (como el PPU/PPE del CELL o los pentium/athlon y toda la gama x86 y la amplia mayoria de las CPU actuales) son buenos manejando una algoritmia del tipo 'pregunta/decision' como he expuesto antes, y esta algoritmia es buena a la hora de resolver la gran mayoria de problemas de computacion actuales, sin embargo flaquean, y mucho, cuando se requiere un flujo ('stream', vete acostumbrando a esta palabreja) constante de datos de entrada y salida, como por ejemplo, efectos en un video en tiempo real, o animacion 3D (que es generacion de un mundo 3D en tiempo real, o sea, tomando un 'stream' de entrada como es la arquitectura 3D de una escena, generar un 'stream' de salida como es un frame de video).
cuando los procesadores escalares 'no llegan', se usan dispositivos especializados, como por ejemplo, DSPs (digital signal procesor, las tarjetas de sonido son DSP especializados con un DAC, DigitalAnalogConverter, que tomando un 'stream' de entrada como datos digitales de sonido, ofrecen un 'stream' de salida ya sea estereofonico, 5.1 o lo que sea) o GPUs (para el 3D antes hablado) que no son mas que DSPs MUY ESPECIALIZADAS.
¿cual es el problema de los DSP? pues que son dispositivos hardware que no admiten 'reprogramacion', o sea, que si en algun momento, quisieramos hacer algo con ese DSP para lo que se hubiese pensado, no nos valdria, tendriamos que usar otro DSP (que seria otro dispositivo hardware)
aqui entran en juego los procesadores VECTORIALES, y las extensiones vectoriales a los procesadores escalares. los procesadores vectoriales son buenos tomando una serie de datos 'stream' de entrada y ofreciendo un 'stream' de salida constante. por ejemplo, las extensiones MMX, son capaces de multiplicar dos 'streams' de 8 numeros entre si y guardar el resultado en otro stream de 8 numeros en unos ciclos de reloj (normalmente menos de 50, incluyendo cargas internas), mientras que en un procesador escalar, dicho proceso llevaria unos 500 ciclos, incluyendo cargas, computo y retiradas de resultados. como puedes comprobar, en calculo bruto, son las extensiones MMX/SSE/3DNOW/Altivec las que debes usar, puesto que usar el calculo escalar para eso es 'desperdiciar el tiempo'.
por supuesto, esta mejora de rendimiento no es gratuita: a cambio de ofrecer esa potencia bruta, las extensiones vectoriales, o los procesadores vectoriales en si, NO OFRECEN INSTRUCCIONES DE CONTROL DE SALTO, o sea, no te posibilitan los habituales 'if/then/else', o si te los ofrecen, son muy limitados y con MUCHISIMA PENALIZACION. recuerda que la algoritmia decisoria no es su fuerte, su fuerte es el tratamiento bruto de datos, por lo cual, un salto condicional echa al traste gran parte de sus caches internas y ya no digamos si no tienen ejecucion out-of-order y el pipeline es largo (wikipedia es tu amiga, aprenderas mucho).
en fin, despues del ladrillo, solo decirte que el CELL se compone de un PPE con dos hilos de ejecucion (al estilo de los P4 hiperthreading) y extensiones vectoriales (Altivec/velocity engine/VMX) y 8 SPE (en linux PS3 solo son accesibles 6 de ellos por diversos motivos) que son procesadores absolutamente VECTORIALES con una unidad de salto condicional muy rudimentaria (tan rudimentaria, que muchas veces, en saltos/decisiones complejos, el compilador 'hace un apaño' con el PPE para que sea el PPE el que realice la decision y envie el resultado de vuelta al SPE)
esa es la clase por hoy chicos, en futuras entregas, 'porque los SPU son mis amigos' y 'no sin mis vectores'...
PD: ¿alguien se encarga de meterlo al wiki?