Fractal revisitado

Este año, había escrito una demostración de generación de fractal, usando DSS/CCR, ver:

Distributed Agents and Fractals using DSS/VPL
Agentes Distribuidos usando DSS/VPL

Ahora, estoy explorando pasar el ejemplo a ejecución en paralelo, usando, entre otras tecnologías, Task Parallel Library, threads, o MPI (Message Passing Interface). Antes de pasar a programar esas nuevas versiones, añadí a mi proyecto Google code ajcodekatas, una aplicación base, un WinForm que dibuja un fractal, usando un solo thread, el mismo del proceso de la GUI:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/FractalExample

 

Tiene una librería de clases, con las clases principales, y un proyecto WinForm, que usa un objeto Calculator para calcular un Sector del fractal. Un fragmento de la invocación:

 

private void Calculate() { Bitmap bitmap = new Bitmap(pcbFractal.Width, pcbFractal.Height); pcbFractal.Image = bitmap; pcbFractal.Refresh(); realWidth = realDelta * pcbFractal.Width; imgHeight = imgDelta * pcbFractal.Height; realMin = realCenter - realWidth / 2; imgMin = imgCenter - imgHeight / 2; int width = pcbFractal.Width; int height = pcbFractal.Height; SectorInfo sectorinfo = new SectorInfo() { FromX = 0, FromY = 0, Width = width, Height = height, RealMinimum = realMin, ImgMinimum = imgMin, Delta = realDelta, MaxIterations = colors.Length, MaxValue = 4 }; Calculator calculator = new Calculator(); Sector sector = calculator.CalculateSector(sectorinfo); this.DrawValues(sector.FromX, sector.FromY, sector.Width, sector.Height, sector.Values); }

Ejecutando el proyecto Fractal.GUI, y haciendo click en el botón de Calculate, obtenemos:



Podemos arrastrar el mouse, seleccionando una zona. Al soltarlo, una nueva imagen es generada. Podemos cambiar los colores, que son generados al azar:




Próximos pasos


Quiero añadir en las nuevas versiones:


- Una versión multithread


- Una versión en paralelo usando Task Parallel Library


- Una versión distribuida (MPI.NET? AjMessages?)


Parte de la aplicación la vamos a mostrar en el webcast de hoy:


Webcast de desarrollo con Windows HPC Server 2008


Si son impacientes, puede ver este excelente tutorial, que implementa una aplicación fractal usando HPC 2008, y también con las tecnologías que mencioné arriba, está listo para descargar con código desde:


Learning Parallel Programming — from shared-memory multi-threading to distributed-memory multi-processing

Sugerencias, comentarios, bienvenidos!


Angel “Java” Lopez
http://www.ajlopez.com/en
http://twitter.com/ajlopez

This entry was posted in 1389, 3463, 5374. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>