sábado, 5 de diciembre de 2009

C-Proyecto ARPA

Tras el hecho de que mi reputacion como matematico haya quedado en posicion dudosa tras el debate abierto con el tema de las puertas, voy a intentar recuperar algo de prestigio con una de mis investigaciones.
Para el Master ISIA, dentro de la asignatura de Programacion distribuida para la web, propuse al profesor realizar un trabajo de implementacion de un programa basado en esto.
Cuando estuvo explicando el Doctor Nebro en que consistia, me vino rapidamente a la cabeza retomar un antiguo proyecto que tenia y que, con la programacion distribuida, podría solucionar ciertas partes de uso de memoria y falta de recursos.
Alla por el año 2002, fue cuando empece a calcular las reducciones de primitivas con un programa de mi creacion. En sus inicios, consegui llegar a reducir unos 24 o 25 numeros a 3 aciertos dejando el ordenador encendido algunos dias, debido a que necesitaba mucho tiempo de computo.
Años despues, sobre el 2006, le agregue que pudiera guardar las combinaciones parciales encontradas. Asi podia apagar el ordenador y hacer computos de varios dias fraccionando el tiempo. Tambien se podia hacer que 2 ordenadores hicieran calculos parciales y despues unirlos a mano, aunque era un poco cutre. Asi consegui llegar a 32 numeros reducidos al 3. Los 33 numeros fueron imposibles de conseguir porque el ordenador se quedaba sin memoria.
La programacion distribuida consiste en usar varios equipos (incluso cientos), dejando un equipo como Maestro y el resto como Esclavos encargados de realizar las tareas masivas de calculo. Este hecho es capaz de conseguir reducir el tiempo de computos que llevarian incluso años, a solo un par de dias o menos.
El problema de memoria tampoco desapareceria en mi programa de reduccion de primitivas, asi que tendria que reconvertir el codigo para no almacenar tantos datos en memoria.
Asi ha surgido el proyecto ARPA. Son las siglas de Aplicacion de Reduccion de Primitivas (la ultima A no significa nada aun, pero quedaba bien para el nombre). Llevo una semana creando codigo y borrandolo porque nunca habia hecho una aplicacion del tipo servidor-cliente, asi que me ha costado muchisimo.
Empece con un ejemplo que obtuve en la web, pero no servia a mis propositos (me di cuenta 2 dias despues). Despues encontre un programa de chat que hizo un compañero de empresa cuando entramos de becarios y fui adaptandolo poco a poco hasta lograr algo que me contento. Pase unos 3 dias hasta que descubri que debía usar la tecnica de enviar mensajes "privados" de los esclavos al maestro y viceversa en vez de mensajes generales para posterior identificacion de los destinatarios.
El siguiente paso era el codigo de reduccion en si. Debia distribuir la informacion entre los esclavos de una manera idonea, comprobar que los paquetes llegaran de vuelta y usar los esclavos que estuvieran ociosos. Esto ha sido otros 3 dias mas. Pequeños despistes y un codigo bastante complicado han hecho que tuviese que esforzarme mucho hasta conseguir mi proposito.
Hoy ha sido el gran dia y por fin he conseguido usar la comunicacion entre 2 ordenadores via web. He usado mi PC de sobremesa como maestro y he puesto hasta 6 esclavos dentro de mi portatil para probar diferentes configuraciones.
Tengo que optimizar 3 cosas para conseguir buenos resultados:
-El tamaño de los paquetes enviados, para reducir el tiempo de comunicacion entre ordenadores.
-El numero de esclavos, que en combinaciones de poco tamaño resultan insignificantes pero que lograran algo bueno cuando empiece a probar las grandes.
-La formula de valoracion de las combinaciones. He empezado con una elemental, pero creo que puede ser optimizable.
De momento esto es todo. Seguire informando de los avances. Tras solucionar este problema de implementacion que me obsesionaba, creo que podre volver a los entrenos mañana.

No hay comentarios:

Publicar un comentario