Está en la página 1de 5

Computación paralela

La computación paralela es una técnica de programación en la que muchas


instrucciones se ejecutan simultáneamente. Se basa en el principio de que los problemas
grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma
concurrente ("en paralelo"). Existen varios tipos de computación paralela: paralelismo a
nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de
tareas. Durante muchos años, la computación paralela se ha aplicado en la computación
de altas prestaciones, pero el interés en ella ha aumentado en los últimos años debido a
las restricciones físicas que impiden el escalado en frecuencia. La computación paralela
se ha convertido en el paradigma dominante en la arquitectura de computadores,
principalmente en los procesadores multinúcleo. Sin embargo, recientemente, el
consumo de energía de los ordenadores paralelos se ha convertido en una preocupación.

Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite
su hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de
procesamiento en una sola máquina, mientras que los clusters, los MPP y los grids
emplean varios ordenadores para trabajar en la misma tarea.

Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales
porque la concurrencia introduce nuevos tipos de errores de software, siendo las
condiciones de carrera los más comunes. La comunicación y la sincronización entre las
diferentes subtareas son típicamente las grandes barreras para conseguir un buen
rendimiento de los programas paralelos. El incremento de velocidad que consigue un
programa como resultado de la paralelización viene dado por la ley de Amdahl.

Antecedentes
El software se ha orientado tradicionalmente hacia la computación en serie. Para
resolver un problema, se construye un algoritmo y se implementa en un flujo de
instrucciones en serie. Estas instrucciones se ejecutan en la unidad central de
procesamiento de un ordenador. En el momento en el que una instrucción se termina, se
ejecuta la siguiente.

La computación paralela emplea elementos de procesamiento múltiple simultáneamente


para resolver un problema. Esto se logra dividiendo el problema en partes
independientes de tal manera que cada elemento de procesamiento pueda ejecutar su
parte del algoritmo a la misma vez que los demás. Los elementos de procesamiento
pueden ser diversos e incluir recursos tales como un único ordenador con muchos
procesadores, varios ordenadores en red, hardware especializado o una combinación de
los anteriores.5
Computación en paralelo
Con la llegada de la tecnología VLSI en la que el tamaño de los procesadores es casi
infinitesimal, es natural pensar en un futuro ordenador compuesto por miles de tales
procesadores trabajando en paralelo para resolver un solo problema. Aunque todavía no
se han construido muchos computadores de proposito general de este tipo, hay
proyectos dirigidos en esa dirección (ver Rumelhart 1986 y Dierstein 1987). Esto ha
motivado el desarrollo de una nueva rama en el campo de la complejidad algoritmica: la
teoría de la computación en paralelo a gran escala, en la que el número de procesadores
está acotado por un parámetro (H es por Hardware) de la misma forma que el
espacio está acotado por en la teoría de la complejidad secuencial. Generalmente
es un polinomio fijado.

Un gran número de modelos de computación en paralelo han sido propuestos (ver Cook
1981 para una relación de ellos), entre los que destacan dos modelos alternativos. El
primero es la clase de los modelos de memoria compartida, en la que un gran número de
procesadores se comunican via una memoria de acceso aleatorio que tienen en común.
Para este modelo se han desarrollado numerosos algoritmos. Si embargo, la teoría
matemática de estos modelos no es muy satisfactoria porque se dejan muchos detalles
sin determinar: ¿Como se resuelven los conflictos de lectura y escritura en la memoria
común? ¿Qué operaciones básicas se permiten a cada procesador?, etc..

La otra alternativa es el modelo presentado por Borodin (1977), en el que un


computador en paralelo es una familia uniforme de circuitos Booleanos
acíclicos, tales que tiene n entradas y así tiene en cuenta las entradas de longitud n.
Entonces es simplemente el número de puertas en y es la profundidad del
circuito (la longitud del camino mas largo desde una entrada hasta una salida).

Afortunadamente para la teoría, los valores de y de no son muy diferentes


entre los distintos modelos de computación en paralelo. En particular, hay un hecho
interesante que es verdad en todos estos modelos; que fué probado en primer lugar por
Pratt y Stockmeyer para un modelo en particular en 1974 y fué llamada la "tesis de la
computación en paralelo" en general. Esta tesis es:

un problema se puede resolver con tiempo polinomial en una máquina en paralelo


(con ilimitado) si y solo si se puede resolver con espacio polinomial
por una máquina secuencial (con tiempo ilimitado).
Una cuestión básica en la computación en paralelo es: ¿qué problemas se pueden
resolver sustancialmente de forma más rápida usando muchos procesadores en lugar de
solo uno? N. Pippenger (1979) formalizó esta cuestión definiendo la clase (ahora

llamada NC) de problemas con solución ultrarápida) [ ] sobre una


máquina de computación en paralelo y con una cantidad de Hardware no reducida [

] . Afortunadamente la clase NC no depende del modelo de computación


en paralelo elegido. Es fácil comprobar que NC es un subconjunto de la clase FP de las
funciones computables secuencialmente en tiempo polinomial. La cuestión quedaría
formalizada como: ¿Qué problemas de FP están también en NC? Pudiera ocurrir que
NC = FP, pero todos los indicios indican lo contrario. Dado que no se sabe como probar
que una función está en FP y no en NC, lo que se hace es probar que f es de espacio-
logarítmica completa para FP. Esto es análogo a probar que un problema es NP-
completo, y tiene el efecto práctico de evitar los intentos de encontrar algoritmos
paralelos ultrarapidos para f. La razón es que si f es espacio-logarítmica completa para
FP y f está en NC, entonces FP = NC, lo que sería una gran sorpresa.

No se han obtenido demasiados progresos en la clasificación de los problemas de FP


como problemas de NC o problemas espacio-logarítmico completos. El primer ejemplo
de problema espacio-logarítmica completa para FP fué presentado por Cook en 1973,
aunque el resultado no se establece como un resultado de completitud. Poco tiempo
después, Jones y Laaser (1977) definieron la noción de completitud y dieron cinco
ejemplos. El ejemplo más simple de problema completo en FP es el problema del valor
en un circuito: dado un circuito Booleano junto con valores para sus entradas, encontrar
el valor de la salida.

Entre los problemas conocidos de la clase NC están las cuatro operaciones aritméticas
sobre números binarios (+,-,*,/), la ordenación, la conexión de un grafo, las operaciones
con matrices (multiplicación, inversa, determinante y rango), el máximo común divisor
entre polinomios y los lenguajes de contexto libre.

El problema más interesante de FP para el que no se sabe si está en NC o es completo es


el de encontrar el máximo común divisor de dos enteros. Muchos otros tampoco han
sido clasificados, como el del matching maximal o del clique maximal de un grafo.
Computación Multinúcleo:
¿Demasiado Lejos?
Las supercomputadoras, potentísimas máquinas que sólo están a disposición
de unos pocos y privilegiados centros de investigación, pronto tendrán un
rendimiento aún mayor, aprovechando más y más la computación multinúcleo.
El mismo concepto de computación podría dotar de capacidades asombrosas a
los ordenadores domésticos; pero hay un problema: el software de uso común,
no sirve, y habrá que empezar desde cero, quizá incluso con nuevos lenguajes
de programación.
A pesar de la promesa de un poder computacional casi inimaginable, incluso
los expertos se preguntan si los diseñadores de hardware han ido demasiado
lejos esta vez, tan por delante de muchos creadores de software, que la nueva
capacidad de computación podría no ser aprovechable salvo en unos pocos
ámbitos muy especializados.

La computación en paralelo ha sido una capacidad limitada a las personas que


trabajan con supercomputadoras. Esto está cambiando, ya que ahora los nuevos
ordenadores de escritorio e incluso los portátiles ya pueden disponer de capacidades
de computación multinúcleo. Los expertos en informática de alto rendimiento han
aprendido a tratar con estas arquitecturas, pero representan sólo una fracción de los
programadores. Cuando, en un futuro no muy lejano, los chips multinúcleo desplacen
a los normales, todos los programadores tendrán que adaptarse a ellos.
Incluso en la informática de alto rendimiento hay áreas que todavía no están listas
para las nuevas máquinas de computación multinúcleo.
En la industria, gran parte de los programas de alto rendimiento no son de estructura
en paralelo. Estas corporaciones han invertido mucho tiempo y dinero en su software,
y están angustiadas por lo que se les avecina: Tener que rediseñar su software desde
la raíz misma.
Los ordenadores de computación multinúcleo tienen más de una unidad de
procesamiento o CPU, y cada CPU en esencia es un PC individual. En los próximos
años, los nuevos ordenadores de alto rendimiento tendrán docenas o centenares de
PCs en un chip, ofreciendo inmensas mejoras en su rendimiento comparados con las
máquinas actuales más rápidas.
Si queremos que los ordenadores sigan incrementando su rendimiento como lo han
hecho durante las décadas anteriores, se requieren ordenadores de computación
multinúcleo. Este incremento en el rendimiento es necesario para una amplia variedad
de tareas de alta tecnología, como los estudios con modelos informáticos del clima, el
diseño de armamento militar, o el descubrimiento de medicamentos y sus mejoras en
la fabricación, por mencionar algunas de las más dispares de esas labores.
Pero los ordenadores multinúcleo requieren de programas de computación en paralelo
porque cada PC, o núcleo, debe obtener su propio juego de instrucciones.
Actualmente, la mayor parte del software disponible no está escrito para aprovechar la
computación multinúcleo.

Pese a todas las cosas asombrosas que realizan los ordenadores, sólo hacen una cosa cada vez.
Las instrucciones se entregan en un solo archivo, como un paquete entregado a través de una
única puerta. El procesamiento en paralelo abre más puertas, pero también crea desafíos
debido a los múltiples paquetes o conjuntos de instrucciones requeridos.
"Imagínese que usted tiene cuatro pelotas de golf y necesita acertar en cuatro blancos. Si
dispusiera de cuatro personas y cada una lanzase una pelota al mismo tiempo, podrían hacerlo
más rápido que una sola persona", explica Faisal Saied, investigador en Tecnologías de la
Información, de la Universidad Purdue, quien estudia este problema. "Esa es la ventaja de la
computación multinúcleo. Múltiples PCs, todos en el mismo chip, y cada PC trabajando en uno
de múltiples aspectos de una tarea. La dificultad está en dividir la tarea en esos múltiples
componentes".
El ingeniero Steve Kirsch, de la empresa Raytheon Systems, cree que la computación
multinúcleo nos presenta tanto el sueño de la capacidad de cómputo infinita como la pesadilla
de programarla. "La verdadera lección aquí es que las industrias del hardware y del software
tienen que prestarse atención mutua", sentencia Kirsch. "Sus futuros están entrelazados de un
modo tan estrecho como no lo han estado en mucho tiempo, y eso cambiará el modo en que
ambos sectores industriales tendrán que actuar.
Los fabricantes de chips Intel, IBM, AMD y Sun han anunciado que pronto comenzarán a
producir chips multinúcleo. En febrero, Intel hizo públicos detalles sobre una investigación
acerca de un chip con 80 núcleos, un chip del tamaño de una uña que tiene nada menos que la
misma potencia de procesamiento que en 1996 sólo podía lograrse con una supercomputadora
de gran tamaño consumiendo mil veces más electricidad.
Tal como Kirsch advierte, a pesar del magnífico potencial de la computación multinúcleo, ésta
representa un problema para compañías e investigadores que dependen de software escrito
previamente y que ha sido depurado y mejorado concienzudamente en una evolución de años
o incluso varias décadas. Continuar aprovechando esta herencia de software, puede, por tanto,
llegar a ser imposible.
E incluso, la programación en paralelo para ordenadores multinúcleo puede llegar a requerir
nuevos lenguajes de programación.
Algunos procuran prepararse con antelación para ese gran desafío, y así un grupo de
investigadores de la Universidad Purdue, trabajando estrechamente con expertos de la
industria, está desarrollando nuevos modelos de programación y herramientas que
simplifiquen la tarea de escribir programas para una plataforma de este tipo.

También podría gustarte