Computación paralela


La computación paralela es un tipo de computación en la que muchos cálculos o procesos se llevan a cabo 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 paralela: nivel de bit, nivel de instrucción , datos y paralelismo de tareas . El paralelismo se ha empleado durante mucho tiempo en la informática de alto rendimiento , pero ha ganado un mayor interés debido a las limitaciones físicas que impiden el escalado de frecuencia . [2]Dado que el consumo de energía (y, en consecuencia, la generación de calor) por parte 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 computadoras , principalmente en forma de procesadores multinúcleo . [4]

El cómputo paralelo está estrechamente relacionado con el cómputo concurrente : con frecuencia se usan juntos y, a menudo, se combinan, aunque los dos son distintos: 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 generalmente se divide en varias, a menudo muchas, subtareas muy similares que se pueden procesar de forma independiente y cuyos resultados se combinan después, una vez completadas. Por el contrario, en la informática concurrente, los diversos procesos a menudo no abordan tareas relacionadas; cuando lo hacen, como es típico en la computación distribuida, las tareas separadas pueden tener una naturaleza variada y, a menudo, requieren cierta 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 multinúcleo y multiprocesador que tienen múltiples elementos de procesamiento dentro de una sola máquina, mientras que los clústeres , los MPP y las redes usan varias computadoras para trabajar en el mismo . tarea. Las arquitecturas informáticas 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 bit 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 algoritmos nuevos . clases de posibles errores de software , de los 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.

La ley de Amdahl proporciona un límite superior teórico en la aceleración de un solo programa como resultado de la paralelización .

Tradicionalmente, el software de computadora ha sido 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 que finaliza 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.
Suponga 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, uno puede hacer esta parte 5 veces más rápido, 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 ​​el doble de rápida. Esto hará que el cálculo sea mucho más rápido que al optimizar la parte B , aunque la aceleración de la parte B sea ​​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 tubería . 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 en un directorio pueden acceder a la memoria de ese directorio con menos latencia de la que pueden acceder a la memoria en la memoria del otro directorio.
Un cúmulo de Beowulf
Un gabinete de la supercomputadora paralela masiva Blue Gene/L de IBM
Tarjeta Tesla GPGPU de Nvidia
El Cray-1 es un procesador vectorial
ILLIAC IV , "la más infame de las supercomputadoras" [64]