Publicada la Parallel.FX CTP (Junio 2008)

Ya está disponible para descarga la última versión de Parallel.FX (Community Technology Preview junio 2008). Como suele ser costumbre, incluye bastantes mejoras sobre su predecesora, así como incluir nuevos fallos y problemas.

Ejemplo con Parallel.FX

Parallel.FX es una librería (actualmente en Community Technology Preview, o sea, que ni siquiera es beta) diseñada para facilitar el aprovechamiento de los procesadores multicore-manycore a los programadores.

La programación paralela realmente supone un cambio en la forma de pensar de los programadores, especialmente si hay que gestionar los hilos manualmente, por eso esta librería intenta facilitar enormemente esa tarea.

Por ello, y en primer lugar, tenemos que instalarnos el .NET framework 3.5 (el último que hay actualmente), que trae por defecto la instalación de Visual Studio 2008 (Descarga disponible por ELMS, cortesía del servicio de informática) y a continuación, hay que instalar la librería Parallel.FX desde el centro de descargas de Microsoft. Está en inglés, pero eso no es una sorpresa (Parallel.FX ni siquiera es beta, recordáis?)

Para este ejemplo, vamos a necesitar únicamente una aplicación Windows, en la que vamos a utilizar tan sólo dos botones y un richTextBox. De manera opcional se puede añadir un ProgressBar cuyo estilo sea «marquee» para comprobar cuándo y cómo se queda congelada la aplicación al ejecutar los bucles de prueba.

parallel.example (Visual Studio, C#)

Una vez tenemos la ventana con los botones y el richtextbox hay que agregar una referencia a System.Threading en el proyecto. El motivo para esto es que deseamos utilizar la versión de System.Threading que nos proporciona  Parallel.FX en vez de utilizar la que trae .NET 3.5. Sabremos que utilizamos la versión correcta porque en las propiedades de la referencia aparece la siguiente descripción: Parallel Extensions to the .NET Framework.

Una de las herramientas más útiles proporcionadas por Parallel.FX es el bucle Parallel.For, cuya sintaxis se muestra en el código incluído al artículo.

Una vez hecho todo eso (Instalar .NET 3.5, Instalar Parallel.FX, Crear nuevo proyecto win32, Añadir los botones y el richtextbox a la ventana, Agregar referencia a System.Threading) tan sólo queda reemplazar el código fuente predeterminado de la ventana por el siguiente:

//Ejemplo que usa Parallel.FX
using System;
using System.Windows.Forms;
using System.Threading;
//Aplicación paralela Ejemplo
namespace Parallel.Example
{
  public partial class Form1 : Form
  {
  public Form1()
  {
  InitializeComponent();
  }
  //Bucle normal
  private void button1_Click(object sender, EventArgs e)
  {
  DateTime t1 = DateTime.Now;
  //Hacer 20 veces
  for (int i = 0; i < 20; i++)   {   //Dormir 100 milisegundos   Thread.Sleep(100);   }   DateTime t2 = DateTime.Now;   //Calcular tiempo transcurrido   TimeSpan t = new TimeSpan(t2.Ticks - t1.Ticks);   this.richTextBox1.Text = t.ToString();   }   //Bucle con Parallel.FX   private void button2_Click(object sender, EventArgs e)   {   DateTime t1 = DateTime.Now;   //Hacer 20 veces   System.Threading.Parallel.For(0, 20, delegate(int i)   {   //Dormir 100 milisegundos   Thread.Sleep(100);   });   DateTime t2 = DateTime.Now;   //Calcular tiempo transcurrido   TimeSpan t = new TimeSpan(t2.Ticks - t1.Ticks);   this.richTextBox1.Text = t.ToString();   }   } } [/sourcecode] Como anticipo, indico que el primer bucle (el no paralelo) tardará alrededor de dos segundos en finalizar, mientras el bucle que usa el Parallel.For tardará alrededor de 1 segundo en un procesador dual core (o medio segundo en un quad core). Como curiosidad, veis que Parallel.For es en realidad una función con tres parámetros: Inicio, Fin y Función_a_Ejecutar (El delegate).