You are on page 1of 21

Bus paralelo[editar]

Es un bus en el cual los datos son enviados por bytes al mismo tiempo, con la ayuda
de varias lneas que tienen funciones fijas. La cantidad de datos enviada es bastante
grande con una frecuencia moderada y es igual al ancho de los datos por la frecuencia
de funcionamiento. En los computadores ha sido usado de manera intensiva, desde el
bus del procesador, los buses de discos duros, tarjetas de expansin y de vdeo, hasta
las impresoras.

Diagrama de un Bus Backplane como extensin del bus de procesador.


El front-side bus de los procesadores Intel es un bus de este tipo y como cualquier bus
presenta unas funciones en lneas dedicadas:

Las lneas de direccin son las encargadas de indicar la posicin de memoria


o el dispositivo con el que se desea establecer comunicacin.

Las lneas de control son las encargadas de enviar seales de arbitraje entre
los dispositivos. Entre las ms importantes estn las lneas de interrupcin,
DMA y los indicadores de estado.

Las lneas de datos transmiten los bits de forma aleatoria de manera que por
lo general un bus tiene un ancho que es potencia de 2.

Un bus paralelo tiene conexiones fsicas complejas, pero la lgica es sencilla, que lo
hace til en sistemas con poco poder de cmputo. En los primeros
microcomputadores, el bus era simplemente la extensin del bus del procesador y los
dems integrados "escuchan" las lnea de direcciones, en espera de recibir
instrucciones. En el PC IBM original, el diseo del bus fue determinante a la hora de
elegir un procesador con I/O de 8 bits (Intel 8088), sobre uno de 16 (el 8086), porque
era posible usar hardware diseado para otros procesadores, abaratando el producto.
Historia[
Artculo principal: Historia de la computacin
Los orgenes del verdadero paralelismo (MIMD) se remontan a Federico Luigi,
Menabrea Conte y su Bosquejo de la mquina analtica inventada por Charles

Babbage.[44] [45] IBM introdujo el IBM 704 en 1954, a travs de un proyecto en el que
Gene Amdahl fue uno de los principales arquitectos. Se convirti en el primer equipo
disponible en el mercado que utilizaba comandos aritmticos de punto flotante
totalmente automticos.[46]
En abril de 1958, S. Gill (Ferranti) analiz la programacin en paralelo y la necesidad
de la ramificacin y la espera.[47] Tambin en 1958, los investigadores de IBM John
Cocke y Daniel Slotnick discutieron por primera vez el uso del paralelismo en
clculos numricos.[48] Burroughs Corporation present la D825 en 1962, un equipo
de cuatro procesadores que accede a un mximo de 16 mdulos de memoria a travs
de un conmutador de barras cruzadas.[49] En 1967, Amdahl y Slotnick publicaron un
debate sobre la viabilidad de procesamiento en paralelo en la Conferencia de la
Federacin Americana de Sociedades de Procesamiento de la Informacin.[48] Fue
durante este debate que la Ley de Amdahl fue acuada para definir los lmites de
aceleracin que se pueden alcanzar debido al paralelismo.
En 1969, la compaa estadounidense Honeywell introdujo su primer sistema
Multics, un sistema con multiprocesador simtrico capaz de ejecutar hasta ocho
procesadores en paralelo.[48] En 1970, C.mmp, un proyecto en la Universidad
Carnegie Mellon con varios procesadores, fue uno de los primeros
multiprocesadores con ms de unos pocos procesadores.[45] El primer bus con
conexin multi-procesador y cach espa fue el Synapse N+1 en el ao 1984.[45]
Las computadoras paralelas SIMD se remontan a la dcada de 1970. La motivacin
detrs de las primeras computadoras SIMD era amortizar el retardo de la compuerta
de la unidad de control del procesador en mltiples instrucciones.[50] En 1964,
Slotnick haba propuesto la construccin de un ordenador masivamente paralelo para
el Laboratorio Nacional Lawrence Livermore.[48] Su diseo fue financiado por la
Fuerza Area de los Estados Unidos, que fue el primer esfuerzo por lograr la
computacin en paralelo SIMD.[48] La clave de su diseo fue un paralelismo bastante
alto, con hasta 256 procesadores, lo que permiti que la mquina trabajara en grandes

conjuntos de datos en lo que ms tarde sera conocido como el procesamiento de


vectores. Sin embargo, ILLIAC IV fue llamado el ms infame de los
superordenadores, pues solo se haba completado una cuarta parte del proyecto.
Tard 11 aos, costando casi cuatro veces la estimacin original.[n. 8] [43] Cuando estaba
listo para ejecutar una aplicacin real por primera vez en 1976, fue superado por
supercomputadoras comerciales, como el Cray-1.

Computacion en paralelo
La computacin Paralela, es muy importante actualmente, al permitir mejorar la
velocidad en la solucin de grandes problemas, de modo que se mejora el
rendimiento de computo.

La supercomputadora Cray-2 fue la ms rpida del mundo desde 1985 hasta 1989.

La supercomputadora paralela Blue Gene de IBM.


La computacin paralela es una forma de cmputo en la que muchas instrucciones
se ejecutan simultneamente,1 operando sobre el principio de que problemas grandes,
a menudo se pueden dividir en unos ms pequeos, que luego son resueltos

simultneamente (en paralelo). Hay varias formas diferentes de computacin paralela:


paralelismo a nivel de bit, paralelismo a nivel de instruccin, paralelismo de datos y
paralelismo de tareas. El paralelismo se ha empleado durante muchos aos, sobre
todo en la computacin de altas prestaciones, pero el inters en ella ha crecido
ltimamente debido a las limitaciones fsicas que impiden el aumento de la
frecuencia.n. 1 2 Como el consumo de energa y por consiguiente la generacin de
calor de las computadoras constituye una preocupacin en los ltimos aos,n. 2 3 la
computacin en paralelo se ha convertido en el paradigma dominante en la
arquitectura de computadores, principalmente en forma de procesadores
multincleo.n. 3 4
Las computadoras paralelas pueden clasificarse segn el nivel de paralelismo que
admite su hardware: equipos con procesadores multincleo y multi-procesador que
tienen mltiples elementos de procesamiento dentro de una sola mquina y los
clsteres, MPPS y grids que utilizan varios equipos para trabajar en la misma tarea.
Muchas veces, para acelerar tareas especficas, se utilizan arquitecturas especializadas
de computacin en paralelo junto a procesadores tradicionales.
Los programas informticos paralelos son ms difciles de escribir que los
secuenciales,5 porque la concurrencia introduce nuevos tipos de errores de software,
siendo las condiciones de carrera los ms comunes. La comunicacin y
sincronizacin entre diferentes subtareas son algunos de los mayores obstculos para
obtener un buen rendimiento del programa paralelo.
La mxima aceleracin posible de un programa como resultado de la paralelizacin
se conoce como la ley de Amdahl.
Condiciones de carrera, exclusin mutua, sincronizacin, y desaceleracin
paralela[editar]
Las subtareas en un programa paralelo a menudo son llamadas hilos. Algunas
arquitecturas de computacin paralela utilizan versiones ms pequeas y ligeras de
hilos conocidas como hebras, mientras que otros utilizan versiones ms grandes
conocidos como procesos. Sin embargo, hilos es generalmente aceptado como un
trmino genrico para las subtareas. Los hilos a menudo tendrn que actualizar
algunas variables que se comparten entre ellos. Las instrucciones entre los dos
programas pueden entrelazarse en cualquier orden. Por ejemplo, considere el
siguiente programa:

Hilo A
Hilo B
1A: Lee variable V
1B: Lee variable V
2A: Aadir 1 a la variable V
2B: Aadir 1 a la variable V
3A: Escribir en la variable V
3B: Escribir en la variable V
Si la instruccin 1B se ejecuta entre 1A y 3A, o si la instruccin 1A se ejecuta entre
1B y 3B, el programa va a producir datos incorrectos. Esto se conoce como una
condicin de carrera. El programador debe utilizar un bloqueo (lock) para
proporcionar exclusin mutua. Un bloqueo es una construccin del lenguaje de
programacin que permite a un hilo de tomar el control de una variable y evitar que
otros hilos la lean o escriban, hasta que la variable est desbloqueado. El hilo que
mantiene el bloqueo es libre de ejecutar su seccin crtica la seccin de un
programa que requiere acceso exclusivo a alguna variable, y desbloquear los datos
cuando termine. Por lo tanto, para garantizar la correcta ejecucin del programa, el
programa anterior se puede reescribir usando bloqueos:
Hilo A
Hilo B
1A: Bloquear variable V
1B: Bloquear variable V
2A: Lee variable V
2B: Lee variable V
3A: Aadir 1 a la variable V
3B: Aadir 1 a la variable V
4A: Escribir en la variable V
4B: Escribir en la variable V
5A: Desbloquear variable V
5B: Desbloquear variable V
Un hilo bloquear con xito la variable V, mientras que el otro hilo no podr
continuar hasta que V se desbloquee. Esto garantiza la correcta ejecucin del
programa. Si bien los bloqueos son necesarios para asegurar la ejecucin correcta del
programa, pueden ralentizar en gran medida un programa.
Bloquear mltiples variables utilizando cerraduras no atmicas introduce la
posibilidad de que el programa alcance un bloqueo mutuo (deadlock). Un bloqueo
atmico bloquea mltiples variables a la vez, si no puede bloquearlas todas, no se
bloquea ninguna de ellas. Si hay dos hilos y cada uno necesita bloquear las mismas
dos variables utilizando cerraduras no atmicas, es posible que un hilo bloquee uno
de ellas y el otro bloquee la segunda variable. En tal caso se produce un bloqueo
mutuo donde ningn hilo puede completar la ejecucin.

Muchos programas paralelos requieren que sus subtareas acten en sincrona. Esto
requiere el uso de una barrera. Las barreras se implementan normalmente mediante
un bloqueo. Una clase de algoritmos, conocida como algoritmos libres de bloqueo y
libres de espera, evitan el uso de bloqueos y barreras. Sin embargo, este enfoque es
generalmente difcil de implementar y requiere estructuras de datos correctamente
diseadas.
No todas las paralelizaciones conllevan una aceleracin. Por lo general, mientras una
tarea se divida en cada vez ms hilos, estos hilos pasan una porcin cada vez mayor
de su tiempo comunicndose entre s. Eventualmente, la sobrecarga de comunicacin
domina el tiempo empleado para resolver el problema, y la paralelizacin adicional
dividir la carga de trabajo entre incluso ms hilos aumenta la cantidad de tiempo
requerido para terminar. Esto se conoce como desaceleracin paralela.
Paralelismo de grano fino, grano grueso y paralelismo vergonzoso[editar]
Las aplicaciones a menudo se clasifican segn la frecuencia con que sus subtareas se
sincronizan o comunican entre s. Una aplicacin muestra un paralelismo de grano
fino si sus subtareas deben comunicase muchas veces por segundo, se considera
paralelismo de grano grueso si no se comunican muchas veces por segundo, y es
vergonzosamente paralelo si nunca o casi nunca se tienen que comunicar.
Aplicaciones vergonzosamente paralelas son consideradas las ms fciles de
paralelizar.
Modelos de consistencia[editar]
Artculo principal: Consistencia de datos

Leslie Lamport defini por primera vez el concepto de consistencia


secuencial. Tambin es conocido por su trabajo en el desarrollo del software
LaTeX.
Los lenguajes de programacin en paralelo y computadoras paralelas deben tener un
modelo de consistencia de datos tambin conocido como un modelo de memoria
. El modelo de consistencia define reglas para las operaciones en la memoria del
ordenador y cmo se producen los resultados.
Uno de los primeros modelos de consistencia fue el modelo de consistencia
secuencial de Leslie Lamport. La consistencia secuencial es la propiedad de un
programa en la que su ejecucin en paralelo produce los mismos resultados que un
programa secuencial. Especficamente, es un programa secuencial consistente si ...
los resultados de una ejecucin son los mismos que se obtienen si las operaciones de
todos los procesadores son ejecutadas en un orden secuencial, y las operaciones de
cada procesador individual aparecen en esta secuencia en el orden especificado por el
programa.[16]
La memoria transaccional es un tipo de modelo de consistencia. La memoria
transaccional toma prestado de la teora de base de datos el concepto de transacciones
atmicas y las aplica a los accesos a memoria.
Matemticamente, estos modelos se pueden representar de varias maneras. Las Redes
de Petri, que se introdujeron en 1962 como tesis doctoral de Carl Adam Petri, fueron

un primer intento de codificar las reglas de los modelos de consistencia. Ms tarde


fueron creadas las arquitecturas de flujo de datos para implementar fsicamente las
ideas de la teora del flujo de datos. A principios de la dcada de 1970, los clculos de
procesos tales como la Comunicacin de Sistemas y Comunicacin de Procesos
Secuenciales se desarrollaron para permitir un razonamiento algebraico sobre
sistemas compuestos por elementos que interactan entre s. Adiciones ms recientes
a la familia de clculo de proceso, como el clculo-, han aadido la capacidad para
razonar acerca de las topologas dinmicas. Lgicas tales como la TLA+ de Lamport,
y modelos matemticos se han desarrollado para describir el comportamiento de
sistemas concurrentes.
Taxonoma de Flynn[editar]
Michael J. Flynn cre uno de los primeros sistemas de clasificacin de computadoras,
programas paralelos y secuenciales, ahora conocida como la taxonoma de Flynn.
Flynn clasifica los programas y computadoras atendiendo a si estn operando con uno
o varios conjuntos de instrucciones y si esas instrucciones se utilizan en una o varias
series de datos.
Instruccin individual
Instruccin mltiple
Datos individuales
SISD
MISD
Mltiples datos
SIMD
MIMD
La clasificacin instruccin-nica-dato-nico (SISD) es equivalente a un programa
totalmente secuencial. La clasificacin instruccin-nica-datos-mltiples (SIMD) es
anloga a hacer la misma operacin varias veces sobre un conjunto de datos grande.
Esto se hace comnmente en aplicaciones de procesamiento de seales.
Instrucciones-mltiples-dato-nico (MISD) es una clasificacin que rara vez se
utiliza. A pesar de que se disearon arquitecturas de computadoras en esta categora
como arreglos sistlicos, muy pocas aplicaciones se materializaron. Los
programas instrucciones-mltiples-datos-mltiples (MIMD) constituyen el tipo ms
comn de programas paralelos.

Segn David A. Patterson y John L. Hennessy, Algunas mquinas son hbridos de


estas categoras, por supuesto, este modelo clsico ha sobrevivido porque es simple,
fcil de entender, y da una buena primera aproximacin. Adems, es, tal vez por su
comprensibilidad, el esquema ms utilizado.[17]
Tipos de paralelismo[editar]
Paralelismo a nivel de bit[editar]
Desde el advenimiento de la integracin a gran escala (VLSI) como tecnologa de
fabricacin de chips de computadora en la dcada de 1970 hasta alrededor de 1986, la
aceleracin en la arquitectura de computadores se lograba en gran medida duplicando
el tamao de la palabra en la computadora, la cantidad de informacin que el
procesador puede manejar por ciclo.[18] El aumento del tamao de la palabra reduce el
nmero de instrucciones que el procesador debe ejecutar para realizar una operacin
en variables cuyos tamaos son mayores que la longitud de la palabra. Por ejemplo,
cuando un procesador de 8 bits debe sumar dos enteros de 16 bits, el procesador
primero debe adicionar los 8 bits de orden inferior de cada nmero entero con la
instruccin de adicin, a continuacin, aadir los 8 bits de orden superior utilizando
la instruccin de adicin con acarreo que tiene en cuenta el bit de acarreo de la
adicin de orden inferior, en este caso un procesador de 8 bits requiere dos
instrucciones para completar una sola operacin, en donde un procesador de 16 bits
necesita una sola instruccin para poder completarla.
Histricamente, los microprocesadores de 4 bits fueron sustituidos por unos de 8 bits,
luego de 16 bits y 32 bits, esta tendencia general lleg a su fin con la introduccin de
procesadores de 64 bits, lo que ha sido un estndar en la computacin de propsito
general durante la ltima dcada.
Paralelismo a nivel de instruccin[editar]

Un pipeline cannico de cinco etapas en una mquina RISC (IF = Pedido de


Instruccin, ID = Decodificacin de instruccin, EX = Ejecutar, MEM = Acceso
a la memoria, WB = Escritura)
Un programa de ordenador es, en esencia, una secuencia de instrucciones ejecutadas
por un procesador. Estas instrucciones pueden reordenarse y combinarse en grupos
que luego son ejecutadas en paralelo sin cambiar el resultado del programa. Esto se
conoce como paralelismo a nivel de instruccin. Los avances en el paralelismo a
nivel de instruccin dominaron la arquitectura de computadores desde mediados de
1980 hasta mediados de la dcada de 1990.[19]
Los procesadores modernos tienen ''pipeline'' de instrucciones de varias etapas. Cada
etapa en el pipeline corresponde a una accin diferente que el procesador realiza en la
instruccin correspondiente a la etapa; un procesador con un pipeline de N etapas
puede tener hasta n instrucciones diferentes en diferentes etapas de finalizacin. El
ejemplo cannico de un procesador segmentado es un procesador RISC, con cinco
etapas: pedir instruccin, decodificar, ejecutar, acceso a la memoria y escritura. El
procesador Pentium 4 tena un pipeline de 35 etapas.[20]

Un procesador superescalar con pipeline de cinco etapas, capaz de ejecutar


dos instrucciones por ciclo. Puede tener dos instrucciones en cada etapa del
pipeline, para un total de hasta 10 instrucciones (se muestra en verde)
ejecutadas simultneamente.
Adems del paralelismo a nivel de instruccin del pipelining, algunos procesadores
pueden ejecutar ms de una instruccin a la vez. Estos son conocidos como
procesadores superescalares. Las instrucciones pueden agruparse juntas slo si no hay

dependencia de datos entre ellas. El scoreboarding y el algoritmo de Tomasulo que


es similar a scoreboarding pero hace uso del renombre de registros son dos de las
tcnicas ms comunes para implementar la ejecucin fuera de orden y la
paralelizacin a nivel de instruccin.
Paralelismo de datos[editar]
Artculo principal: Paralelismo de datos
El paralelismo de datos es el paralelismo inherente en programas con ciclos, que se
centra en la distribucin de los datos entre los diferentes nodos computacionales que
deben tratarse en paralelo. La paralelizacin de ciclos conduce a menudo a
secuencias similares de operaciones no necesariamente idnticas o funciones que
se realizan en los elementos de una gran estructura de datos.[21] Muchas de las
aplicaciones cientficas y de ingeniera muestran paralelismo de datos.
Una dependencia de terminacin de ciclo es la dependencia de una iteracin de un
ciclo en la salida de una o ms iteraciones anteriores. Las dependencias de
terminacin de ciclo evitan la paralelizacin de ciclos. Por ejemplo, considere el
siguiente pseudocdigo que calcula los primeros nmeros de Fibonacci:
1:
PREV1 := 0
2:
PREV2 := 1
3:
do:
4:
CUR := PREV1 + PREV2
5:
PREV1 := PREV2
6:
PREV2 := CUR
7:
while (CUR < 10)
Este bucle no se puede paralelizar porque CUR depende de s mismo (PREV2) y de
PREV1, que se calculan en cada iteracin del bucle. Dado que cada iteracin depende
del resultado de la anterior, no se pueden realizar en paralelo. A medida que el tamao
de un problema se hace ms grande, la paralelizacin de datos disponible
generalmente tambin lo hace.[22]
Paralelismo de tareas[editar]
Artculo principal: Paralelismo de tareas

El paralelismo de tareas es la caracterstica de un programa paralelo en la que


clculos completamente diferentes se pueden realizar en cualquier conjunto igual o
diferente de datos.[21] Esto contrasta con el paralelismo de datos, donde se realiza el
mismo clculo en distintos o mismos grupos de datos. El paralelismo de tareas por lo
general no escala con el tamao de un problema.[22]
Hardware[editar]
Memoria y comunicacin[editar]
La memoria principal en un ordenador en paralelo puede ser compartida
compartida entre todos los elementos de procesamiento en un nico espacio de
direcciones, o distribuida cada elemento de procesamiento tiene su propio
espacio local de direcciones.[23] El trmino memoria distribuida se refiere al hecho
de que la memoria se distribuye lgicamente, pero a menudo implica que tambin se
distribuyen fsicamente. La memoria distribuida-compartida y la virtualizacin de
memoria combinan los dos enfoques, donde el procesador tiene su propia memoria
local y permite acceso a la memoria de los procesadores que no son locales. Los
accesos a la memoria local suelen ser ms rpidos que los accesos a memoria no
local.

Una vista lgica de una arquitectura con acceso a memoria no uniforme


(NUMA). Los procesadores en un directorio pueden acceder a la memoria de
su directorio con una menor latencia de la que pueden acceder a la memoria
del directorio de otro.
Las arquitecturas de ordenador en las que cada elemento de la memoria principal se
puede acceder con igual latencia y ancho de banda son conocidas como arquitecturas
de acceso uniforme a memoria (UMA). Tpicamente, slo se puede lograr con un

sistema de memoria compartida, donde la memoria no est distribuida fsicamente.


Un sistema que no tiene esta propiedad se conoce como arquitectura de acceso a
memoria no uniforme (NUMA). Los sistemas de memoria distribuidos tienen acceso
no uniforme a la memoria.
Los sistemas informticos suelen hacer uso de cachs, pequeos recuerdos rpidos
ubicados cerca del procesador que almacenan las copias temporales de los valores de
la memoria cercano, tanto en el sentido fsico y lgico. Los sistemas
computacionales paralelos tienen dificultades con las cachs y la posibilidad de una
ejecucin incorrecta del programa debido a que se puede almacenar el mismo valor
en ms de un lugar. Estos equipos requieren coherencia en la cach del sistema,
generalmente realizan un seguimiento de los valores almacenados en cach y
estratgicamente los eliminan, garantizando la correcta ejecucin del programa. Bus
sniffing es uno de los mtodos ms comunes para hacer el seguimiento de los valores
a los que se est accediendo. El diseo de grandes sistemas de coherencia cach y de
alto rendimiento es un problema muy difcil en arquitectura de computadores. Como
resultado, las arquitecturas de memoria compartida no son tan escalables como los
sistemas de memoria distribuida.[23]
La comunicacin procesador-procesador y procesador-memoria se puede
implementar en hardware de varias maneras: a travs de memoria compartida ya
sea multipuerto o multiplexado, un conmutador de barras cruzadas (crossbar
switch), un bus compartido o una red interconectada de una gran variedad de
topologas como estrella, anillo, rbol, hipercubo, hipercubo grueso un hipercubo
con ms de un procesador en un nodo, o de malla n-dimensional.
Las computadoras paralelas basadas en redes interconectadas deben tener algn tipo
de enrutamiento para permitir el paso de mensajes entre nodos que no estn
conectados directamente. Es probable que el medio utilizado para la comunicacin
entre los procesadores de grandes mquinas multiprocesador sea jerrquico.

Clases de computadoras paralelas[editar]


Las computadoras paralelas se pueden clasificar de acuerdo con el nivel en el que el
hardware soporta paralelismo. Esta clasificacin es anloga a la distancia entre los
nodos bsicos de cmputo. Estos no son excluyentes entre s, por ejemplo, los grupos
de multiprocesadores simtricos son relativamente comunes.
Computacin multincleo[editar]
Artculo principal: Procesador multincleo
Un procesador multincleo es un procesador que incluye mltiples unidades de
ejecucin (ncleos) en el mismo chip. Los procesadores superescalares pueden
ejecutar mltiples instrucciones por ciclo de un flujo de instrucciones (hilo), a
diferencia de este, un procesador multincleo puede ejecutar mltiples instrucciones
por ciclo de secuencias de instrucciones mltiples. Cada ncleo en un procesador
multincleo potencialmente puede ser superescalar, es decir, en cada ciclo, cada
ncleo puede ejecutar mltiples instrucciones de un flujo de instrucciones.
El ''Multithreading'' simultneo de la cual Intel HyperThreading es el ms conocido
era una forma de pseudo-multincleo. Un procesador con capacidad de
multithreading simultneo tiene una sola unidad de ejecucin (ncleo), pero cuando
esa unidad de ejecucin est desocupada por ejemplo, durante un error de cach,
se utiliza para procesar un segundo hilo. El microprocesador Cell de IBM, diseado
para su uso en la consola Sony PlayStation 3, es otro prominente procesador
multincleo.
Multiprocesamiento simtrico[editar]
Artculo principal: Multiprocesamiento_simtrico
Un multiprocesador simtrico (SMP) es un sistema computacional con mltiples
procesadores idnticos que comparten memoria y se conectan a travs de un bus.[24]
La contencin del bus previene el escalado de esta arquitectura. Como resultado, los
SMPs generalmente no comprenden ms de 32 procesadores.[25] Debido al pequeo
tamao de los procesadores y de la significativa reduccin en los requisitos de ancho

de banda de bus, tales multiprocesadores simtricos son extremadamente rentables,


siempre que exista una cantidad suficiente de ancho de banda.[24]
Computacin en clster[editar]
Artculo principal: Cluster (informtica)

Un clster Beowulf.
Un clster es un grupo de ordenadores dbilmente acoplados que trabajan en estrecha
colaboracin, de modo que en algunos aspectos pueden considerarse como un solo
equipo.[26] Los clsteres se componen de varias mquinas independientes conectadas
por una red. Mientras que las mquinas de un clster no tienen que ser simtricas, de
no serlo, el balance de carga es ms difcil de lograr. El tipo ms comn de clster es
el cluster Beowulf, que es un clster implementado con mltiples ordenadores
comerciales idnticos conectados a una red de rea local TCP/IP Ethernet.[27] La
tecnologa Beowulf fue desarrollada originalmente por Thomas Sterling y Donald
Becker. La gran mayora de los superordenadores TOP500 son clsteres.[n. 4] [28]
Procesamiento paralelo masivo[editar]
Un procesador paralelo masivo (MPP) es un solo equipo con varios procesadores
conectados en red. Tienen muchas de las caractersticas de los clster, pero cuentan
con redes especializadas de interconexin en tanto que las clsteres utilizan
hardware estndar para la creacin de redes. Los MPPs tambin tienden a ser ms
grandes que los clsteres, con mucho ms de 100 procesadores.[29] En un MPP,
cada CPU tiene su propia memoria y una copia del sistema operativo y la aplicacin.

Cada subsistema se comunica con los dems a travs de un interconexin de alta


velocidad.[30]

Un gabinete de Blue Gene/L, clasificado como el cuarto mejor


superordenador del mundo de acuerdo a la clasificacin TOP500 en 11/2008.
Blue Gene/L es un procesador masivamente paralelo.
Computacin distribuida[editar]
Artculo principal: Computacin distribuida
La computacin distribuida es la forma ms distribuida de la computacin paralela.
Se hace uso de ordenadores que se comunican a travs de la Internet para trabajar en
un problema dado. Debido al bajo ancho de banda y la latencia extremadamente alta
de Internet, la computacin distribuida normalmente slo se refiere a problemas
vergonzosamente paralelos. Se han creado muchas aplicaciones de computacin
distribuida, SETI@home y Folding@home son los ejemplos ms conocidos.[31]
La mayora de las aplicaciones de computacin distribuida utilizan middleware,
software que se encuentra entre el sistema operativo y la aplicacin para administrar
los recursos de red y estandarizar la interfaz de software. El ms comn es la
Infraestructura Abierta de Berkeley para Computacin en Red (BOINC). A menudo,
los programas de computacin distribuida hacen uso de ciclos de repuesto,
realizando clculos cuando el procesador de un equipo est desocupado.

Computadoras paralelas especializadas[editar]


Dentro de la computacin paralela, existen dispositivos paralelos especializados que
generan inters. Aunque no son especficos para un dominio, tienden a ser aplicables
slo a unas pocas clases de problemas paralelos.
Cmputo reconfigurable con arreglos de compuertas
programables[editar]
El cmputo reconfigurable es el uso de un arreglo de compuertas programables
(FPGA) como coprocesador de un ordenador de propsito general. Un FPGA es, en
esencia, un chip de computadora que puede reconfigurarse para una tarea
determinada.
Los FPGAs se pueden programar con lenguajes de descripcin de hardware como
VHDL o Verilog. Sin embargo, los lenguajes de programacin pueden ser tediosos.
Varios vendedores han creado lenguajes C a HDL que tratan de emular la sintaxis
y/o semntica del lenguaje de programacin C, con el que la mayora de los
programadores estn familiarizados. Los lenguajes C a HDL ms conocidos son
Mitrion-C, C Impulse, DIME C y C-Handel. Tambin se pueden utilizar para este
propsito subconjuntos especficos de SystemC basados en C++.
La decisin de AMD de abrir HyperTransport a otros fabricantes la ha convertido en
la tecnologa que permite la computacin reconfigurable de alto rendimiento.[32] De
acuerdo con Michael D'Amour R., Director de Operaciones de la DRC Computer
Corporation, cuando entramos en AMD, nos llamaban ladrones de zcalos. Ahora
nos llaman socios.[32]
Cmputo de propsito general en unidades de procesamiento
grfico (GPGPU)[editar]
Artculo principal: GPGPU

Tarjeta Nvidia Tesla GPGPU

El cmputo de propsito general en las unidades de procesamiento de grficos


(GPGPU) es una tendencia relativamente reciente en la investigacin de ingeniera
informtica. Los GPUs son co-procesadores que han sido fuertemente optimizados
para procesamiento de grficos por computadora.[33] El procesamiento de grficos por
computadora es un campo dominado por operaciones sobre datos en paralelo, en
particular de lgebra lineal y operaciones con matrices.
Al principio, los programas de GPGPU normalmente utilizaban el API de grficos
para ejecutar programas. Sin embargo, varios nuevos lenguajes de programacin y
plataformas se han construido para realizar cmputo de propsito general sobre
GPUs, tanto Nvidia como AMD han liberado de entornos de programacin con
CUDA y Stream SDK, respectivamente. Otros lenguajes de programacin de GPU
incluyen: BrookGPU, PeakStream y RapidMind. Nvidia tambin ha lanzado
productos especficos para la computacin en su serie Tesla. El consorcio de
tecnologa Khronos Group ha lanzado OpenCL, que es un marco para la escritura de
programas que se ejecutan en distintas plataformas conformadas por CPUs y GPUs.
AMD, Apple, Intel, Nvidia y otros estn apoyando OpenCL.
Circuitos integrados de aplicacin especfica[editar]
Artculo principal: Circuito integrado de aplicacin especfica
Se han diseado varios circuitos integrados de aplicacin especfica (ASIC) para
hacer frente a las aplicaciones paralelas.[34] [35] [36]
Debido a que un ASIC (por definicin) es especfico para una aplicacin dada, puede
ser completamente optimizado para esa aplicacin. Como resultado, para una
aplicacin dada, un ASIC tiende a superar a un ordenador de propsito general. Sin
embargo, los ASICs son creados con litografa de rayos X. Este proceso requiere una
mscara, que puede ser extremadamente cara. Una mscara puede costar ms de un
milln de dlares.[n. 5] [37] Mientras ms pequeo sean los transistores necesarios para
el chip, ms cara ser la mscara. Mientras tanto, el incremento del rendimiento en
computadoras de propsito general como se describe en la Ley de Moore tiende
a eliminar esta diferencia en slo una o dos generaciones de chips.[32] El alto costo

inicial, y la tendencia a ser superados por la ley de Moore, ha hecho inviable el uso de
ASICs para la mayora de las aplicaciones paralelas. Sin embargo, algunos han sido
construidos, un ejemplo es el peta-flop RIKEN MDGRAPE-3 de la mquina que
utiliza ASICs para la simulacin de dinmica molecular.
Procesadores vectoriales[editar]
Artculo principal: Procesador vectorial

Cray-1 es el procesador vectorial ms famoso.


Un procesador vectorial es un CPU o un sistema computacional que puede ejecutar la
misma instruccin en grandes conjuntos de datos. Los procesadores vectoriales
tienen operaciones de alto nivel que trabajan sobre arreglos lineales de nmeros o
vectores. Un ejemplo de operacin con vectores es: A = B C, donde A, B, y C son
vectores de 64 elementos, donde cada uno es un nmero de punto flotante de 64 bits.
[38]

Estn estrechamente relacionadas con la clasificacin SIMD de Flynn.[38]

Las computadoras Cray se volvieron famosas por su procesamiento de vectores en los


aos 1970 y 1980. Sin embargo, los procesadores vectoriales, tanto CPUs y como
sistemas computacionales, han desaparecido. Los conjuntos de instrucciones de los
procesadores modernos incluyen algunas instrucciones de procesamiento de vectores,
por ejemplo: AltiVec y Streaming SIMD Extensions (SSE).
Software[editar]
Lenguajes de programacin en paralelo[editar]
Los lenguajes de programacin concurrentes, bibliotecas, APIs y modelos de
programacin paralela han sido creados para la programacin de computadores
paralelos. Estos generalmente se pueden dividir en clases basadas en las suposiciones

que se hacen sobre la arquitectura de memoria subyacente: compartida, distribuida, o


compartida-distribuida. Los lenguajes de programacin de memoria compartida se
comunican mediante la manipulacin de variables en la memoria compartida. En la
arquitectura con memoria distribuida se utiliza el paso de mensajes. POSIX Threads y
OpenMP son dos de las API ms utilizadas con la memoria compartida, mientras que
Message Passing Interface (MPI) Interfaz de Paso de Mensajes es el API ms
utilizado en los sistemas de paso de mensajes.[n. 6] [39] El concepto valor futuro es
muy utilizado en la programacin de programas paralelos, donde una parte de un
programa promete proporcionar un dato requerido a otra parte del programa en un
tiempo futuro.
Las empresas CAPS entreprise y Pathscale estn intentando convertir las directivas de
HMPP (Hybrid Multicore Parallel Programming) en un estndar abierto denominado
OpenHMPP. El modelo de programacin OpenHMPP basado en directivas ofrece una
sintaxis para descargar de manera eficiente los clculos sobre aceleradores de
hardware y optimizar el movimiento de datos hacia y desde la memoria del hardware.
Las directivas OpenHMPP describen llamadas a procedimientos remotos (RPC) en un
dispositivo acelerador por ejemplo el GPU o de forma ms general un conjunto
de ncleos. Las directivas permiten anotar cdigo C o Fortran para describir dos
grupos de funcionalidades: la descarga de los procedimientos en un dispositivo
remoto y la optimizacin de las transferencias de datos entre la memoria principal de
la CPU y la memoria del acelerador.
Paralelizacin automtica[editar]
Artculo principal: Paralelizacin automtica
La paralelizacin automtica de un programa secuencial por un compilador es el
santo grial de la computacin paralela. A pesar de dcadas de trabajo por parte de los
investigadores, la paralelizacin automtica ha tenido un xito limitado.[n. 7] [40]
Los principales lenguajes de programacin en paralelo permanecen explcitamente
paralelos o en el mejor de los casos parcialmente implcitos, en los que un

programador le da al compilador directivas de paralelizacin. Existen pocos lenguajes


de programacin paralelos totalmente implcitos: SISAL, Parallel Haskell, y (para
FPGAs) Mitrion C.
Punto de control[editar]
Mientras un sistema computacional crece en complejidad, el tiempo medio entre
fallos por lo general disminuye. Un punto de control de aplicacin es una tcnica
mediante la cual el sistema informtico toma una instantnea de la aplicacin, un
registro de todas las asignaciones actuales de recursos y estados variables, semejante
a un volcado de memoria, esta informacin se puede utilizar para restaurar el
programa si el equipo falla. Disponer de un punto de control significa que el
programa puede reiniciar desde este y no desde el principio. Mientras que los puntos
de control proporcionan beneficios en una variedad de situaciones, son especialmente
tiles en los sistemas altamente paralelos con un gran nmero de procesadores que
son utilizados en la computacin de altas prestaciones.[41]

You might also like