Professional Documents
Culture Documents
DACYTi
Carrera:
Ing. Sistemas computacionales
Materia:
Sistemas distribuidos
Catedrático:
Juan Roberto Hernández Garibay
Alumno:
Ricardo Custodio García
Fecha:
05/09/2023
Consideraciones de programación paralela
Ken Kennedy • Jack Dongarra • Geoffrey Fox • William Gropp • Dan Reed
El objetivo principal de este capítulo es presentar los problemas comunes que enfrenta un
programador al implementar una aplicación paralela. El tratamiento asume que el lector
está familiarizado con la programación de un uniprocesador utilizando un lenguaje
convencional, como Fortran. El principal desafío de la programación paralela es
descomponer el programa en subcomponentes que se pueden ejecutar en paralelo. Sin
embargo, para entender algunos de los problemas de bajo nivel de descomposición, el
programador debe tener una vista simplificada de la arquitectura de máquina paralela.
Por lo tanto, comenzamos nuestro tratamiento con una revisión de este tema, con el
objetivo de identificar las características que son más importantes para que el
programador paralelo entienda. Esta discusión, que se encuentra en la Sección 3.1, se
centra en dos organizaciones principales de máquinas paralelas -memoria compartida y
memoria distribuida- que caracterizan a la mayoría de las máquinas actuales. La sección
también trata los híbridos de los dos diseños principales de memoria.
Las arquitecturas paralelas estándar soportan una variedad de estrategias de
descomposición, como la descomposición por tarea (paralelismo de tareas) y la
descomposición por datos (paralelismo de datos). Nuestro tratamiento introductorio se
concentrará en el paralelismo de datos porque representa la estrategia más común para
programas científicos en máquinas paralelas. En el paralelismo de datos, la aplicación se
descompone subdividiendo el espacio de datos sobre el que opera y asignando diferentes
procesadores al trabajo asociado con diferentes subespacios de datos. Por lo general, esta
estrategia implica compartir algunos datos en los límites, y el programador es
responsable de asegurar que este intercambio de datos se maneje correctamente, es decir,
los datos computados por un procesador y utilizados por otro se sincronizan
correctamente.
Una vez elegida una estrategia de descomposición específica, debe ser implementada.
Aquí, el programador debe elegir el modelo de programación a utilizar. Los dos modelos
más comunes son los siguientes:
• El modelo de memoria compartida, en el que se asume que todas las
estructuras de datos se asignan en un espacio común accesible desde cada
procesador.
• El modelo de paso de mensajes, en el que se asume que cada procesador (o
proceso) tiene su propio espacio de datos privado, y los datos deben
moverse explícitamente entre los espacios según sea necesario.