¿Wiimote en PS3?

Evidork escribió:Pero vosotros creeis que ps3 tiene potencia para emular a Wii ? [cartman]




[qmparto] [qmparto] [qmparto]
Evidork escribió:Pero vosotros creeis que ps3 tiene potencia para emular a Wii ? [cartman]

La cuestión es, ¿ps3 tendra juegos para jugar con el wiimote?
No se para que rollo de si se podra emular o no, si en cuestion de 1 años o dos como mucho Sony ya habra sacado su sonymote (que por supuesto llevarian 10 o 12 años desarrollando en secreto hasta ahora)
Beriaru escribió:Como ahora tengo un poco de tiempo, vamos a explicar como funciona la ejecucion en tiempo real, y la importancia de un buen compilador.

Cuando programas un pedazo de codigo, lo que haces es escribir instrucciones y comandos uno detras de otro. La programacion es absolutamente secuencial. Empieza por un lado, y termina por el otro.

Incluso si arrancasemos un debugger para ver como nuestro procesador ejecuta nuestro codigo una vez compilado, veriamos que se trata de una sucesion -secuencial- de comandos de ensamblador.

Eso es la verdad para los antiguos 8086, 286, 386 o incluso el 486.

Con el Pentium y el PowerPC (no se si los antiguos 68000 de Motorola tambien) las cosas empezaron a cambiar. La 'secuencialidad' ya no interesa. Los nuevos micros son capaces de ejecutar varias instrucciones por ciclo, y limitarse a ejecutar una es perder rendimiento.

Ahora viene lo complicado: si tienes que sumar dos cantidades y multiplicar dicha suma por otra cantidad... no puedes hacer ambas operaciones simultaneamente!

La simultaneidad solo se da cuando dos o mas operaciones son independientes entre si. Para ver si realmente esas operaciones son independientes, nuestros procesadores llevan una unidad que 'predice' unos cuantos ciclos por delante de la linea de ejecucion si una operacion afectara a otra o no.

Fallar en una prediccion significa descartar la cola de codigo y datos que esta esperando a entrar en el procesador, y volver a empezar desde el error. Intel descubrio demasiado tarde las limitaciones de los Pentium4 basados en Netburst. Sus laaaargas colas de proceso se iban al garete cuando la unidad de prediccion se equivocaba... y eso implicaba una penalizacion de ciclos demasiado grande.

Como evitar esos 'errores'? Con un compilador inteligente. Un compilador que, a la hora de compilar, sin prisas, con tiempo, con la posibilidad de leer y releer el codigo, de ir hacia delante y hacia atras en el codigo, pueda examinar que operaciones son y no son independientes, ordenandolas para que lleguen al procesador de una manera ordenada y optimizada.

Parece complicado? Pues aun estamos hablando de un solo procesador!!

Cuando hablamos de multiprocesador las cosas se complican exponencialmente. ya no hablamos de operaciones simultaneas... sino de PROCESOS simultaneos.

En un ordenador de sobremesa ejecutando programas de oficina la cosa esta sencilla: el Word es un proceso, el Firefox es otro, y ambos no tienen mucho que ver entre si. Por lo tanto pueden estar ejecutandose en procesadores diferentes con toda confianza.

En un juego las cosas se ponen peliagudas. La musica es independiente de los graficos? El motor de emulacion de fisica es independiente del interfaz de usuario?

Cuando un proceso es independiente de otro?

Esta vez ningun modulo en nuestros procesadores nos ayudara. Un monoprocesador puede 'predecir' con mayor o menor fortuna las operaciones independientes en un codigo no optimizado... pero en un sistema multiprocesadoro esta optimizado en la compilacion, o se correra en un solo procesador con la consiguiente merma en rendimiento.

El compilador ha de examinar con lupa todo el proyecto, marcando que procesos son independientes, cuales dependen de quien, cuando, como y por que, separando hilos y evaluando que carga tendra cada uno de los procesadores para que no tengan que esperar parados el resultado de uno de ellos sobrecargado de trabajo.

Todo eso ha de hacerse en el momento de la compilacion, y cuanto mejor se haga, mejor sera el rendimiento del procesador.

Por eso, cuando los años pasan y las consolas van llegando al final de su vida antes del reemplazo, los juegos cada vez son mejores. Una parte es achacable a los programadores y la experiencia, pero en su mayor parte es achacable a los entornos de desarrollo y compiladores que cada vez hacen mejor su trabajo. Donde en un primer momento solo eran capaces de mover una escena con 3 millones de poligonos, al final son capaz de hacer bailar con soltura a 5 (por decir alguna cifra).

Y ahora llega el problema de la emulacion.

Primero: Tienes un binario. Olvidate del codigo fuente.
Segundo: Esta complilado para otra arquitectura, con toda su optimizacion para esa arquitectura en cuestion.

Esa optimizacion... olvidate. La has perdido. Acabas de perder entre un 10 y un 30% del rendimiento. Esa perdida viene de perder la optimizacion original, y la incapacidad de optimizar el codigo para el procesador que va a ejecutar la emulacion.

Y ahora llega la gracia: si tienes un sistema multiprocesador?

Pues si, si la optimizacion en compilacion no contemplaba la separacion de procesos para multiprocesador, el emulador no la podra implementar. No, Niet, LaJodimosCarlinos.

Y que quiere decir eso?

Eso quiere decir, ni mas ni menos, que se ejecutara en modo monoprocesador.

O hablando de Wii y PS3, eso quiere decir que el Cell no podra usar ninguna de sus 8 unidades para ejecutar el proceso de emulacion. Solo podra usar el PPC cortito, simplon y bastante mermado que es su unidad de control.

Y ahi no hay chicha para mover los juegos de la Wii, y menos sin la optimizacion especifica para el micro (aunque sean PPC, el de la PS3 no tiene la misma cantidad de pipelines que el de la Wii).

Espero que haya quedado claro smile_:-p

PD. La mayoria de lo que he escrito lo he hecho de memoria. Si hay algun dato especifico erroneo, mea culpa.


Directo del foro de Wii, para el que quiera discutir "con tecnicismos". Yo, desde luego, ni idea. Pero parece convincente.
Juan_Garcia escribió:una tarjeta grafica que supongo que sera similar a las que montan los PC con tecnologia mas antigua
[plas] [plas] [plas] [plas] Bestial!!!! Festival del humor!!! Se le llena la boca señores!!! Hola me llamo Juan y hablo por hablar jajajaajajaja [plas] [plas]


EDIT: Vais a oir mucho está palabra a partir de ahora PA-TEN-TE
Imagen


fidillo escribió:La ignorancia es muy atrevida:
http://www.elotrolado.net/showthread.php?s=&threadid=664764

Si va por mi, he añadido la explicación.
rethen escribió:
Directo del foro de Wii, para el que quiera discutir "con tecnicismos". Yo, desde luego, ni idea. Pero parece convincente.

Creo que ese no sabe mucho de dynarec...
rethen escribió:
Directo del foro de Wii, para el que quiera discutir "con tecnicismos". Yo, desde luego, ni idea. Pero parece convincente.


Tio, el que escribió eso si tiene bastantes conocimientos de hardware y demás, pero o lo ha entendido mal o intenta engañar a la gente... A ver, para emular una consola en un procesador normal, esté se divide virtualemente para hacer la funcion de la gpu u la cpu simultaneamente... En la ps3 lo único que deberían hacer es dividir esos procesos en los núcleos del cell, logrando un rendimiento bastante bueno, si se cree que solo se puede utilizar el nucleo principial es que no conoce la programación...
Voy a mandarle un MP, que es interesante el tema...... a ver si se pasa por aquí.
Uno:

Buscame un proyecto de dinarec que convierta un proceso compilado para monoproceso en multiproceso (no solo SMP), obteniendo al menos un 25% del redimiento original (si es que siquiera funciona...).

Es mas, ve a los forums de MAME y pide un emulador multiproceso para los nuevos Core, ya veras que risa.

No vas a necesitar cerrar la ventana del navegador. De lo potente del BAN se cerrara sola.

Dos:

Coger codigo multiproceso y ejecutarlo en un monoprocesador es trivial.

La inversa no.

Asi que emular una consola virtualizando CPU y GPU en un procesador es lo mas facil del problema.

Coger un codigo compilado para monoproceso y separarlo en procesos paralelos para las unidades del Cell es virtualmente imposible.

Recompilar codigo para SMP (Simmetric Multi-Process) ya es una tarea de chinos. Y hablamos de 2 CPU's. El Cell tiene una unidad de control y 8 unidades esclavas. Pa cagarse.

En resumen:

Un 486 es el minimo comun denominador en x86 (lo seria con mas razon el 386 si no careciese de copro matematico).

Ejecutara codigo x86 siepre a la misma velocidad, le des perlas o melones.

Cuanto mas avanzas en la evolucion de los procesadores, mas se 'especializan', y mas dependen de esa 'especializacion' para mantener su rendimiento.

El maximo grado de 'especializacion' es la aparicion de multicores, cada uno con su 'especializacion' en optimizacion de codigo.

Para el Cell vas a necesitar un codigo capaz de separarse en 8 procesos simetricos, con una carga de trabajo similar para que no tengan que esperar 7 a uno sobrecargado, y cada uno de ellos optimizado para esas unidades.

El simple hecho de programar esa bestia es un ejercicio de equilibrismo, admitido por los programadores que estan lidiando con el Cell. Y es CODIGO FUENTE!
Que sí, que sólo los extraterrestres pueden programar para el Cell [alien]

pd: y cómo te van a banear de la pág. de MAME por preguntar por multihilo por dios...

Saludos.
Te estas rayando un poco con el asunto.

Si existe compatibilidad binaria entre los procesadores de la Wii y el PPU de la PS3 el PPU se sobrara para "emular" la CPU de la Wii (no estas emulando nada realmente). Si no existe habria que ver las diferencias, en caso de ser completamente disitinto seria directamente imposible salvo que recompilaras ejecutable a ejecutable (algo extremadamente complicado si no sabes exactamente como es cada procesador y aun sabiendolo requeriria muchisimo tiempo si el procesador de la Wii no es algo estandar).

El problema insalvable es la GPU, es casi totalmente imposible emularla en los SPUs y cualquier cosa requeriria conocerse completamente su funcionamiento interno que dista de ser simple y no se parece al de las graficas de PC.

Por cierto Beriaru te estas confundiendo sobre como funciona la ejecución fuera de orden, las CPU saben exactamente las dependencias entre instrucciónes antes de ejecutarlas (comprueban si una instruccion va a usar registros que otra que no esta terminada va a escribir) el problema son los saltos de ejecución, no se sabe que se tiene que ejecutar despues de una instruccion de salto hasta que esta se ejecuta y esto se solucciona "prediciendo" cual es pero a veces se equivoca con un coste proporcional a la longitud del pipeline.

Otra cosa los multiprocesos en las consolas se controlan por software y por lo tanto se podrian dividir entre procesadores durante la emulación aunque podria requerir modificar el kernel o sistema operativo de la consola para hacerlo en vez de directamente emularlo (mientras que funcionen los mecanismo de control software bien todo ira bien sincronizado, antiguamente se usaban numeros de ciclos o otros factores hardware para la sincronia pero eso es extremadamente problematico y se prohibe hacerlo a los desarrolladores de juegos para que algun pequeño cambio en una version de consola no rompa el juego).
Si vas a los foros de mame a preguntar por una versión para dual core no se reirán de tí. Te dirán que eso haría que mame fuera menos portable, supondría mucho esfuerzo, y la mejora de velocidad seguramente no sería demasiada. Igual te banean por repetir el tema, pero no por el tema en sí.

Creo que estás confundiendo la virtualización con la emulación. Virtualizar un procesador usando varios suena a cuasi-imposible.

Emular es diferente. Ahora un procesador simula en software el comportamiento de todos los componentes del sistema emulado. La idea es que los distintas cores del cell se encarguen de emular (no virtualizar) los distintos componentes de la consola emulada (el procesador, el chip de sonido, de I/O o lo que tenga). Según se estandaricen los pcs con doble core, veremos como muchos emuladores los utilizan. De hecho el pcsx2 ya lo hace.

saludos
La PPU de la PS3 es bastante cortita. Confia en la potencia de calculo de sus 8 unidades mas que en la suya propia. Por ello es necesario añadir una capa de virtualizacion: La PPU a secas no puede mover un binario para la Wii.

Y las SPU no utilizan una memoria compartida, lo que implica que threads dependientes exigiran tareas de sincronizacion constantes. Lo cual consumira mas ciclos que el propio trabajo ejecutado.

Ya no entro en discutir la posibilidad de la emulacion de la GPU. Emular la CPU, aunque tengan compatibilidad binaria, es practicamente imposible por las diferencias en arquitectura.

Y el tema del MAME... es que estan hasta los compiladores de que la pregunta salga una y otra, y otra, y otra vez.

Esta hasta en el faq de MAME: no es, y no sera multithread. Punto pelota.
Beriaru escribió:. Emular la CPU, aunque tengan compatibilidad binaria, es practicamente imposible por las diferencias en arquitectura.

Tanto broadway como cell se basan en PPC core.La arquitectura es prácticamente la misma, cambia la microarquitectura.
Beriaru escribió:La PPU de la PS3 es bastante cortita. Confia en la potencia de calculo de sus 8 unidades mas que en la suya propia. Por ello es necesario añadir una capa de virtualizacion: La PPU a secas no puede mover un binario para la Wii.

La PPU sera "cortita" pero es capaz de ejecutar codigo PPC64 (que no esta optimizado/compilado especificamente para su arquitectura interna) a la misma velocidade que un G5 a 1.6Hz aproximadamente, es decir, el PPU de la PS3 ya es más potente (y grande) que la CPU de la Wii entera y si puede ejecutar su codigo binario directamente lo haria a velocidad más que sufciente.

Beriaru escribió:Y las SPU no utilizan una memoria compartida, lo que implica que threads dependientes exigiran tareas de sincronizacion constantes. Lo cual consumira mas ciclos que el propio trabajo ejecutado.

Los SPU pueden leer y escribir en la memoria principal, no necesitan más "sincronización" de la normal y esto no se que tiene que ver con el tema (la sincronización necesaria la marca extrictamente la tarea y nada más).

Beriaru escribió:Emular la CPU, aunque tengan compatibilidad binaria, es practicamente imposible por las diferencias en arquitectura.

Si tienes compativilidad binaria no estas emulando una CPU, es como decir que los Athlon emulan los Pentium Pro o algo similar. Si al mencionar la arqutiectura te refieres a el resto del sistema fuera de la CPU ya es otro asunto.

Beriaru escribió:Y el tema del MAME... es que estan hasta los compiladores de que la pregunta salga una y otra, y otra, y otra vez.

Esta hasta en el faq de MAME: no es, y no sera multithread. Punto pelota.

Que el MAME no sea multihilo/multiprocesador no significa que no sean posibles emuladores optimizados para usar multiples core, de hecho existen y hay uno de PS2 como ha mencionado Patxito.
deathkiller escribió:La PPU sera "cortita" pero es capaz de ejecutar codigo PPC64 (que no esta optimizado/compilado especificamente para su arquitectura interna) a la misma velocidade que un G5 a 1.6Hz aproximadamente, es decir, el PPU de la PS3 ya es más potente (y grande) que la CPU de la Wii entera y si puede ejecutar su codigo binario directamente lo haria a velocidad más que sufciente.
Eso es un mito que salio de esta pagina:
http://www.geekpatrol.ca/2006/11/playstation-3-performance/

Si examinas detalladamente el test, veras que el 'overall' si que es casi casi el mismo entre la PS3 y un G5 a 1,6GHz (105,2 frente a 106,9), pero los valores de los test individuales oscilan fuertemente.

De hecho, dos test dan un resultado cuasiaberrante: los dos de Stdlib Write.

Sin esos dos test, el resultado quedaria en 89,9 frente a 107,7

Se puede ver en los test de memoria como la PS3 machaca al G5 en escritura, pero toma una penalizacion bestial de la lectura. Pasa de un rendimiento del doble a la mitad.

Que nos dice todo esto?

Que el PPU del Cell es un procesador optimizado profundamente para su funcion. Todo aquello que se separe de esa funcion toma una penalizacion bastante fuerte. No es un procesador multifuncion como nos lo estan intentando vender.

Como ejemplo basico de esta afirmacion, puedes comprobar como la PS3 obtiene la MITAD de la puntuacion en una tarea tan simple como la descompresion JPEG.

De hecho, fijandose bien se pueden ver bastantes test en los que puntua la mitad...

Me temo que en el mejor de los casos y en una tarea compleja, con la escasa cantidad de memoria que dispone y obligada a paginar como una loca, y con la penalizacion bestial que le supone leer la memoria, podria rendir como mucho al nivel de un G4.

Aunque he de reconocer que pensaba que era bastante mas cortito...
deathkiller escribió:Los SPU pueden leer y escribir en la memoria principal, no necesitan más "sincronización" de la normal y esto no se que tiene que ver con el tema (la sincronización necesaria la marca extrictamente la tarea y nada más).
Si no recuerdo mal, los SPU tienen su propia memoria, y la utilizan para procesar su propio thread. Si bien pueden utilizar la memoria principal, su uso implica una penalizacion en ciclos y su uso esta limitado a copiar de su memoria a la principal o viceversa, lo que implicaria que no pueden trabajar directamente sobre la memoria principal (cosa muy logica si quieres prevenir corrupcion de datos).

Desgraciadamente no encuentro ahora mismo la especificacion donde lo comentaba, asi que hablo de memoria...
Beriaru escribió:Me temo que en el mejor de los casos y en una tarea compleja, con la escasa cantidad de memoria que dispone y obligada a paginar como una loca, y con la penalizacion bestial que le supone leer la memoria, podria rendir como mucho al nivel de un G4.

El asunto es el mismo mitad G5 > CPU Wii y estamos hablando del peor de los casos en cuanto a optimización.

Beriaru escribió:Aunque he de reconocer que pensaba que era bastante mas cortito...
Si no recuerdo mal, los SPU tienen su propia memoria, y la utilizan para procesar su propio thread. Si bien pueden utilizar la memoria principal, su uso implica una penalizacion en ciclos y su uso esta limitado a copiar de su memoria a la principal o viceversa, lo que implicaria que no pueden trabajar directamente sobre la memoria principal (cosa muy logica si quieres prevenir corrupcion de datos).

Desgraciadamente no encuentro ahora mismo la especificacion donde lo comentaba, asi que hablo de memoria...

Todas las CPUs tienen penalizacion por usar la memoria principal, la cache te "oculta" ese problema de cara al programador (hace lo mismo que se hace con los SPU, copiar datos de un lado a otro pero de manera automatica) pero no deja de existir. El PPU tiene acceso directo a la memoria pero si intenta usar un dato que no lo tiene la cache el proceso se puede quedar cientos de ciclos parado hasta que se lea (imaginate el daño en el rendimiento que proboca aunque solo pase el 2% de las veces que lees un dato).

La idea es programar para asegurarte que lo que vas a usar ya esta en la memoria del procesador o que mientras llega tengas otra cosa que hacer.
jotum escribió:Además un PC no esta basado en arquitectura PPC, como si lo están Wii,Cube y PS3


Será el tuyo porque yo tengo un PowerPc a 1500Mhz y va como Dios. [chulito]
deathkiller escribió:Todas las CPUs tienen penalizacion por usar la memoria principal, la cache te "oculta" ese problema de cara al programador (hace lo mismo que se hace con los SPU, copiar datos de un lado a otro pero de manera automatica) pero no deja de existir. El PPU tiene acceso directo a la memoria pero si intenta usar un dato que no lo tiene la cache el proceso se puede quedar cientos de ciclos parado hasta que se lea (imaginate el daño en el rendimiento que proboca aunque solo pase el 2% de las veces que lees un dato).

La idea es programar para asegurarte que lo que vas a usar ya esta en la memoria del procesador o que mientras llega tengas otra cosa que hacer.
O yo no me explico bien... o no estamos hablando de lo mismo.

Cuando hablo del problema de hacer una tarea monoproceso en un sistema multiproceso me referia exactamente a eso:

No tienes tareas diferenciadas en las que los datos sean independientes, por lo que si dos tareas tienen que acceder a una posicion de memoria y modificarla, la primera debera copiar la memoria a su cache, procesarla, volver a copiar el resultado a la memoria, y a continuacion sera la otra SPU la que podra acceder, copiar, procesar y devolver.

Tratamos de hacer un trabajo en paralelo, pero lo que conseguimos es un trabajo secuencial. Y no solo eso, sino que en un sistema monoprocesador habriamos obviado el paso de copiar el resultado a la memoria principal para que la otra SPU pudiese leerlo!

A ver si me hago entender. No hablo ni de emular ni de virtualizar. En algunas 'emulaciones' (aunque en este caso no seria una emulacion) hay trabajos que no se pueden partir. El engine de un juego de la Wii es un thread. Aunque intentemos poner una capa de emulacion entre el Cell y ese binario, sigue siendo un thread!

Ahora bien, habria que ver si la PPU es capaz de tirar por ello (antes estaba seguro de que no podria, ahora... tengo mis dudas).

Lo que esta claro es que la parte de la GPU de la Wii ya seria aun mas dificil de incarle el diente.
Beriaru escribió:O yo no me explico bien... o no estamos hablando de lo mismo.

Por eso lo primero que dije es que como funcionan internamente los SPU es un asunto aparte.
De todos modos, los problemas de los SPU's al acceder a memoria pueden no ser tan graves.Según leí en la página de IBM, uno de los 2 hilos que ejecuta cada SPE se encarga de manejar la memoria, pudiendo de esta manera tener un thread machacando números y otro thread peleándose con la memoria
jotum escribió:De todos modos, los problemas de los SPU's al acceder a memoria pueden no ser tan graves.Según leí en la página de IBM, uno de los 2 hilos que ejecuta cada SPE se encarga de manejar la memoria, pudiendo de esta manera tener un thread machacando números y otro thread peleándose con la memoria

Los SPU no tienen "dos hilos" puede que te estes confundiendo con las dos pipeline. Una es para instrucciones de calculo y otra para instrucciones de memoria pero instrucciones de memoria local.

Las trasferencias con la memoria principal se tratan mediante interrupuciones por lo que no tienes que quedarte "esperando datos" puedes ir haciendo calculos y cuando algo nuevo llegue te interrumpa un instante para hacer más peticiones en cadena si lo quieres, usas buffers para nunca tener que quedarte parado.
deathkiller escribió:Los SPU no tienen "dos hilos" puede que te estes confundiendo con las dos pipeline.

Correcto, hablaba de los pipelines.
Una cuestión,los SPU's no saben nada de predicción de saltos ni de planificación dinámica(se fian del complilador jeje).¿Pero la PPU?¿Es también confiada y deja que sea el compilador el que le facilite la vida?
72 respuestas
1, 2