Soporte para multi-core en Bennu

Started by Windgate, November 14, 2009, 12:48:26 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Muy ambicioso tema saco, con 2D no he tenido problemas reales, pero con Bennu 3D empiezo a notar la necesidad de un soporte para aprovechar los múltiples núcleos de la CPU.

Aquí os dejo una captura de un videojuego en 3D en el que abuso, literalmente, del número de procesos activos. Bennu rinde como un verdadero campeón, pero observo que la ejecución se resiente por CPU, ya que sólo aprovecha el primer núcleo. Un soporte para multi-core en Bennu 3D sería una auténtica BOMBA ya que veo que Bennu 3D, con sus pequeños defectos promete y mucho:


¿En qué podríamos ayudar para un soporte multi-core? Utilicen sus perversas mentes amigos ;)

EDIT: Aquí la imagen completa en la que se observa que solo se hace uso del primer núcleo: http://trinit.es/images/Bennugd/Sugerencias/extremo.jpg
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Mira en los datos a la izquierda de la captura, creo que eran 1000vs1000 droides, cada uno con su modelo de arma y los disparos en sí son modelos también.

2 FPS :'(

No se bloquea, pero el FPS se resiente muchísimo, es por carga de CPU, eso lo tengo claro. He intentado reducir operaciones al máximo, pero me sigue faltando mi segundo núcleo.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

no se si usas los 2 nucleos... quizas si estas usando aceleracion 3d, entonces puede estar usando los 2 nucleos...

no lo se, lo puedo ejecutarlo en linux...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Al hacer Ctrl+Alt+Supr monitorizo los 2 núcleos y veo que tengo uno saturado y el otro en desuso... No, no usa los 2 núcleos, puedes verlo en la captura.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

#5
No puedes probar en Vista o 7 y seguir los pasos de esta página a ver si funciona:

http://xp3ctr0.blogspot.com/2009/01/usar-los-2-nucleos-del-procesador-para.html


Parece que tambien da en XP:

http://www.taringa.net/posts/info/3109826/usar-los-2-nucleos-del-procesador-dual-core.html

Lo que me estoy imaginado es que sea sólo para que el SO lo aproveche y no las aplicaciones ejecutadas en el.

Drumpi

Esto es llevarlo todo al extremo más extremo, y pensar que yo creí pasarme al meter un mapa de 100x80 tiles/proceso ;D
Ahí, más que la CPU habría que pensar en hacer uso de la aceleración 3D si no lo está haciendo ya (estoy hecho un lio con la Bennu3D), y a partir de ahí ya pensar en multicore, porque no es lo mismo pasar a usar un motor 3d acelerado por HW que dividir la programación en varios cores y sincronizarlo.

Lo cierto es que Bennu se presta fácilmente al uso multicore, dada su naturaleza pseudo-concurrente (y que en tiempo de render se puede usar el segundo core para el sonido), pero a ver quien es el guapo que se pone a ello.

Por PC no es, porque he visto una burrada como el "Rome: total war" moviendo tropecientos modelos 3D en máquinas de menos de 2GHz. Supongo que hay que pensar que Bennu aun es interpretado y que va por soft...
Pero vamos, que para necesitar un maquinón para nuestros juegos ya hay que echarle narices ;D Wind, al final vas a necesitar imágenes 2d pre-renderizadas para mover eso :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Había pensado usar modelos de mucha menos densidad poligonal para los planos más alejados o algo así... Es una pena lo de la eficiencia pero va mejorando la cosa.

En cuanto a echar una mano en el multicore, yo no tengo idea del tema, sorry :(
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

l1nk3rn3l

#8
encontre una forma de usar las nuevas tecnologias sin modificar tanto el codigo y sin
tantos cambios y 100% portable a tecnologias donde no existe Multicore..

se llama OpenMP
http://es.wikipedia.org/wiki/OpenMP

y actualmente esta incluido en el compilador GCC que es el que usa bennu,
solo usar directivas pragma dentro del codigo y no afecta nada si la plataforma no lo usa...
http://openmp.org/

lo usare probandolo con Bennu3d a ver como me va..

es mas facil de usar que usar los hilos de la SDL...

es 100% libre y es muy facil de usar.. a ver si alguien se anima a modificar las partes criticas de bennu
como los loops en el motor los for ,,,, etc etc..

ejemplillo basico:
http://rajorshi.net/blog/2009/05/programming-for-multicore-introduction-openmp-gcc/

y las nuevas versiones con OpenMP y GCC
http://gcc.gnu.org/projects/gomp/

Tutorial:
https://computing.llnl.gov/tutorials/openMP/

ejemplos:
http://openmp.org/examples/Using-OpenMP-Examples-Distr.zip

Windgate

Oh, me hablaron de OpenMP en la carrera pero no le dí importancia, gracias por el aporte l1nk, lo tendré en cuenta.

EDIT: Veo las estadísticas de uso de las CPU y alucino :o karma++, tiene muy buena pinta para tirar por ahí
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

osk


SplinterGU

cuidado, bennu no puede trabajar con multithread, por lo menos no la parte de la maquina virtual... necesita tener una sincronizacion especifica...

despues de la version 1.0 final, esta pensado pasar varias cosas a multithread... como el motor grafico... y alguna otra cosa mas... pero no se puede la maquina virtual depende de la serializacion para funcionar correctamente...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Oh...

En mi caso simplemente tengo una matriz de IDs de proceso que chequear y retornar de ella un ID específico, eso lo veo "threadable"... De todas formas bueno es saberlo.

También se me había pasado por la cabeza tener un fichero que asocie IDs de proceso a IDs de objetivo, y que desde Bennu se consulte ese fichero mientras que desde otro programa en C se lea/escriba para que se detecten los objetivos usando threads... Incluso había pensado en CUDA...

¿Lo veis una chifladura total? Tened en cuenta que el tiempo de cálculo de objetivos consume como un 30% de CPU y pasarlo a otro programa dejaría más recursos para la parte gráfica :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

cuidado con eso... mientras la matriz sea de solo lectura no hay problemas con threads, cuando la matriz pasa a tener escritura ahi tenes que usar semaforos y de todo... pero el multithread no es ese el problema con bennu... el problema es que los procesos necesitan ejecutarse en un orden X, necesitan que un proceso ejecute antes que otro y tenga sus datos confiables... tanto a nivel usuario como a nivel interno, obviamente que todo esto puede ser semaforizado, pero eso es una complicacion muy grande para muchos...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

hay cosas que actualmente son multithread, como una funcion de carga de fpg y otra de map si mal no recuerdo, se pueden pasar algunas cosas a multithread, pero hay que tener cuidado con eso... no todos manejan el concepto bien, y para la mayoria que viene de div, fenix, esto puede ser muy duro...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2