Introducción a la informática distribuida y paralela (4) Estructura y descomposición del problema


Se ha lanzado una nueva ronda de asignaciones de MPI, ¡haré todo lo posible para actualizar la parte de MPI para estudiantes antes de DDL! El pescado es corto, ¡intenta ser más salado!

Sección 4 Estructura y descomposición del problema

OpenMP es una de nuestras principales bibliotecas para computación paralela en C ++. OpenMP se basa en el uso compartido de memoria y es adecuado para sistemas con memoria compartida y multinúcleo de una sola máquina. Así que aquí nos preocupa cómo dividir las tareas claramente y entregarlas a múltiples procesadores en una computadora para su procesamiento. El contenido específico de OpenMP se mencionará en el próximo artículo En primer lugar, aquí se dan algunos conceptos que se encuentran a menudo en la programación OpenMP, las consideraciones principales y algunas herramientas para ayudar a pensar.

Aunque los principios de diseño de Foster abogan por cuatro pasos de diseño, de hecho, la programación OpenMP a menudo considera primero el problema de la descomposición y la asignación. La descomposición consiste en decidir qué parte y qué parte deben separarse, qué parte se ejecuta primero y qué parte se ejecuta después, qué parte se puede paralelizar y qué parte solo se puede entregar a la ejecución de un solo subproceso; la asignación es determinar cómo se asignan las partes de tareas paralelas a diferentes procesadores , Cómo sopesar el grado de paralelismo y los gastos generales de comunicación.

Desglose del problema

El mismo trabajo se puede descomponer en una combinación de muchas tareas iniciales, y diferentes descomposiciones pueden producir una variedad de métodos y arreglos de cálculo

Grado de concurrencia

Definición: el número de tareas paralelas

  • Puede cambiar durante la ejecución del programa

índice:

  • Grado máximo de paralelismo: el número máximo de tareas paralelas durante la ejecución del programa
  • Grado medio de paralelismo: el número medio de tareas simultáneas (a tiempo)

Paralelismo y granularidad de tareas (granularidad)
(Revisión: la granularidad de las tareas es un indicador que describe qué tan finamente divididas están las tareas)

  • Los dos están en una relación de confrontación. Si las tareas son extremadamente detalladas, el grado de paralelismo es muy alto y la granularidad de la tarea es muy baja. Si las tareas son generales, la granularidad es muy grande, pero el grado de paralelismo es muy bajo.
  • Debe haber un cierto grado de paralelismo para mejorar la eficiencia, pero también para garantizar una cierta granularidad de tareas, reducir el trabajo de código y mejorar la legibilidad intuitiva.

Gráfico de dependencia de tareas

Inserte la descripción de la imagen aquí
El gráfico de dependencia de tareas (un gráfico acíclico conectado dirigido) refleja la relación topológica (posrelación) entre tareas. Una tarea solo puede comenzar a ejecutarse después de que se hayan completado todos los predecesores.

Camino crítico (importante)

Los bordes del gráfico de dependencia de tareas muestran la relación topológica de las tareas.

  • Camino critico: El camino de mayor peso
    • Longitud del camino críticoDetermina el límite inferior del tiempo de ejecución de programas paralelos.

Gráfico de interacción de tareas

Inserte la descripción de la imagen aquí
Tenga en cuenta que se distingue del Gráfico de dependencia de tareas. El gráfico de interacción de tareas muestra la relación de interacción de datos entre tareas

  • nodo = tarea
  • borde = interacción o intercambio de datos

Efecto paralelo

Factores que limitan los efectos paralelos

  • Granularidad mínima de la tarea (relacionada con el paralelismo y la interacción de la tarea)
  • Dependencias entre tareas
  • Gastos paralelos (como los gastos generales de comunicación entre tareas)
  • Proporción de trabajo que no se puede paralelizar

Métricas para medir efectos paralelos

  • Aceleración = T 1 / T p Aceleración = T_1 / T_p S p e e d u p=T1/ Tp(Tiempo de hilo único / tiempo de hilo p)
  • Eficiencia paralela = T 1 / (p T p) Eficiencia paralela = T_1 / (pT_p) P a r a l l e l E f f i c i e n c y=T1/ ( p Tp)

Asignación de trabajo

Tareas, hilos y mapeo

Tarea

  • las tareas son unidades independientes en el problema
    • Se asignarán hilos para realizar el trabajo de cada tarea
    • las tareas pueden suspenderse
    • las tareas se pueden ejecutar inmediatamente
  • El sistema de tiempo de ejecución determinará lo anterior

Nota: Los significados de cosas como tarea y trabajo en chino son realmente similares. En la práctica de programación, no hay una distinción estricta entre qué término se usa. La "tarea" que se menciona más adelante se refiere a la tarea de la unidad de tarea o al trabajo general del trabajo. Los lectores debenDepende del contexto

Hilo y mapeo

En la operación real, las tareas se asignan a subprocesos en lugar de núcleos. El sistema operativo realiza la asignación de subprocesos a núcleos

  • El mapeo que asigna tareas a los subprocesos es fundamental para el efecto de los programas paralelos.

Qué herramienta usar para seleccionar el mapeo

  • Al intentar asignar tareas independientes a diferentes subprocesos: use el gráfico de dependencia de tareas
    • Hilo mínimo inactivo
    • Equilibrio de carga óptimo
  • Al intentar minimizar la interacción entre subprocesos: utilice diagramas de interacción de tareas
    • Consumo mínimo de comunicación

Un mejor mapeo debe minimizar el tiempo de ejecución en paralelo

  • Asignar tareas que no dependen unas de otras a diferentes subprocesos
  • Asigne tareas en la ruta crítica a los subprocesos lo antes posible
  • Minimizar la comunicación entre hilos
    • De hecho, estos principios generalmente entran en conflicto entre sí. Por ejemplo, no dividir las tareas minimiza la interacción, pero no acelera en absoluto.

Supongo que te gusta

Origin blog.csdn.net/Kaiser_syndrom/article/details/105225986
Recomendado
Clasificación