Computación distribuida

El proceso de resolver una determinada tarea por parte de un computador, tal y como tradicionalmente se entiende, es un proceso secuencial. Disponemos de una lista de instrucciones y datos que el computador va ejecutando a medida que los lee. La figura siguiente muestra un ejemplo simplificado.

Los computadores pueden funcionar en multitarea, en el sentido de que pueden gestionar (ejecutar) varias tareas no relacionadas a la vez, pero puede ser una multitarea ficticia, puesto que si se dispone de un solo microprocesador las distintas tareas tienen que irse turnando entre sí. Aparentemente se han resuelto los dos problemas de manera simultánea pero el tiempo que se ha tardado ha sido la suma del tiempo de los dos problemas, como vemos representado en la figura siguiente.

En los últimos años se han hecho populares los microprocesadores con múltiples núcleos (o cores), tales como los Intel Dual Core o la nueva familia Core Ix en los que disponemos no ya de uno sino de dos, cuatro o incluso ocho procesadores que comparten la memoria y son capaces de trabajar en paralelo. Su presencia se ha hecho normal en nuestros escritorios hoy en día. En un sistema con dos o más procesadores podemos efectuar una verdadera multitarea, ya que es posible ejecutar simultáneamente más de una instrucción, como mostramos en la figura siguiente.

Surge entonces la idea de aprovechar esta capacidad para resolver problemas de una manera más rápida, empleando la computación en paralelo. En ella no queremos ejecutar varios problemas dispares de forma simultánea (como en el ejemplo anterior) sino que buscamos ejecutar un problema concreto lo más rápido posible. Esto se consigue mediante la paralelización, proceso por el cual pasamos de ejecutar un determinado programa secuencialmente a ejecutar varias partes del mismo a la vez, para dar el resultado final una vez se han calculado cada una de las partes (representado en la figura siguiente.

Hay que indicar que no todos los problemas son susceptibles de ejecutarse paralelamente sino que depende de su naturaleza (fundamentalmente que el resultado final dependa de resultados parciales no relacionados entre sí). Además, si un problema requiere un tiempo T para resolverse con un solo procesador, no significa que vaya a pasar a requerir T/2 con dos procesadores, T/3 con tres procesadores, etc. En la práctica, al ejecutar un programa en paralelo unas partes acaban antes que otras, o unas dependen de otras, y el proceso de sincronizar y comunicar los resultados parciales tiene un coste. Por ello llega un momento en que no se obtiene mejora aunque añadamos más procesadores.

A pesar de esos inconvenientes, los computadores dotados de múltiples procesadores trabajando en paralelo son la solución preferida a la hora de afrontar tareas que requieren gran cantidad de cálculo. Esto es así porque un único procesador no puede aumentar su velocidad ni memoria indefinidamente, mientras que nada nos impide (en teoría) unir tantos procesadores como queramos para que funcionen de forma simultánea formando un único supercomputador. Un buen ejemplo es el supercomputador Mare Nostrum de Barcelona, uno de los más potentes del mundo, que internamente está formado por 10.240 procesadores que funcionan en paralelo.

Generalizando este concepto nos encontramos con la llamada computación distribuida. En ella nuestro supercomputador es un computador virtual en el sentido de que no tiene existencia física como un ente concreto, sino que cada uno de sus procesadores (o nodos) es en sí mismo un computador independiente, estando todos ellos conectados entre sí a través de una red. Así, cada nodo recibe una tarea o problema, la lleva a cabo (resuelve), y devuelve el resultado (solución). Al final la suma del resultado de todas las tareas constituyen la solución al problema completo original.

Dentro de la computación distribuida identificamos la llamada computación GRID, que permite utilizar recursos de computación y almacenamiento dispersos de una forma homogénea y coherente. En estos sistemas cada uno de los procesadores es, no ya un computador independiente, sino que además los computadores son heterogéneos, con procesadores, memoria e incluso sistemas operativos distintos unos de otros, pero gracias a la implantación de una capa software denominada “middleware” podemos cohesionar (de alguna manera) y gestionar los recursos de cada equipo y su utilización conjunta.

Por último nos encontramos con la muy popular en los últimos años computación voluntaria (o Desktop Grid), en la que los computadores que forman la red de computación tienen la particularidad de ser anónimos, y se unen a ella de forma voluntaria y altruista.

Leave a Reply

You must be logged in to post a comment.