MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...


Objetivo: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Bueno, la idea es la siguiente:

En los ordenadores actuales, es frecuente que tengamos varios nucleos. En gambas, en principio, solo usamos un nucleo para ejecutar nuestras aplicaciones ya que no existen los hilos (por ahora)....

Se me ha ocurrido usar procesos en gambas, para que simultaneamente se puedan ejecutar subprogramas y que resuelvan un problema de calculo en menos de tiempo.

Os lo explico con un sencillo ejemplo:
Supongamos que tenemos que realizar esta operación: 345+234*34 -345+2*34 , y nuestro ordenador tiene 2 nucleos

Si lo resolvieramos en un programa realizado en gambas, solo usariamos un microprocesador, y calcularia la expresion 345+234*34 -345+2*34 el solito, tardando "T "tiempo (por no poner una cantidad).

Ahora bien, si dividimos la operacion inicial en dos partes. 1: (345+234*34) y 2: ( -345+2*34 ), y cada una de ellas la ejecuta un nucleo de nuestro ordenador, en teoria se tardaria "T/2" tiempo (la mitad del tiempo inicial mas o menos)

Evidentemente para un calculo sencillo, como el del ejemplo, no merece la pena... Pero para calculos de arboles (minimax, poda alphabeta) o algoritmos que sea posible trabajarlos de manera "paralela", el ahorro de tiempo puede ser considerable...

Si quereis ver el ejemplo completo: enlace

Saludos

Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Hmmm! Tengo mis dudas sobre si eso pueda ser rentable... Me refiero al hecho de manejar archivos para realizar las operaciones por separado, puesto que los tiempos de lectura/escritura pueden suponer más que las operaciones en sí.

Además ¿qué pasa cuando un fichero se ejecuta y devuelve el resultado antes que el otro? Que tendrás que esperar a recibir dicho resultado para poder operar. No lo sé, pero no veo el beneficio con el ejemplo que propones.

Aquí tienes un ejemplo del uso del nuevo componente gb.task (creo que ya no es un componente y ahora forma parte del intérprete) para manejar "tareas" o procesos en paralelo, que es lo más parecido al multiproceso. Este ejemplo fue publicado en la lista de correo de gambas por Ivan Kern, así que los créditos van para él.

Intenta reescribir tu programita usando este componente y evitarás tener que recurrir a escribir y leer ficheros en disco.

Documentación oficial sobre el componente: http://www.gambasdoc.org/help/comp/gb/task?en&v3

Ahí va el adjunto:


Saludos

Perfil MP  
Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
jguardon:

Citar:
Me refiero al hecho de manejar archivos para realizar las operaciones por separado, puesto que los tiempos de lectura/escritura pueden suponer más que las operaciones en sí..... no veo el beneficio con el ejemplo que propones ....


Para lo que voy a usarlo es para el juego de damas, para repartir el arbol de posibles movimientos entre los microprocesadores, haré pruebas contabilizando el tiempo que se tarda en una u otra forma... ya te cuento los resultados que obtengo..

Citar:
un ejemplo del uso del nuevo componente gb.task (creo que ya no es un componente y ahora forma parte del intérprete) para manejar "tareas" o procesos en paralelo, que es lo más parecido al multiproceso

Estupendo... lo estudio a ver si me vale...

Gracias

Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Esto, ¿ y como demuestra el multi proceso en el ejemplo de TaskTest ?.
Me parece que no lo llego a ver.

Yo solo veo un numero, luego un espacio en blanco, hasta el infinito..
¿ Sera que faltaba des-comentar las lineas comentadas ?.

Saludos

Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Buscando multiproceso encontré:

http://es.wikipedia.org/wiki/Multiprocesamiento

Y una explicación que no encontré la fuente.Parece que hay dos tipos:

Citar:

Existen dos tipos de multiproceso, el asimétrico y el simétrico. En el asimétrico hay un procesador (maestro) en el cual se ejecuta el sistema operativo y los demás (esclavos) donde se ejecutan las demás tareas. La ventaja de éste es que al aumentar más procesadores se tiene que hacer un cambio mínimo y fácil para el manejo de éstos y en general se eliminan muchos problemas de integridad de datos. La gran desventaja es que al haber sólo una copia del sistema operativo en un sólo procesador (maestro) cuando este procesador falla todo el sistema falla porque todos los recursos que son manejados por el sistema operativo no pueden ser accesados.

En el simétrico se ejecuta el sistema operativo - o una gran parte de él - en cualquiera de los procesadores disponibles y todos ellos tienen acceso a los recursos a menos que cada recurso sea asignado a un procesador específico. Aunque es mas difícil de implementar tiene muchas más ventajas. Primero, este tipo de sistemas tienden a ser más eficientes porque las tareas tanto del sistema operativo como de los usuarios pueden ser distribuídas en forma balanceada a todos los procesadores. Debido a que las demandas del sistema operativo pueden ser repartidas a todos los procesadores, el tiempo de inactividad de un procesador mientras otro está sobretrabajando es mínimo. Segunda, si un procesador falla, es posible que sus tareas sean repartidas entre los demás y no es necesario que todo el sistema sea parado o que falle el sistema. Y finalmente, la portabilidad del sistema es mayor debido a que no sigue la arquitectura de mastrer/slave. NT implementa este modelo de multiproceso.


¿ Y esto no es lo mas parecido a multi-tarea ?. Ademas del sistema OS/2 Warp no he llegado a ver "concretamente" una multi-tarea real.
Habría que ser bastante meticuloso para apreciar la ejecución. Solo lo vi en un ejemplo en OS/2 en el cual eran dos aplicaciones que se ejecutaban
a la vez, cada una emitía un beep. Estas aplicaciones estaban hechas en shell.No había un atraso ni un adelanto,no había un atropello.
Cada beep se sincronizaba como un reloj a gran velocidad.

En aquel tiempo, el del win 3.1 al ejecutar aplicaciones a la vez, se atropellaban.lo quera conocido como multi-tarea preventiva.
Algunos ejemplos que hice en Linux, que casi se las pueda llamar un poco de excentricidad.. (ah, la ciencia)..

Buscando demostraciones de aplicaciones que no se atropellaban o ver una multi-tarea. Coloque varias ejecuciones de un misma aplicación de Mame32
con diferentes recreativas antiguas, cada una en una ventana, así hasta un gran grupo.Aparentemente se ejecutaban correctamente
todas a la vez. Casi recuerda a las pruebas del laboratorio de Q, ahora que estamos con los 50 años de James Bond.

Después de ver tanto árcade ejecutándose a al vez , pues que si no es casi, se puede decir que tenemos una multi-tarea buena en Linux.

Parece que ya oigo a alguien decir..varias instancias de..y es que esto de la POO, mola.

Saludos.

última edición por Shell el Jueves, 01 Noviembre 2012, 20:43; editado 1 vez
Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Shell escribió: [Ver mensaje]
Esto, ¿ y como demuestra el multi proceso en el ejemplo de TaskTest ?.
Me parece que no lo llego a ver.

Yo solo veo un numero, luego un espacio en blanco, hasta el infinito..
¿ Sera que faltaba des-comentar las lineas comentadas ?.

Saludos


Pues instanciando cualquier clase que herede de Task. Puedes crear varias clases que cada una haga algo diferente y lanzarlas todas a la vez desde un botón, por ejemplo, para probar o realizar mediciones o "benchmarks". Pero hay que tener en cuenta un par de detalles que se explican en la documentación.

Evidentemente el ejemplo solo ilustra lo más básico.

Saludos

Perfil MP  
Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Lo que seguro hay que tener en cuenta es:

  • Existe un costo de tiempo y memoria por "forkear" al intérprete.
  • Hay un costo asociado a la comunicación entre procesos (serialización/des-serialización).
  • Hay un sistema básico de bloqueo que no escala. Es decir, es difícil sincronizar los procesos (siempre es difícil no me refiero a que sólo sea difícil en gambas) y uno puede suponer que la complejidad de la sincronización de los procesos será, al menos, proporcional a la complejidad esencial de la aplicación.
  • ¿Qué pasa si en el sub Main de la tarea se llama a métodos de otras clases creados desde y fuera de la tarea?


Respecto de la última cuestión el punto es ¿los métodos que se invoquen desde la tarea estarán sincronizados con ella?

Objetivo: Re: MultiProceso: Usando Procesos Para Realizar Calculos Paralelos...
Revisando el tema de hilos en gambas, subo de nuevo el ejemplo de jguardon que no sale usando su enlace...


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.0956s (PHP: -21% SQL: 121%)
Consultas SQL: 21 - Debug off - GZIP Activado