bus paralelo

26
Bus paralelo[editar] Es un bus en el cual los datos son enviados por bytes al mismo tiempo, con la ayuda de varias líneas 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 expansión y de vídeo, hasta las impresoras. Diagrama de un Bus Backplane como extensión 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 líneas dedicadas: Las líneas de dirección son las encargadas de indicar la posición de memoria o el dispositivo con el que se desea establecer comunicación. Las líneas de control son las encargadas de enviar señales de arbitraje entre los dispositivos. Entre las más importantes están las líneas de interrupción, DMA y los indicadores de estado. Las líneas 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 físicas complejas, pero la lógica es sencilla, que lo hace útil en sistemas con poco poder de cómputo. En los primeros microcomputadores, el bus era simplemente la extensión del bus del

Upload: guillermo-henao-cerra

Post on 24-Sep-2015

227 views

Category:

Documents


1 download

DESCRIPTION

Bus Paralelo

TRANSCRIPT

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 computacinLos 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 AHilo B

1A: Lee variable V1B: Lee variable V

2A: Aadir 1 a la variable V2B: Aadir 1 a la variable V

3A: Escribir en la variable V3B: 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 AHilo B

1A: Bloquear variable V1B: Bloquear variable V

2A: Lee variable V2B: Lee variable V

3A: Aadir 1 a la variable V3B: Aadir 1 a la variable V

4A: Escribir en la variable V4B: Escribir en la variable V

5A: Desbloquear variable V5B: 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 individualInstruccin mltiple

Datos individualesSISDMISD

Mltiples datosSIMDMIMD

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 datosEl 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 := 02: PREV2 := 13: do:4: CUR := PREV1 + PREV25: PREV1 := PREV26: PREV2 := CUR7: 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 tareasEl 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 multincleoUn 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_simtricoUn 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 distribuidaLa 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 GPGPUEl 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 especficaSe 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 automticaLa 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]