Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005).pptx
A C T I V I D A D
1 4 : D I S E Ñ O
D E
A L G O R I T M O S
P A R A L E L O S
P O R : J H O A N J . D E
L O S S A N TO S P 2 2 -
1 0 0 5
Diseño de
algoritmos paralelos
• Diseñar algoritmos
paralelos no es tarea fácil y
es un proceso altamente
creativo.
• Inicialmente se deben
explorar los aspectos
independientes de la
máquina.
• Los aspectos específicos a
la máquina deben ser
dejados para más tarde.
Qué son Algoritmos
Paralelos?
• Es un Algoritmo que podría
ser ejecutado por piezas en el
mismo momento de tiempo
por numerosas unidades de
procesamiento, para al final
juntar cada una de las piezas
y obtener el resultado
adecuado.
Etapas Del Diseño
de Algoritmos
Paralelos El diseño
• Particionamiento: Los datos que se
desean operar se descomponen en
tareas.
• Comunicación: A través de estructuras y
algoritmos de comunicación se determina
de el tipo de comunicación requerida para
coordinar tarea.
• Agrupamiento: Se evalúa la eficiencia de
los dos pasos anteriores y de ser
necesario se agrupan algunas tareas
pequeñas en tareas más grandes.
• Asignación: Cada tarea es asignada a un
procesador tratando de aprovechar los
recursos y reducir el costo de la
comunicación.
Alto Rendimiento de los algoritmos
Los Algoritmos paralelos son claves en la computación de alto
rendimiento debido a que implica usar la potencia de cálculo
para resolver problemas complejos en ciencia, ingeniería y
gestión.
William D. Gropp un profesor de ciencias de la computación en
la universidad de Illinois en Urbana-Champaign aprovechó esto
desarrollando y analizando algoritmos paralelos escalables clave
para métodos de descomposición de dominios y refinamiento de
mallas adaptativas, que ahora se utilizan ampliamente en
Modelos de programación paralela
Existen varios modelos de programación paralela que se utilizan para
diseñar algoritmos paralelos y aprovechar los recursos de hardware
disponibles. A continuación, se describen algunos de ellos junto con
ejemplos:
• Modelo de memoria compartida: En este modelo, los procesos
pueden acceder a un espacio de memoria compartido. Ejemplos de
este modelo son OpenMP y Pthreads. Por ejemplo, en OpenMP se
pueden utilizar directivas de compilación para especificar secciones
de código que deben ser ejecutadas en paralelo.
• Modelo de paso de mensajes: En este modelo, los procesos se
comunican entre sí mediante el intercambio de mensajes. Ejemplos
de este modelo son MPI (Message Passing Interface) y UPC
(Unified Parallel C). Por ejemplo, en MPI se puede utilizar la función
MPI_Send para enviar mensajes de un proceso a otro.
• Modelo de flujo de datos: En este modelo,
los procesos se comunican mediante el
intercambio de datos. Ejemplos de este
modelo son Dataflow y Stream. Por
ejemplo, en Dataflow se puede especificar
un grafo de datos que define cómo los
datos fluyen entre los procesos.
• Modelo de procesamiento en lotes: En
este modelo, los procesos se agrupan en
lotes y se procesan en paralelo. Ejemplos
de este modelo son MapReduce y Spark.
Por ejemplo, en MapReduce se pueden
procesar grandes conjuntos de datos
distribuidos en clústeres de servidores.
• Modelo de procesamiento de eventos: En este
modelo, los procesos se ejecutan en respuesta
a eventos, como entradas de usuario o
interrupciones de hardware. Ejemplos de este
modelo son ReactiveX y Node.js. Por ejemplo,
en ReactiveX se pueden escribir programas
reactivos que respondan a flujos de datos
asincrónicos.
• Modelo de programación de GPU: En este
modelo, los procesos se ejecutan en unidades
de procesamiento gráfico (GPU) en lugar de en
la CPU. Ejemplos de este modelo son CUDA y
OpenCL. Por ejemplo, en CUDA se pueden
diseñar algoritmos que aprovechen las
capacidades de procesamiento masivo de la
GPU.