Modelo de programación paralela

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Abstracción de la arquitectura computarizada paralela

En informática, un modelo de programación paralela es una abstracción de la arquitectura informática paralela, con la que conviene expresar algoritmos y su composición en programas. El valor de un modelo de programación se puede juzgar por su generalidad: qué tan bien se puede expresar una variedad de problemas diferentes para una variedad de arquitecturas diferentes, y su rendimiento: qué tan eficientemente se puede expresar. los programas compilados pueden ejecutarse. La implementación de un modelo de programación paralela puede tomar la forma de una biblioteca invocada desde un lenguaje secuencial, como una extensión de un lenguaje existente o como un lenguaje completamente nuevo.

El consenso en torno a un modelo de programación particular es importante porque lleva a que se construyan diferentes computadoras paralelas con soporte para el modelo, facilitando así la portabilidad del software. En este sentido, los modelos de programación se denominan puente entre hardware y software.

Clasificación de modelos de programación paralela

Las clasificaciones de los modelos de programación paralela se pueden dividir en términos generales en dos áreas: interacción de procesos y descomposición de problemas.

Interacción del proceso

La interacción de procesos se relaciona con los mecanismos mediante los cuales los procesos paralelos pueden comunicarse entre sí. Las formas más comunes de interacción son la memoria compartida y el paso de mensajes, pero la interacción también puede ser implícita (invisible para el programador).

Memoria compartida

La memoria compartida es un medio eficaz para pasar datos entre procesos. En un modelo de memoria compartida, los procesos paralelos comparten un espacio de direcciones global en el que leen y escriben de forma asincrónica. El acceso concurrente asincrónico puede generar condiciones de carrera y se pueden utilizar mecanismos como bloqueos, semáforos y monitores para evitarlas. Los procesadores multinúcleo convencionales admiten directamente la memoria compartida, que muchos lenguajes y bibliotecas de programación paralela, como Cilk, OpenMP y Threading Building Blocks, están diseñados para explotar.

Transmisión de mensajes

En un modelo de paso de mensajes, los procesos paralelos intercambian datos pasando mensajes entre sí. Estas comunicaciones pueden ser asíncronas, donde se puede enviar un mensaje antes de que el receptor esté listo, o sincrónicas, donde el receptor debe estar listo. La formalización del paso de mensajes mediante procesos de comunicación secuencial (CSP) utiliza canales de comunicación sincrónicos para conectar procesos y condujo a lenguajes importantes como Occam, Limbo y Go. Por el contrario, el modelo de actor utiliza el paso de mensajes asíncrono y se ha empleado en el diseño de lenguajes como D, Scala y SALSA.

Espacio de direcciones global particionado

Los modelos de espacio de direcciones global particionado (PGAS) proporcionan un punto medio entre la memoria compartida y el paso de mensajes. PGAS proporciona una abstracción del espacio de direcciones de memoria global que está particionado lógicamente, donde una parte es local para cada proceso. Los procesos paralelos se comunican mediante operaciones asincrónicas (por ejemplo, lecturas y escrituras) en el espacio de direcciones global, de una manera que recuerda a los modelos de memoria compartida. Sin embargo, al dividir semánticamente el espacio de direcciones global en porciones con afinidad con procesos particulares, permiten a los programadores explotar la localidad de referencia y permitir una implementación eficiente en computadoras paralelas con memoria distribuida. PGAS es ofrecido por muchos lenguajes y bibliotecas de programación paralela, como Fortran 2008, Chapel, UPC++ y SHMEM.

Interacción implícita

En un modelo implícito, el programador no ve ninguna interacción de proceso y, en cambio, el compilador y/o el tiempo de ejecución son responsables de realizarla. Dos ejemplos de paralelismo implícito son los lenguajes de dominio específico donde se prescribe la concurrencia dentro de operaciones de alto nivel, y los lenguajes de programación funcionales porque la ausencia de efectos secundarios permite que funciones no dependientes se ejecuten en paralelo. Sin embargo, este tipo de paralelismo es difícil de gestionar y los lenguajes funcionales como Concurrent Haskell y Concurrent ML proporcionan funciones para gestionar el paralelismo de forma explícita y correcta.

Descomposición del problema

Un programa paralelo se compone de procesos que se ejecutan simultáneamente. La descomposición del problema se relaciona con la forma en que se formulan los procesos constituyentes.

Paralelismo de tareas

Un modelo de tareas paralelas se centra en procesos o subprocesos de ejecución. Estos procesos a menudo serán conductualmente distintos, lo que enfatiza la necesidad de comunicación. El paralelismo de tareas es una forma natural de expresar la comunicación de transmisión de mensajes. En la taxonomía de Flynn, el paralelismo de tareas suele clasificarse como MIMD/MPMD o MISD.

Paralelismo de datos

Un modelo de datos paralelos se centra en realizar operaciones en un conjunto de datos, normalmente una matriz estructurada regularmente. Un conjunto de tareas operará sobre estos datos, pero de forma independiente en particiones separadas. En la taxonomía de Flynn, el paralelismo de datos suele clasificarse como MIMD/SPMD o SIMD.

Paralelismo de flujo

El paralelismo de flujo, también conocido como paralelismo de canalización, se centra en dividir un cálculo en una secuencia de etapas, donde cada etapa procesa una parte de la entrada datos. Cada etapa opera de forma independiente y simultánea, y la salida de una etapa sirve como entrada para la siguiente etapa. El paralelismo de flujo es particularmente adecuado para aplicaciones con flujos de datos continuos o cálculos canalizados.

Paralelismo implícito

Como con la interacción implícita del proceso, un modelo implícito de paralelismo no revela nada al programador como el compilador, el tiempo de ejecución o el hardware es responsable. Por ejemplo, en los compiladores, la paralelización automática es el proceso de convertir el código secuencial en código paralelo, y en la arquitectura de la computadora, la ejecución superscalar es un mecanismo por el cual se explota el paralelismo a nivel de instrucción para realizar operaciones en paralelo.

Terminología

Los modelos de programación paralela están estrechamente relacionados con los modelos de computación. Un modelo de computación paralela es una abstracción utilizada para analizar el costo de los procesos computacionales, pero no necesariamente tiene que ser práctico, ya que puede implementarse de manera eficiente en hardware y/o software. Un modelo de programación, por el contrario, implica específicamente consideraciones prácticas de implementación de hardware y software.

Un lenguaje de programación paralelo puede basarse en uno o una combinación de modelos de programación. Por ejemplo, Fortran de alto rendimiento se basa en interacciones de memoria compartida y descomposición de problemas de datos paralelos, y Go proporciona un mecanismo para la interacción de memoria compartida y paso de mensajes.

Ejemplos de programación paralela

NombreClase de interacciónClase de descomposiciónEjecuciones de ejemplos
Modelo Actor Mensaje asombroso que pasa Tareas D, Erlang, Scala, SALSA
Bulk sincrónico paralelo Memoria compartida Tareas Apache Giraph, Apache Hama, BSPlib
Transmisión de procesos secuenciales Mensaje sincronizado que pasa Tareas Ada, Occam, VerilogCSP, Go
Circuitos Mensaje que pasa Tareas Verilog, VHDL
Flujo de datos Mensaje que pasa Tareas Lustre, TensorFlow, Apache Flink
Funcional Mensaje que pasa Tareas Concurrent Haskell, Concurrent ML
Máquina de registro Mensaje sincronizado que pasa No especificado Ninguno
Máquina de acceso aleatoria paralela Memoria compartida Datos Cilk, CUDA, OpenMP, Threading Building Blocks, XMTC
SPMD PGAS Planteamiento mundial parcial del espacio Datos Fortran 2008, Unified Parallel C, UPC++, SHMEM
Global-view Task parallelism Planteamiento mundial parcial del espacio Tareas Chapel, X10
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save