Computación paralela


La computación paralela es un tipo de computación en la que se realizan muchos cálculos o procesos simultáneamente. [1] Los problemas grandes a menudo se pueden dividir en otros más pequeños, que luego se pueden resolver al mismo tiempo. Hay varias formas diferentes de computación en paralelo: a nivel de bit , a nivel de instrucción , los datos , y el paralelismo de tareas . El paralelismo se ha empleado durante mucho tiempo en la informática de alto rendimiento , pero ha ganado un interés más amplio debido a las limitaciones físicas que impiden el escalado de frecuencias . [2]Dado que el consumo de energía (y, en consecuencia, la generación de calor) de las computadoras se ha convertido en una preocupación en los últimos años, [3] la computación paralela se ha convertido en el paradigma dominante en la arquitectura de las computadoras , principalmente en forma de procesadores de múltiples núcleos . [4]

La computación paralela está estrechamente relacionada con la computación concurrente; se usan con frecuencia juntas y, a menudo, se combinan, aunque las dos son distintas: es posible tener paralelismo sin concurrencia (como el paralelismo a nivel de bits ) y concurrencia sin paralelismo (como multitarea por tiempo compartido en una CPU de un solo núcleo). [5] [6] En la computación paralela, una tarea computacional se divide típicamente en varias, a menudo muchas, subtareas muy similares que se pueden procesar de forma independiente y cuyos resultados se combinan posteriormente, una vez completadas. Por el contrario, en la computación concurrente, los diversos procesos a menudo no abordan tareas relacionadas; cuando lo hacen, como es típico en la informática distribuida, las tareas separadas pueden tener una naturaleza variada y, a menudo, requieren alguna comunicación entre procesos durante la ejecución.

Las computadoras paralelas se pueden clasificar aproximadamente según el nivel en el que el hardware admite el paralelismo, con computadoras de múltiples núcleos y multiprocesadores que tienen múltiples elementos de procesamiento dentro de una sola máquina, mientras que los clústeres , MPP y cuadrículas usan múltiples computadoras para trabajar en la misma tarea. Las arquitecturas de computadora paralelas especializadas a veces se utilizan junto con los procesadores tradicionales, para acelerar tareas específicas.

En algunos casos, el paralelismo es transparente para el programador, como en el paralelismo a nivel de bits o de instrucción, pero los algoritmos explícitamente paralelos , particularmente aquellos que usan concurrencia, son más difíciles de escribir que los secuenciales , [7] porque la concurrencia introduce varios nuevos clases de posibles errores de software , de las cuales las condiciones de carrera son las más comunes. La comunicación y la sincronización entre las diferentes subtareas suelen ser algunos de los mayores obstáculos para obtener un rendimiento óptimo del programa paralelo.

Un límite superior teórico sobre la aceleración de un solo programa como resultado de la paralelización viene dado por la ley de Amdahl .

Tradicionalmente, el software de computadora se ha escrito para computación en serie . Para resolver un problema, se construye e implementa un algoritmo como un flujo de instrucciones en serie. Estas instrucciones se ejecutan en una unidad central de procesamiento en una computadora. Solo se puede ejecutar una instrucción a la vez; una vez finalizada esa instrucción, se ejecuta la siguiente. [8]


Una representación gráfica de la ley de Amdahl . La aceleración de un programa a partir de la paralelización está limitada por la cantidad de programa que se puede paralelizar. Por ejemplo, si el 90% del programa se puede paralelizar, la aceleración máxima teórica usando computación paralela sería 10 veces sin importar cuántos procesadores se usen.
Supongamos que una tarea tiene dos partes independientes, A y B . La parte B toma aproximadamente el 25% del tiempo de todo el cálculo. Trabajando muy duro, es posible que esta parte sea 5 veces más rápida, pero esto solo reduce un poco el tiempo para todo el cálculo. Por el contrario, es posible que sea necesario realizar menos trabajo para que la parte A sea ​​dos veces más rápida. Esto hará que el cálculo sea mucho más rápido que si se optimiza la parte B , aunque la aceleración de la parte B es mayor en proporción (5 veces frente a 2 veces).
Una representación gráfica de la ley de Gustafson.
Taiwania 3 de Taiwán , un dispositivo de supercomputación paralelo que se unió a la investigación de COVID-19 .
Un procesador canónico sin pipeline . Se necesitan cinco ciclos de reloj para completar una instrucción y, por lo tanto, el procesador puede emitir un rendimiento subescalar ( IPC = 0.2 <1 ).
Un procesador canalizado canónico de cinco etapas . En el mejor de los casos, se necesita un ciclo de reloj para completar una instrucción y, por lo tanto, el procesador puede emitir un rendimiento escalar ( IPC = 1 ).
Un procesador canalizado canónico de cinco etapas con dos unidades de ejecución. En el mejor de los casos, se necesita un ciclo de reloj para completar dos instrucciones y, por lo tanto, el procesador puede emitir un rendimiento superescalar ( IPC = 2> 1 ).
Una vista lógica de una arquitectura de acceso a memoria no uniforme (NUMA). Los procesadores de un directorio pueden acceder a la memoria de ese directorio con menos latencia de la que pueden acceder a la memoria de la memoria del otro directorio.
Un grupo de Beowulf
Un gabinete de IBM 's Blue Gene / L masivamente paralelo superordenador
Tarjeta Tesla GPGPU de Nvidia
El Cray-1 es un procesador vectorial
ILLIAC IV , "la más infame de las supercomputadoras" [64]