@NOLDOR:
¿Como podría un juego aprovechar varios núcleos, o varios procesadores?No tengo ni idea de como se programan los juegos ni de que hacen pero ¿No sería viable ejecutar varios threads, uno en cada procesador, que vayan haciendo diferentes cálculos y se combinen hasta conseguir el resultado final?
Si no se hace, yo creo que es porque la grán parte de carga de proceso de un juego se la llevan los gráficos, y eso lo hace casi todo una tarjeta gráfica, no el procesador. Entonces ven sin sentido molestarse en programar el juego de tal manera que aproveche varios núcleos para los cálculos que le corresponde simplemente porque con un solo núcleo actual ya consigues la potencia que te hace falta de sobra.
Es solo una suposición.
Saludos.
PD: Tampoco veo factible la comparación "Si hago un juego para una PS3 que tiene varios cores Cell, tiene que ser muy facil portarlo a un PC multicore" sencillamente porque hablamos de arquitecturas diferentes y probablemente esos procesadores Cell harán grán parte del trabajo gráfico de una GPU, cosa que no hace un microprocesador x86.
Es muy muy dificil. A mi se me ocurren 2 maneras:
1. Ejecutar cada "motor" en un procesador (IA, fisica, y casi deja de contar
(de los graficos se encarga la grafica, aunque tal vez de la ordenacion de poligonos y diversas optimizaciones…) ).
2. Partir los "motores" segun "procesos", de tal manera que puedas ejecutar un trozo del motor en cada procesador (a grosso modo: cpu1 calcula la velocidad del jugador, cpu2 la de un misil, etc.).
La primera tiene mas desventajas que ventajas, porque las dependencias son brutales. Si por lo que sea el procesador dedicado a la fisica, por ejemplo, tuviera mucho trabajo, el otro procesador estaria esperando a que finalizara y se desaprovecharia. Ademas, se intentaria que los procesos estuvieran equilibrados y "costasen" una cantidad de tiempo de procesador similar, cosa muy dificil. Y para rematar es dificil repartir los procesos, y si tienes muchos procesadores no podrias utilizarlos...
La segunda la veo mas "factible". "Simplemente" se tienen que repartir los calculos entre n procesadores y sincronizarlos (esperar a que vayan acabando), aunque esto no siempre es posible. Por que? Sencillo, si tenemos dos objetos que se mueven y los calculan 2 procesadores distintos que pasara si van a chocar?? Pues que habra incoherencias, porque cada procesador movera su objeto, vera que hay colision, y lo "arreglara". Ahi se podria solucionar de diversas maneras supongo, pero no es inmediato (tal vez una cola de objetos en colision que se compruebe que sean unicos para que no aparezca la misma 2 veces y se resuelvan al final del proceso...).
Pero vamos, es dificil porque suele haber muchas dependencias.
Ahora eso si, hay que tener en cuenta que no es lo mismo pensar en programar para un solo nucleo que para varios.
No tiene nada que ver la arquitectura, pero a nivel de programacion eso "lo notas poco". Quiero decir que aunque lo que puedas calcular con cada procesador de la ps3 no este orientado a lo mismo (y la verdad no se a que os referis con calculos de gpu, no tengo ni idea de que puede ser que calcule una cpu mejor que una gpu en cuanto a graficos, otra cosa seria "preparar los graficos" con optimizaciones, recortes, ordenacion de poligonos etc etc) que cada procesador de un pc, hay conceptos muy parecidos (partir los procesos en cachos y que cada procesador se encargue de una parte, para finalmente sincronizarlos, la teoria es la misma).
Yo tambien dudo que sea facil, pero estoy convencido que es mas facil migrar un juego a pc y aprovechar varios cores desde ps3 (un juego que utilice sus diversos cores, se entiende), que no desde otra consola monocore...