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]