Difference between revisions of "Introducción a la programación paralela"

From Supercomputación y Cálculo Científico UIS
 
(84 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
Volver a  [[Cursos]]
 
Volver a  [[Cursos]]
__NOTOC__<div class="column clearfix">
 
    <div class="col-md-14"><div class="panel-body">
 
            <p>'''Introducción a la Programación Paralela - Código 28661'''</p><p></p><p><b>[https://sites.google.com/site/carlosjaimebh/ Carlos Jaime Barrios Hernandez, PhD.]</b> - (c b a r r i o s (@) u i s . e d u . c o )</p><p>Asistencia Técnica-Teóric:. Equipo SC3UIS y CAGE</p>[[File:NoThanksButWereBusy.png|border|center|630x630px]]</div></div></div>
 
  
=== '''PRESENTACION DEL CURSO''' ===
+
 
 +
'''Introducción a la Computación Paralela - Código 28661'''
 +
<div class="column clearfix">
 +
    <div class="col-md-14"><div class="panel-body"><p></p><p><b>[https://sites.google.com/site/carlosjaimebh/ Carlos Jaime Barrios Hernandez, PhD.]</b> - (c b a r r i o s (@) u i s . e d u . c o )</p><p>Asistencia Técnica-Teórica:. Equipo SC3UIS y CAGE</p>[[File:NoThanksButWereBusy.png|border|center|630x630px]]</div></div></div>
 +
 
 +
==='''PRESENTACION DEL CURSO'''===
 
<div class="column clearfix">
 
<div class="column clearfix">
 
La ruptura tecnológica hace que la computación sea quizás el área del conocimiento más dinámico que existe y que no solo promueve tendencias sino también cambios sociales, desde que la información y su tratamiento no solo es una necesidad sino una exigencia. La computación paralela, si bien no es nada nuevo, como parte de esa "exigencia" permite la explotación de sistemas que desde hace más de treinta años están disponibles, pero que en algunos medios se ve aún como algo exótico, ignorando que gracias a esas posibilidades, desde poder escuchar música, hablar y tomar fotos de manera simultánea en un dispositivo móvil, pasando por pronosticar el clima o mercados, almacenar datos en la nube hasta la realidad de implementar soluciones y algoritmos de inteligencia artificial hoy, existe porque hay múltiples unidades de procesamiento que pueden ser programadas de manera paralela y concurrente.
 
La ruptura tecnológica hace que la computación sea quizás el área del conocimiento más dinámico que existe y que no solo promueve tendencias sino también cambios sociales, desde que la información y su tratamiento no solo es una necesidad sino una exigencia. La computación paralela, si bien no es nada nuevo, como parte de esa "exigencia" permite la explotación de sistemas que desde hace más de treinta años están disponibles, pero que en algunos medios se ve aún como algo exótico, ignorando que gracias a esas posibilidades, desde poder escuchar música, hablar y tomar fotos de manera simultánea en un dispositivo móvil, pasando por pronosticar el clima o mercados, almacenar datos en la nube hasta la realidad de implementar soluciones y algoritmos de inteligencia artificial hoy, existe porque hay múltiples unidades de procesamiento que pueden ser programadas de manera paralela y concurrente.
  
El curso, que es introductorio, esta dirigido a estudiantes de ingeniería de sistemas y ciencias de la computación, cuyo principal objetivo es ofrecer fundamentos para la explotación de la concurrencia, la explotación de paradigmas de programación dirigidos al paralelismo, sin ignorar algunos conceptos arquitecturales necesarios para entender que soporta ese procesamiento en paralelo. A partir de este curso, los participantes manejaran la terminología necesaria igualmente y tendrán la base para a partir de allí seguir cursos avanzados y seminarios especializados.
+
El curso, que es para principiantes, esta dirigido a estudiantes de ingeniería de sistemas y ciencias de la computación, cuyo principal objetivo es ofrecer fundamentos para la explotación de la concurrencia, la explotación de paradigmas de programación dirigidos al paralelismo, sin ignorar algunos conceptos arquitecturales necesarios para entender que soporta ese procesamiento en paralelo. A partir de este curso, los participantes manejaran la terminología necesaria igualmente y tendrán la base para a partir de allí seguir cursos avanzados y seminarios especializados.
  
 
</div>
 
</div>
  
=== '''Contenido''' ===
+
==='''Contenido'''===
 
<div class="col-md-14">
 
<div class="col-md-14">
# Introducción a la Computación Paralela
+
#Introducción a la Computación Paralela
#* Pensamiento Paralelo y Pervasibidad
+
#*Pensamiento Paralelo y Pervasibidad
#* Elementos de Paralelismo  
+
#*Elementos de Paralelismo
#* Evolución de la Computación Paralela  
+
#*Evolución de la Computación Paralela
# Arquitecturas Paralelas y Sistemas Escalables
+
#*Computación de Alto Rendimiento (HPC)
#* Modelos de Máquinas Paralelas
+
#Arquitecturas Paralelas y Sistemas Escalables
#* Modelos de Ejecución Paralela
+
#*Modelos de Máquinas Paralelas
#* Paralelismo y Comunicación
+
#*Modelos de Ejecución Paralela
#* Caracterización de Flynn  
+
#*Paralelismo y Comunicación
#* Multinucleos y Multiprocesamiento
+
#*Caracterización de Flynn
#* Arquitecturas para el Procesamiento Masivamente Paralelo (Manycores)
+
#*Multinúcleos y Multiprocesamiento (multicores - multiprocessing)
#* Modelos de Memoria
+
#*Procesamiento Vectorial
#** Jerarquia de Memoria
+
#*Arquitecturas para el Procesamiento Masivamente Paralelo (Manycores)
#* Sistemas Distribuidos de Gran Escala  
+
#*Modelos de Memoria
# Algoritmos Concurrentes y Paralelos
+
#**Jerarquia de Memoria
#* Caracterización de Paralelismo
+
#*Sistemas Distribuidos de Gran Escala
#* Granularidad
+
#*Unidades de Procesamiento Tensor
#* Multihilos y Multiprocesos
+
#*Unidades de Procesamiento Cuántico
#* Modelos de Computación (RAM, PRAM, Sorting Networks, BSP, LogP y otros)
+
#*Sistemas Operativos, Sistemas de Archivos, Calendarización y Monitoreo en Arquitecturas Paralelas
#* Modelos de Algoritmos Concurrentes
+
#**Aspectos especiales de Linux y Slurm
#** Descomposición de Tareas
+
#*Top500 y Otros Rankings
#** Descomposición de Datos
+
#Algoritmos Concurrentes y Paralelos
#** Dividir y Conquistar
+
#*Caracterización de Paralelismo
#** Tuberias (Pipeline)
+
#*Granularidad
#** Recursividad y Otros (Embarrassingly Parallelism y Otros)
+
#*Multihilos y Multiprocesos
#* Algoritmos No Paralelos
+
#*Modelos de Computación (RAM, PRAM, Sorting Networks, BSP, LogP y otros)
#* Balanceo de Carga y Calendarización (Scheduling)
+
#*Modelos de Algoritmos Concurrentes
# Paradigmas y Modelos de Programación Paralela
+
#**Descomposición de Tareas
#* Ambientes de Programación Paralela
+
#**Descomposición de Datos
#* Programación de Sistemas CPU-GPU (Sistemas GPGPU)
+
#**Dividir y Conquistar
#** Fundamentos de Programación de GPUs y Múltiples GPU
+
#**Tuberias (Pipeline)
#**  
+
#**Recursividad y Otros (Embarrassingly Parallelism y Otros)
# Optimización
+
#*Algoritmos No Paralelos
#*  
+
#*Balanceo de Carga y Calendarización (Scheduling)
# Evaluación de Desempeño
+
#Paradigmas y Modelos de Programación Paralela
#* Latencia y Throughput
+
#*Ambientes de Programación Paralela
#* Speedup (Aceleración), Eficiencia y Escalabilidad
+
#*Modelo de Programación de Memoria Compartida
#* Ley de Amhdal
+
#**OpenMP
#* Ley de Gustaffon-Barsis
+
#*Modelo de Programación de Memoria Distribuída
#* Complejidad Asimptótica (Aceleración y Eficiencia)
+
#**Paso de Mensajes con MPI
#* Modelo de Little  
+
#*Modelo Programación de Memoria Híbrida/Heterogénea
#* Análisis de Rendimiento y Tunning (Ajuste)  
+
#**Programación de Sistemas CPU-GPU (Sistemas GPGPU)
# Debugging and Profiling
+
#***Fundamentos de Programación de GPUs y Múltiples GPU con CUDA
#* Consideraciones de Debugging y Monitoreo de Rendimiento y Comportamiento  
+
#*Uso de Directivas de Aceleración con OpenACC
#* Herramientas para el Debugging y el Profling
+
#*Otros Mecanismos de Implementación y Aceleración de Aplicaciones
# Lineamientos para el Desarrollo de Aplicaciones Paralelas
+
#Optimización
#* Patrones para el Flujo de Control y de Ejecución
+
#*Optimización Local y Global Paralela
#* Patrones para la Administración de Datos
+
#Evaluación de Desempeño
#* Espacios de Diseño y Desarrollo de Programas Paralelos
+
#*Latencia y Throughput
#** Búsqueda de Explotación de Concurrencia
+
#*Speedup (Aceleración), Eficiencia y Escalabilidad
#** Diseño de Estructura de Algoritmo
+
#*Ley de Amhdal
#** Selección de Estructuras de Soporte de Algoritmos Paralelos
+
#*Ley de Gustaffon-Barsis
#** Selección de Mecanismos de Implementación
+
#*Complejidad Asimptótica (Aceleración y Eficiencia)
# Direcciones y Tendencias en Programación Paralela
+
#*Modelo de Little
#* Explotación de Unidades Tensor y Aplicaciones Emergentes
+
#*Análisis de Rendimiento y Tunning (Ajuste)
#* Extracción de Paralelismo en Códigos Secuenciales
+
#Debugging and Profiling
#* Explotación de Memoria
+
#*Consideraciones de Debugging y Monitoreo de Rendimiento y Comportamiento
#* Paradigmas de Programación Emergentes
+
#*Herramientas para el Debugging y el Profling
 +
#Lineamientos para el Desarrollo de Aplicaciones Paralelas
 +
#*Patrones para el Flujo de Control y de Ejecución
 +
#*Patrones para la Administración de Datos
 +
#*Espacios de Diseño y Desarrollo de Programas Paralelos
 +
#**Búsqueda de Explotación de Concurrencia
 +
#**Diseño de Estructura de Algoritmo
 +
#**Selección de Estructuras de Soporte de Algoritmos Paralelos
 +
#**Selección de Mecanismos de Implementación
 +
#Direcciones y Tendencias en Programación Paralela
 +
#*HPC@Green: Eficiencia Computacional Hoy (Consumo Energético/Procesamiento)
 +
#*Explotación de Unidades Tensor y Aplicaciones Emergentes
 +
#*Extracción de Paralelismo en Códigos Secuenciales
 +
#*Explotación de Memoria
 +
#*Paradigmas de Programación Emergentes
 
</div>
 
</div>
  
<div class="col-md-14">
+
==='''<big>Metodología - Curso Especial 2- 2020</big>'''===
    <div class="panel panel-darker-white"><div class="panel-body">                                        </div></div>
+
Se realizarán sesiones teóricas via visioconferencia de manera sincrónica los dias martes de 10:05 a.m. a 11:55 y de manera sincrónica/semi-asincrónica laboratorios prácticos en la tarde de los dias martes. El acompañamiento e interacción se realizará a través de un foro para algunas de las prácticas que esta a disposición en este sitio.
</div>
+
<br />
 +
=='''<big>Evaluación</big>'''==
 +
'''Evaluaciones programadas para el 2do Semestre de 2020'''
 +
 
 +
Las evaluaciones programadas para este semestre, se detallarán en la sesión teórica, normalmente dos semanas antes de la fecha de entrega. Igualmente las prácticas serán informadas en la sesión teórica previa así como las fechas y horas limites de entrega. Las diferentes entregas que son individuales o en grupo de acuerdo se diga,  se realizarán principalmente via github.<br />
 +
 
 +
===='''Evaluación 1 (25%) C/C++  Procesamiento Memoria Compartida (Individual):'''  ====
 +
'''Fecha Limite de Entrega: Sábado 28 de Noviembre de 2020 hasta las 23:59 (GMT - 5, Bogotá Time)'''
 +
 
 +
En esta primera entrega, dividida en cinco partes, tiene como objetivo evaluar las competencias adquiridas en torno a la transformación de códigos que se encuentran implementados  en C/C++ para su ejecución paralela usando OpenMP. Cada uno de los estudiantes recibirá un correo electrónico personalizado que contendrá la descripción y encabezado del código recibido (en inglés principalmente), junto con el código respectivo (en .c). Este código se encuentra debidamente documentado y licenciado para su uso bajo una licencia [https://es.wikipedia.org/wiki/GNU_General_Public_License#:~:text=La%20Licencia%20P%C3%BAblica%20General%20de,usuarios%20finales%20(personas%2C%20organizaciones%2C GPL] .
 +
 
 +
La metodología para realizar la evaluación y la entrega es la siguiente:
 +
 
 +
#Cree o reactive una cuenta existente en [https://github.community/ Github] (puede usar cualquier nombre o pseudonimo), sin embargo tenga en cuenta que el github que usted cree es parte de sus evidencias de presentación profesional, que incluso se referencian hoy en dia en hojas de vida.
 +
#*Debe vincularse a Supercomputación y Cálculo Científico de la Universidad Industrial de Santander ('''SC3UIS''') y dentro de SC3UIS, unirse al equipo '''beginners-hpc''' https://github.com/orgs/SC3UIS/teams/beginners-hpc
 +
#*Una vez asociados, deberán crear un repositorio (carpeta) de la siguiente manera: IntroPP<Código de Estudiante>, asi, si por ejemplo su código de estudiante es 941108, el repositorio será '''IntroPP941108.'''
 +
#*Dentro de ese repositorio crear un repositorio adicional que se llame '''OpenMP'''
 +
#**Es recomendable por cada nuevo repositorio que genere, crear un README explicando que contiene allí.
 +
#*Y en ese repositorio deberán subir los archivos relacionados con la entrega, que básicamente son (5) cinco:
 +
#**Archivo con el código original en C <u>(se había dicho que no pero se decidió que si)</u>
 +
#**Archivo con el nuevo código en OpenMP (que llamaran omp_<nombre_codigo_fuente_original>.c (Si el código fuente que recibieron por ejemplo se llama transform.c, el código nuevo que subirán allí se llamara omp_transform.c). Como es obvio el código fuente que recibirán es en C.
 +
#**<u>Archivo sbatch para  la corrida en GUANE-1 (BONUS). Igual si su código se llama omp_transform el sbatch se llamara transform.sbatch.</u>
 +
#**Archivo Readme, en no mas de diez lineas deben explicar con sus palabras y en español que hace el código, deben muestrar las opciones de compilación y de corrida (pueden realizar la compilación en gcc o icc). En ese archivo deben colocar como se ejecuta en local (en sus maquinas) y como se ejecuta en GUANE-1.
 +
#**Archivo de salida que llamarán output_<nombre_codigo_openmp>.txt, entonces si su código se llama omp_transform.c su archivo de salida se llamara output_transform.txt
 +
#Para el código recibido, deben realizar una versión en OpenMP de acuerdo a los fundamentos vistos en clase y los que consulten en la bibliografía relacionada. El nuevo código que realicen lo deben igualmente documentar, manteniendo el estilo de la documentación, por ejemplo:
 +
 
 +
/*
 +
 +
  Purpose:
 +
 +
    TRANSFORM is an example of a transformation of an EDP using some parameters for Intro PP Students.
 +
 +
  Example:
 +
 +
    31 May 2001 09:45:54 AM
 +
 +
  Licensing:
 +
 +
    This code is distributed under the GNU LGPL license.
 +
 +
  Modified:
 +
 +
    24 September 2003
 +
 +
  Author:
 +
  George
 +
  OpenMP Modification:
 +
  27 July 2020 by Levy Rincon, Universidad Industrial de Santander levy.rincon@correouis.edu.co                 
 +
  This OpenMP Modification makes a parallelization of the original Code... 
 +
*/
 +
(''Tengan en cuenta solo deben adicionar una sección de su modificaciones, explicando brevemente que es lo que hace, puede hacerlo en inglés (recomendado) o en español)''
 +
 
 +
Nota importante: usted puede realizar modificaciones al código recibido originalmente, por supuesto debe explicar esas modificaciones y por qué las hace de acuerdo a la versión original. Puede subir el archivo original dado, pero no olvide colocar en los comentarios el autor y de donde fue seleccionado.
 +
 
 +
3. Como se dijo inicialmente y por eso se insiste, deben documentar en el cuerpo de su código fuente las variaciones que ustedes hagan. Pueden hacerlo en español (pero se recomienda tratar de hacerlo en inglés).
 +
 
 +
4. Los mismos (5) cinco archivos igualmente '''<u>MAS EL ARCHIVO EJECUTABLE</u>''', con las mismas condiciones deben ser colocados dentro de su carpeta personal en la plataforma de SC3UIS y su cuenta asociada a GUANE-1 (ver el punto 1.), en otras palabras, cree una carpeta llamada OpenMP. En total son seis archivos en su repositorio en GUANE-1. 
 +
 
 +
5. Finalmente deben enviar la dirección del enlace donde podrá verse su entrega al correo del profesor con copia a la cuenta de soporte de SC3UIS '''sc3.soporte(-@-)uis.edu.co''' <u>hasta la fecha y hora limite escrita en el encabezado</u>. En el cuerpo del correo deben colocar su código de estudiante, nombre completo y las indicaciones para acceder a su espacio en Github. Esto debe realizarlo únicamente desde el dia viernes 27 de noviembre de 2020, a cualquier hora. Recuerde nuevamente la fecha y hora límite: '''Sábado 28 de Noviembre de 2020 hasta las 23:59 (GMT - 5, Bogotá Time). SE RECOMIENDA ALTAMENTE SOLO ENVIAR EL CORREO EL MISMO SABADO.''' 
 +
 
 +
Es posible que encuentren soluciones de los problemas dados ya implementadas en OpenMP (de hecho, todos los problemas tienen ya solución paralela), por lo que pueden usarla como guía (no solo se limiten a copiar y pegar), entender lo que hace ya paralelizado y ''<u>deben enviar SU SOLUCIÓN con las condiciones dadas</u>''.  Aleatoriamente se preguntará de manera aleatoria acerca de los desarrollos en la sesión del martes 1 de diciembre. Por lo que una explicación del código y las decisiones tomadas debe tenerse lista.
 +
 
 +
'''''NOTA IMPORTANTE: NO DUDE EN COMUNICARSE CON NOSOTROS (sc3.operaciones(-@-)uis.edu.co , sc3.soporte(-@-)uis.edu.co con copia a  la cuenta del profesor) por email, si  tiene problemas de acceso y ejecución relacionadas con la plataforma únicamente. Para preguntas relacionadas con el desarrollo de la entrega o sobre el curso, solamente a la cuenta de email del profesor.'''''
 +
 
 +
====='''''ASIGNACIONES PRIMERA ENTREGA:'''''=====
 +
{| class="wikitable"
 +
| rowspan="2" |ADARME DAVILA JAVIER ANDRES
 +
|https://www.studytonight.com/c/programs/array/sort-array-element-program
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |ANGARITA ARDILA LUZ MIREYA
 +
|https://www.studytonight.com/c/programs/array/remove-duplicate-element-program
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |BUITRAGO MEDINA JONATHAN EDUARDO
 +
|https://www.studytonight.com/c/programs/array/checking-for-sparse-matrix
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |CASTELLANOS CONGUTA YANN KARLO
 +
|https://www.studytonight.com/c/programs/array/check-square-matrix-is-symmetric-or-not
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |CASTILLO JAIMES JORGE SAUL
 +
|https://www.studytonight.com/c/programs/array/addition-and-subtraction-of-matrices
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |CHACON SUAREZ JAVIER ALEXI
 +
|https://www.studytonight.com/c/programs/array/matrix-multiplication-program
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |DUARTE DELGADO MIGUEL ANGEL
 +
|https://www.studytonight.com/c/programs/numbers/finding-exponential-without-pow()-method
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |GOMEZ ESTUPIÑAN ANGEL FABIAN
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-3.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |MANTILLA ROMERO LAURA MARCELA
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-8.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |MARIN GARCIA JUAN CAMILO
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-19.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |NAVARRO HERRERA HORDAN ANDRES
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-30.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |OQUENDO RINCON MIGUEL ANGEL
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-34.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |PEREA PEREZ JORGE LUIS
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-33.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |PINTO DIAZ DUVAN FERNANDO
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-48.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |PORRAS MELGAREJO EDISON CAMILO
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-3.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |ROJAS CHACON DAMAR NICOLAS
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-5.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |TOLOSA VILLAMIZAR JULIAN FELIPE
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-31.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |VEGA ARRIETA JOSE SAUL
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-20.php
 +
|-
 +
|
 +
|-
 +
| rowspan="2" |VILLAMIZAR CORREA DIEGO ARMANDO
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-28.php
 +
|-
 +
|
 +
|}
 +
 
 +
===='''Evaluación 2 (25%) C/C++  Procesamiento Memoria Distribuída (Individual):'''  ====
 +
'''Fecha Limite de Entrega: Sábado 16 de Enero de 2021 hasta las 23:59 (GMT - 5, Bogotá Time)'''
 +
 
 +
Esta evaluación 2. busca como objetivo hacer un seguimiento sobre el uso de memoria distribuida a través de paso de mensajes, usando MPI. Las condiciones de entrega son fundamentalmente las mismas que en la entrega anterior.
 +
 
 +
#Tenga en cuenta todas las recomendaciones generales de entrega de la Evaluación 1.
 +
#En esta ocasión, se intentará hacer una paralelización con paso de mensajes, usando MPI. Dentro de su repositorio en github, debe crear el repositorio que llamará MPI, en el cual colocará su solución teniendo en cuenta crear un README explicando que contiene allí.
 +
#Importante que en ese repositorio deberán subir los archivos relacionados con la entrega, que básicamente son (5) cinco:
 +
#*Nuevo código en MPI (que llamaran mpi_<nombre_codigo_fuente_original>.c (Si el código fuente que recibieron por ejemplo se llama transform.c, el código nuevo que subirán allí se llamara mpi_transform.c). Como es obvio el código fuente que recibirán es en C.
 +
#*<u>Archivo sbatch para  la corrida en GUANE-1 (OBLIGATORIO). Igual si su código se llama mpi_transform el sbatch que generaran se llamara transform-mpi.sbatch.</u>
 +
#*Archivo Readme en el que muestren las opciones de compilación y de corrida (pueden realizar la compilación en gcc o icc). En ese archivo deben colocar como se ejecuta en GUANE-1. (por ejemplo. mpirun -np XXX .... ..... )
 +
#*Archivo de salida que llamarán output_<nombre_codigo_mpi>.txt, entonces si su código se llama mpi_transform.c su archivo de salida se llamara output_transform.txt
 +
#*Un archivo en el cual mostraran la comparación de tiempos para tres experiencias diferentes, todas hechas en GUANE-1: Tiempo de corrida de la solución en serial (archivo original), tiempo de corrida en tiempo de la solución en OpenMP y el tiempo de corrida de la solución con paso de mensajes en MPI.
 +
#*'''IMPORTANTE: Se deberá correr en mínimo 2 nodos (tenga en cuenta la cantidad de procesos con -np)'''
 +
#Realicé el punto 4 igualmente de la anterior evaluación 1, en este caso para MPI.
 +
#Tenga en cuenta las condiciones de entrega expresadas anteriormente para la evaluación 1.
 +
 
 +
Importante: El email con las indicaciones de corrida y demas información debe enviarse desde el viernes 15 de enero de 2021 a cualquier hora, hasta la fecha y hora límite: '''Sábado 16 de Enero de 2021 hasta las 23:59 (GMT - 5, Bogotá Time)''' 
 +
 
 +
Es posible que encuentren soluciones de los problemas dados ya implementadas en MPI (de hecho, todos los problemas tienen ya solución paralela con paso de menajes), por lo que pueden usarla como guía (no solo se limiten a copiar y pegar), y por supuesto entender lo que hace ya paralelizado pues al igual que en la primera evaluación, ''<u>deben enviar SU SOLUCIÓN con las condiciones dadas</u>''.  Aleatoriamente se preguntará de manera aleatoria acerca de los desarrollos en la sesión del martes siguiente, 20 de enero de 2021. Por lo que una explicación del código y las decisiones tomadas debe tenerse lista.
 +
 
 +
===='''Evaluación 3 (25%) C/C++ Procesamiento Memoria Híbrida CPU/GPU (Individual):''' ====
 +
'''Desarrollo: Desde el 9 al 12 de febrero de 2021'''
 +
 
 +
Esta evaluación es el desarrollo de una actividad de certificación realizada con NVIDIA y se dará las indicaciones posteriormente.
 +
 
 +
===='''Evaluación 4 (25%) Proyecto Final (Parejas y Trios):''' ====
 +
'''Entrega: 27 de Febrero de 2021 hasta las 23:59 (GMT - 5)  / Presentación:  3 de Marzo de 2021'''
 +
 
 +
Las indicaciones de esta evaluación final se darán después, antes de finalizar el año 2020.
 +
 
 +
====='''Grupos de Trabajo y Asignaciones 2-2020'''=====
 +
(A publicarse en los próximos dias)
 +
<br />
 +
====='''Grupos de Trabajo y Asignaciones 2-2018'''=====
 +
{| class="wikitable"
 +
!Grupo
 +
!Participantes
 +
!Descripción del Trabajo
 +
|-
 +
|1
 +
|'''2103657''' - ALVAREZ TEJADA GABRIEL DE JESUS
 +
 
 +
'''2122485''' - HERNANDEZ PABON JORGE ANDRES
 +
|'''Problema de N - Cuerpos (https://es.wikipedia.org/wiki/Problema_de_los_n_cuerpos<nowiki/>)'''
 +
 
 +
El problema de N-Cuerpos es bien conocido y básicamente lo que trata es determinar los movimientos individuales de un grupo de partículas materiales siguiendo física newtoniana. Diferentes propuestas para realizar la simulación de n-cuerpos se encuentran implementadas, por ejemplo la que se encuentra en: http://www.new-npac.org/projects/cdroms/cewes-1999-06-vol2/cps615course/examples96/nbody-stuff/nbody.c
 +
 
 +
La asignación de este problema es realizar un código paralelo que permita la interacción de mínimo 1000 (mil) partículas en tres dimensiones. No se recomienda el uso de interpretadores. Bonus en nota: Si presenta gráficamente la simulación de los cuerpos.
 +
|-
 +
|2
 +
|'''2140180''' - LEON PEREZ FABIAN ANDRES
 +
 
 +
'''2151196''' - LOPEZ DURAN JHON EDINSON
 +
|'''Ecuación de Calor (https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_del_calor<nowiki/>)'''
 +
 
 +
La ecuación del calor es una importante ecuación diferencial en derivadas parciales del tipo parabólica que describe la distribución del calor (o variaciones de la temperatura) en una región a lo largo del transcurso del tiempo. Dependiendo de las dimensiones a trabajar (siendo la más conocida en 2D) existen diferentes implementaciones como la que se encuentra en: https://people.sc.fsu.edu/~jburkardt/c_src/heated_plate/heated_plate.c
 +
 
 +
El objetivo que se busca en esta asignación es realizar un código paralelo que permita el análisis de la ecuación de calor de manera tridimensional en un cubo. No se recomienda el uso de interpretadores. Bonus de nota: Si se presenta gráficamente la simulación correspondiente a la solución.
 +
 
 +
|-
 +
|3
 +
|'''2143696''' - MANTILLA LOPEZ JUAN DAVID
 +
 
 +
'''2141354''' - OÑATE LIZARAZO LEYSTON ALEXANDER
 +
|'''Ecuación de Onda (https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_onda<nowiki/>)'''
 +
 
 +
La ecuación de onda es una importante ecuación diferencial en derivadas parciales lineal de segundo orden que describe la propagación de una variedad de ondas, como las ondas sonoras, las ondas de luz y las ondas en el agua. Computacionalmente se encuentran soluciones para tratar la sumación y propagación, siendo muy conocidas aquellas que han sido implementadas por supuesto en una o dos dimensiones ( http://www.labbookpages.co.uk/audio/beamforming/waveSum.html o https://computing.llnl.gov/tutorials/parallel_comp/#ExamplesWave)
 +
 
 +
La asignación a este trabajo es proponer una solución paralela para la ecuación de onda en 2D. No se recomienda el uso de interpretadores. Bonus de nota: Si se presenta gráficamente la simulación correspondiente a la solución dada. 
 +
|}
  
 +
=='''Bibliografía y Fuentes de Información'''==
 
<div class="col-md-14">
 
<div class="col-md-14">
     <div class="panel panel-darker-white-border">  
+
     <div class="panel panel-darker-white-border"><ul>
        <div class="panel-heading">
+
                <li>Elements of Parallel Computing, Eric Aubanel (Chapman & Hall/CRC)</li>
            <h3 class="panel-title">BIBLIOGRAFÍA Y FUENTES DE INFORMACION</h3>
+
                <li>Essentials of Computer Architecture, D. Comer (CRC Press)
        </div>
+
</li>
        <div class="panel-body">
+
                <li>High Performance Embedded Computing: Applications in Cyber-Physical systems and Mobile Computing, M. Wolf (Morgan Kaufmann)
            <ul>
+
</li>
                 <li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/ The Fourth Paradigm: Data-Intensive Scientific Discovery]</li>
+
                 <li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/ The Fourth Paradigm: Data-Intensive Scientific Discovery]
 +
</li>
 
                 <li>[http://www.mcs.anl.gov/~itf/dbpp/ Designing and Building Parallel Programs, by Ian Foster]</li>
 
                 <li>[http://www.mcs.anl.gov/~itf/dbpp/ Designing and Building Parallel Programs, by Ian Foster]</li>
 
                 <li>[http://www.cise.ufl.edu/research/ParallelPatterns/ Patterns for Parallel Programming, by Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill. Software Patterns Series, Addison Wesley Ed., USA. 2009]</li>
 
                 <li>[http://www.cise.ufl.edu/research/ParallelPatterns/ Patterns for Parallel Programming, by Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill. Software Patterns Series, Addison Wesley Ed., USA. 2009]</li>
                 <li>The Art of Concurrency “A thread Monkey’s Guide to Writing Parallel Applications”, by Clay Breshears (Ed. O Reilly, 2009) </li>
+
                <li>Patterns for Parallel Software Design, Jorge Luis Ortega-Arjona (Wiley) </li>
 +
                <li>Structured Parallel Programming: Patterns for Efficient Computation, M. McCool, A. D. Robison and J. Reinders (Morgan Kaufmann)
 +
</li>
 +
                 <li>The Art of Concurrency “A thread Monkey’s Guide to Writing Parallel Applications”, by Clay Breshears (Ed. O Reilly, 2009)  
 +
</li>
 
                 <li>Parallel Scientific Computing in C++ and MPI « A Seamless Approach to Parallel Algorithms and Their Implementation », Karniadakis and Kirby II (Cambridge Press) </li>
 
                 <li>Parallel Scientific Computing in C++ and MPI « A Seamless Approach to Parallel Algorithms and Their Implementation », Karniadakis and Kirby II (Cambridge Press) </li>
 +
                <li>Parallel And Distributed Computation Numerical Methods, D. P. Bertsekas and J. N. Tsitsiklis (Prentice Hall)
 +
</li>
 +
                <li>An Introduction to High Performance Scientific Computing, Scientific and Engineering Computation Series, Ll. D. Fosdick, E. R. Jessup, C. J. C. Schauble and G. Dmik (MIT Press)
 +
</li>
 +
                <li> The Algorithms Design Manual, S. S. Skiena ( Springer)
 +
</li>
 
                 <li>Algorithms Sequential and Parallel « A Unified Approach » Miller and Boxer (Computing Engineering Series) </li>
 
                 <li>Algorithms Sequential and Parallel « A Unified Approach » Miller and Boxer (Computing Engineering Series) </li>
 
                 <li>Parallel Algorithms, Cassanova, Legrand and Robert (Chapman and Hall/CRC) </li>
 
                 <li>Parallel Algorithms, Cassanova, Legrand and Robert (Chapman and Hall/CRC) </li>
 +
                <li>Fundamentals of Multicore Software Development, Ed. Victor Pankratius, Ali-Reza Adl-Tabatabai and Walter Tichy (CRC Press)
 +
</li>
 +
                <li>Introduction to HPC with MPI for Data Science, Frank Nielsen (Springer)
 +
</li>
 
                 <li>Programming Massively Parallel Processors « A Hands-on Approach » , Kirk and Hwu (Nvidia/Morgan Kaufmann) </li>
 
                 <li>Programming Massively Parallel Processors « A Hands-on Approach » , Kirk and Hwu (Nvidia/Morgan Kaufmann) </li>
 +
                <li>CUDA Application Design and Development, Rob Farber (Nvidia/Morgan Kaufmann)
 +
</li>
 
                 <li>Introduction to High Performance Computing for Scientists and Engineers, Hager and Wellein (Chapman and Hall/CRC) </li>
 
                 <li>Introduction to High Performance Computing for Scientists and Engineers, Hager and Wellein (Chapman and Hall/CRC) </li>
 
                 <li>Sourcebook of Parallel Computing , Dongarra, Foster, Fox, Groop, Kennedy, Torczon and White (Morgan Kaufmann) </li>
 
                 <li>Sourcebook of Parallel Computing , Dongarra, Foster, Fox, Groop, Kennedy, Torczon and White (Morgan Kaufmann) </li>
 +
                <li>CUDA Programming: A Developer's Guide to Parallel Computing with GPUs, S. Cook (Morgan Kaufmann)
 +
</li>
 +
                <li>The CUDA Handbook: A Comprehensive Guide to GPU Programming, N. Wilt (Addison-Wesley)
 +
</li>
 
                 <li>CUDA by Example « An Introduction to General-Purpose GPU Programming » Sanders and Kandrot (Nvidia/Addison Wesley) </li>
 
                 <li>CUDA by Example « An Introduction to General-Purpose GPU Programming » Sanders and Kandrot (Nvidia/Addison Wesley) </li>
 +
                <li>CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming, G. Ruetsch and M. Fatica (Morgan Kaufmann/PGI/Nvidia)
 +
</li>
 +
                <li>HPC@Green IT: Green High Performance Computing Methods, R. Gruber and V. Keller (Springer)
 +
</li>
 +
                <li>OpenACC for Programmers: Concepts and Strategies, S. Chandraserkaran and G. Juckeland (Addison-Wesley)
 +
</li>
 +
                <li>OpenACC: Parallel Programming with OpenACC, Edited by Rob Farber (Morgan Kaufmann)
 +
</li>
 +
                <li>High Performance Parallelism Pearls: Multicore and Many-core Programming Approaches, J. Reinders and J. Jeffers (Morgan Kaufmann) 
 +
</li>
 +
                <li>[https://www.openmp.org/ OpenMP] 
 +
</li>
 +
                <li>[https://www.openacc.org/ OpenACC] 
 +
</li>
 
                 <li>[http://developer.nvidia.com/ NVIDIA]</li>
 
                 <li>[http://developer.nvidia.com/ NVIDIA]</li>
 
                 <li>[http://www.sc3.uis.edu.co/ SC3]</li>
 
                 <li>[http://www.sc3.uis.edu.co/ SC3]</li>
 +
                <li>[http://www.red-ricap.org/ RICAP]
 +
</li>
 
                 <li>[https://computing.llnl.gov/tutorials/parallel_comp/ Computing.llnl.gov]</li>
 
                 <li>[https://computing.llnl.gov/tutorials/parallel_comp/ Computing.llnl.gov]</li>
 
                 <li>[http://www.sc-camp.org/ SC-Camp]</li>
 
                 <li>[http://www.sc-camp.org/ SC-Camp]</li>
             </ul>
+
             </ul></div>
        </div>
 
    </div>
 
 
</div>
 
</div>
 +
 +
=='''PRESENTACIONES DEL CURSO'''==
 +
 +
*An Introduction to HPC and Advanced Computing
 +
**[[:File:IntroPPHPC_1.pdf|Part 1]]
 +
**[[:File:IntroPPHPC_2.pdf|Part 2]]
 +
**[[:File:IntroPPHPC_3.pdf|Part 3]]
 +
*[[:File:Tutorial Linux.pdf|Introducción Linux]]
 +
*[[:File:slurm.pdf|Simple Linux Utility for Resource Management]]
 +
*[[:File:PP-ConcIntro.pdf|Concurrency and Paralellism]]
 +
*[[:File:Slides-debug-Course.pdf|Debugging]]
 +
*[[:File:MemCompOpenMP3.pdf|Shared Memory Programming with OpenMP]] (In Spanish/En Español)
 +
*[[:File:SharedMPI14c.pdf|Distributed Memory Exploitation with MPI: An Introduction]]
 +
*Hybrid/Heterogeneous Computing
 +
**[[:File:IntroGPUs.pdf|Introduction to GPU Computing]]
 +
**[[:File:IntroCUDA.pdf|Introduction to CUDA]]
 +
**[[:File:IntroOpenACC.pdf|Introduction to OpenACC]]
 +
 +
=='''CONSULTA A ESTUDIANTES'''==
 +
Debido a las circunstancias actuales, las consultas pueden planificarse de manera asincrónica via correo electrónico, enviando un correo al profesor de la asignatura o al auxiliar de postgrado. En la práctica, via el foro creado para tal fin o durante las sesiones de las mismas.

Latest revision as of 21:18, 24 November 2020

Volver a Cursos


Introducción a la Computación Paralela - Código 28661

Carlos Jaime Barrios Hernandez, PhD. - (c b a r r i o s (@) u i s . e d u . c o )

Asistencia Técnica-Teórica:. Equipo SC3UIS y CAGE

NoThanksButWereBusy.png

PRESENTACION DEL CURSO

La ruptura tecnológica hace que la computación sea quizás el área del conocimiento más dinámico que existe y que no solo promueve tendencias sino también cambios sociales, desde que la información y su tratamiento no solo es una necesidad sino una exigencia. La computación paralela, si bien no es nada nuevo, como parte de esa "exigencia" permite la explotación de sistemas que desde hace más de treinta años están disponibles, pero que en algunos medios se ve aún como algo exótico, ignorando que gracias a esas posibilidades, desde poder escuchar música, hablar y tomar fotos de manera simultánea en un dispositivo móvil, pasando por pronosticar el clima o mercados, almacenar datos en la nube hasta la realidad de implementar soluciones y algoritmos de inteligencia artificial hoy, existe porque hay múltiples unidades de procesamiento que pueden ser programadas de manera paralela y concurrente.

El curso, que es para principiantes, esta dirigido a estudiantes de ingeniería de sistemas y ciencias de la computación, cuyo principal objetivo es ofrecer fundamentos para la explotación de la concurrencia, la explotación de paradigmas de programación dirigidos al paralelismo, sin ignorar algunos conceptos arquitecturales necesarios para entender que soporta ese procesamiento en paralelo. A partir de este curso, los participantes manejaran la terminología necesaria igualmente y tendrán la base para a partir de allí seguir cursos avanzados y seminarios especializados.

Contenido

  1. Introducción a la Computación Paralela
    • Pensamiento Paralelo y Pervasibidad
    • Elementos de Paralelismo
    • Evolución de la Computación Paralela
    • Computación de Alto Rendimiento (HPC)
  2. Arquitecturas Paralelas y Sistemas Escalables
    • Modelos de Máquinas Paralelas
    • Modelos de Ejecución Paralela
    • Paralelismo y Comunicación
    • Caracterización de Flynn
    • Multinúcleos y Multiprocesamiento (multicores - multiprocessing)
    • Procesamiento Vectorial
    • Arquitecturas para el Procesamiento Masivamente Paralelo (Manycores)
    • Modelos de Memoria
      • Jerarquia de Memoria
    • Sistemas Distribuidos de Gran Escala
    • Unidades de Procesamiento Tensor
    • Unidades de Procesamiento Cuántico
    • Sistemas Operativos, Sistemas de Archivos, Calendarización y Monitoreo en Arquitecturas Paralelas
      • Aspectos especiales de Linux y Slurm
    • Top500 y Otros Rankings
  3. Algoritmos Concurrentes y Paralelos
    • Caracterización de Paralelismo
    • Granularidad
    • Multihilos y Multiprocesos
    • Modelos de Computación (RAM, PRAM, Sorting Networks, BSP, LogP y otros)
    • Modelos de Algoritmos Concurrentes
      • Descomposición de Tareas
      • Descomposición de Datos
      • Dividir y Conquistar
      • Tuberias (Pipeline)
      • Recursividad y Otros (Embarrassingly Parallelism y Otros)
    • Algoritmos No Paralelos
    • Balanceo de Carga y Calendarización (Scheduling)
  4. Paradigmas y Modelos de Programación Paralela
    • Ambientes de Programación Paralela
    • Modelo de Programación de Memoria Compartida
      • OpenMP
    • Modelo de Programación de Memoria Distribuída
      • Paso de Mensajes con MPI
    • Modelo Programación de Memoria Híbrida/Heterogénea
      • Programación de Sistemas CPU-GPU (Sistemas GPGPU)
        • Fundamentos de Programación de GPUs y Múltiples GPU con CUDA
    • Uso de Directivas de Aceleración con OpenACC
    • Otros Mecanismos de Implementación y Aceleración de Aplicaciones
  5. Optimización
    • Optimización Local y Global Paralela
  6. Evaluación de Desempeño
    • Latencia y Throughput
    • Speedup (Aceleración), Eficiencia y Escalabilidad
    • Ley de Amhdal
    • Ley de Gustaffon-Barsis
    • Complejidad Asimptótica (Aceleración y Eficiencia)
    • Modelo de Little
    • Análisis de Rendimiento y Tunning (Ajuste)
  7. Debugging and Profiling
    • Consideraciones de Debugging y Monitoreo de Rendimiento y Comportamiento
    • Herramientas para el Debugging y el Profling
  8. Lineamientos para el Desarrollo de Aplicaciones Paralelas
    • Patrones para el Flujo de Control y de Ejecución
    • Patrones para la Administración de Datos
    • Espacios de Diseño y Desarrollo de Programas Paralelos
      • Búsqueda de Explotación de Concurrencia
      • Diseño de Estructura de Algoritmo
      • Selección de Estructuras de Soporte de Algoritmos Paralelos
      • Selección de Mecanismos de Implementación
  9. Direcciones y Tendencias en Programación Paralela
    • HPC@Green: Eficiencia Computacional Hoy (Consumo Energético/Procesamiento)
    • Explotación de Unidades Tensor y Aplicaciones Emergentes
    • Extracción de Paralelismo en Códigos Secuenciales
    • Explotación de Memoria
    • Paradigmas de Programación Emergentes

Metodología - Curso Especial 2- 2020

Se realizarán sesiones teóricas via visioconferencia de manera sincrónica los dias martes de 10:05 a.m. a 11:55 y de manera sincrónica/semi-asincrónica laboratorios prácticos en la tarde de los dias martes. El acompañamiento e interacción se realizará a través de un foro para algunas de las prácticas que esta a disposición en este sitio.

Evaluación

Evaluaciones programadas para el 2do Semestre de 2020

Las evaluaciones programadas para este semestre, se detallarán en la sesión teórica, normalmente dos semanas antes de la fecha de entrega. Igualmente las prácticas serán informadas en la sesión teórica previa así como las fechas y horas limites de entrega. Las diferentes entregas que son individuales o en grupo de acuerdo se diga, se realizarán principalmente via github.

Evaluación 1 (25%) C/C++ Procesamiento Memoria Compartida (Individual):

Fecha Limite de Entrega: Sábado 28 de Noviembre de 2020 hasta las 23:59 (GMT - 5, Bogotá Time)

En esta primera entrega, dividida en cinco partes, tiene como objetivo evaluar las competencias adquiridas en torno a la transformación de códigos que se encuentran implementados en C/C++ para su ejecución paralela usando OpenMP. Cada uno de los estudiantes recibirá un correo electrónico personalizado que contendrá la descripción y encabezado del código recibido (en inglés principalmente), junto con el código respectivo (en .c). Este código se encuentra debidamente documentado y licenciado para su uso bajo una licencia GPL .

La metodología para realizar la evaluación y la entrega es la siguiente:

  1. Cree o reactive una cuenta existente en Github (puede usar cualquier nombre o pseudonimo), sin embargo tenga en cuenta que el github que usted cree es parte de sus evidencias de presentación profesional, que incluso se referencian hoy en dia en hojas de vida.
    • Debe vincularse a Supercomputación y Cálculo Científico de la Universidad Industrial de Santander (SC3UIS) y dentro de SC3UIS, unirse al equipo beginners-hpc https://github.com/orgs/SC3UIS/teams/beginners-hpc
    • Una vez asociados, deberán crear un repositorio (carpeta) de la siguiente manera: IntroPP<Código de Estudiante>, asi, si por ejemplo su código de estudiante es 941108, el repositorio será IntroPP941108.
    • Dentro de ese repositorio crear un repositorio adicional que se llame OpenMP
      • Es recomendable por cada nuevo repositorio que genere, crear un README explicando que contiene allí.
    • Y en ese repositorio deberán subir los archivos relacionados con la entrega, que básicamente son (5) cinco:
      • Archivo con el código original en C (se había dicho que no pero se decidió que si)
      • Archivo con el nuevo código en OpenMP (que llamaran omp_<nombre_codigo_fuente_original>.c (Si el código fuente que recibieron por ejemplo se llama transform.c, el código nuevo que subirán allí se llamara omp_transform.c). Como es obvio el código fuente que recibirán es en C.
      • Archivo sbatch para la corrida en GUANE-1 (BONUS). Igual si su código se llama omp_transform el sbatch se llamara transform.sbatch.
      • Archivo Readme, en no mas de diez lineas deben explicar con sus palabras y en español que hace el código, deben muestrar las opciones de compilación y de corrida (pueden realizar la compilación en gcc o icc). En ese archivo deben colocar como se ejecuta en local (en sus maquinas) y como se ejecuta en GUANE-1.
      • Archivo de salida que llamarán output_<nombre_codigo_openmp>.txt, entonces si su código se llama omp_transform.c su archivo de salida se llamara output_transform.txt
  2. Para el código recibido, deben realizar una versión en OpenMP de acuerdo a los fundamentos vistos en clase y los que consulten en la bibliografía relacionada. El nuevo código que realicen lo deben igualmente documentar, manteniendo el estilo de la documentación, por ejemplo:
/*

  Purpose:

    TRANSFORM is an example of a transformation of an EDP using some parameters for Intro PP Students.

  Example:

    31 May 2001 09:45:54 AM

  Licensing:

    This code is distributed under the GNU LGPL license.

  Modified:

    24 September 2003

  Author:
  George 
  OpenMP Modification:
  27 July 2020 by Levy Rincon, Universidad Industrial de Santander levy.rincon@correouis.edu.co                   
  This OpenMP Modification makes a parallelization of the original Code...  
*/

(Tengan en cuenta solo deben adicionar una sección de su modificaciones, explicando brevemente que es lo que hace, puede hacerlo en inglés (recomendado) o en español)

Nota importante: usted puede realizar modificaciones al código recibido originalmente, por supuesto debe explicar esas modificaciones y por qué las hace de acuerdo a la versión original. Puede subir el archivo original dado, pero no olvide colocar en los comentarios el autor y de donde fue seleccionado.

3. Como se dijo inicialmente y por eso se insiste, deben documentar en el cuerpo de su código fuente las variaciones que ustedes hagan. Pueden hacerlo en español (pero se recomienda tratar de hacerlo en inglés).

4. Los mismos (5) cinco archivos igualmente MAS EL ARCHIVO EJECUTABLE, con las mismas condiciones deben ser colocados dentro de su carpeta personal en la plataforma de SC3UIS y su cuenta asociada a GUANE-1 (ver el punto 1.), en otras palabras, cree una carpeta llamada OpenMP. En total son seis archivos en su repositorio en GUANE-1.

5. Finalmente deben enviar la dirección del enlace donde podrá verse su entrega al correo del profesor con copia a la cuenta de soporte de SC3UIS sc3.soporte(-@-)uis.edu.co hasta la fecha y hora limite escrita en el encabezado. En el cuerpo del correo deben colocar su código de estudiante, nombre completo y las indicaciones para acceder a su espacio en Github. Esto debe realizarlo únicamente desde el dia viernes 27 de noviembre de 2020, a cualquier hora. Recuerde nuevamente la fecha y hora límite: Sábado 28 de Noviembre de 2020 hasta las 23:59 (GMT - 5, Bogotá Time). SE RECOMIENDA ALTAMENTE SOLO ENVIAR EL CORREO EL MISMO SABADO.

Es posible que encuentren soluciones de los problemas dados ya implementadas en OpenMP (de hecho, todos los problemas tienen ya solución paralela), por lo que pueden usarla como guía (no solo se limiten a copiar y pegar), entender lo que hace ya paralelizado y deben enviar SU SOLUCIÓN con las condiciones dadas. Aleatoriamente se preguntará de manera aleatoria acerca de los desarrollos en la sesión del martes 1 de diciembre. Por lo que una explicación del código y las decisiones tomadas debe tenerse lista.

NOTA IMPORTANTE: NO DUDE EN COMUNICARSE CON NOSOTROS (sc3.operaciones(-@-)uis.edu.co , sc3.soporte(-@-)uis.edu.co con copia a la cuenta del profesor) por email, si tiene problemas de acceso y ejecución relacionadas con la plataforma únicamente. Para preguntas relacionadas con el desarrollo de la entrega o sobre el curso, solamente a la cuenta de email del profesor.

ASIGNACIONES PRIMERA ENTREGA:
ADARME DAVILA JAVIER ANDRES https://www.studytonight.com/c/programs/array/sort-array-element-program
ANGARITA ARDILA LUZ MIREYA https://www.studytonight.com/c/programs/array/remove-duplicate-element-program
BUITRAGO MEDINA JONATHAN EDUARDO https://www.studytonight.com/c/programs/array/checking-for-sparse-matrix
CASTELLANOS CONGUTA YANN KARLO https://www.studytonight.com/c/programs/array/check-square-matrix-is-symmetric-or-not
CASTILLO JAIMES JORGE SAUL https://www.studytonight.com/c/programs/array/addition-and-subtraction-of-matrices
CHACON SUAREZ JAVIER ALEXI https://www.studytonight.com/c/programs/array/matrix-multiplication-program
DUARTE DELGADO MIGUEL ANGEL https://www.studytonight.com/c/programs/numbers/finding-exponential-without-pow()-method
GOMEZ ESTUPIÑAN ANGEL FABIAN https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-3.php
MANTILLA ROMERO LAURA MARCELA https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-8.php
MARIN GARCIA JUAN CAMILO https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-19.php
NAVARRO HERRERA HORDAN ANDRES https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-30.php
OQUENDO RINCON MIGUEL ANGEL https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-34.php
PEREA PEREZ JORGE LUIS https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-33.php
PINTO DIAZ DUVAN FERNANDO https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-48.php
PORRAS MELGAREJO EDISON CAMILO https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-3.php
ROJAS CHACON DAMAR NICOLAS https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-5.php
TOLOSA VILLAMIZAR JULIAN FELIPE https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-31.php
VEGA ARRIETA JOSE SAUL https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-20.php
VILLAMIZAR CORREA DIEGO ARMANDO https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-28.php

Evaluación 2 (25%) C/C++ Procesamiento Memoria Distribuída (Individual):

Fecha Limite de Entrega: Sábado 16 de Enero de 2021 hasta las 23:59 (GMT - 5, Bogotá Time)

Esta evaluación 2. busca como objetivo hacer un seguimiento sobre el uso de memoria distribuida a través de paso de mensajes, usando MPI. Las condiciones de entrega son fundamentalmente las mismas que en la entrega anterior.

  1. Tenga en cuenta todas las recomendaciones generales de entrega de la Evaluación 1.
  2. En esta ocasión, se intentará hacer una paralelización con paso de mensajes, usando MPI. Dentro de su repositorio en github, debe crear el repositorio que llamará MPI, en el cual colocará su solución teniendo en cuenta crear un README explicando que contiene allí.
  3. Importante que en ese repositorio deberán subir los archivos relacionados con la entrega, que básicamente son (5) cinco:
    • Nuevo código en MPI (que llamaran mpi_<nombre_codigo_fuente_original>.c (Si el código fuente que recibieron por ejemplo se llama transform.c, el código nuevo que subirán allí se llamara mpi_transform.c). Como es obvio el código fuente que recibirán es en C.
    • Archivo sbatch para la corrida en GUANE-1 (OBLIGATORIO). Igual si su código se llama mpi_transform el sbatch que generaran se llamara transform-mpi.sbatch.
    • Archivo Readme en el que muestren las opciones de compilación y de corrida (pueden realizar la compilación en gcc o icc). En ese archivo deben colocar como se ejecuta en GUANE-1. (por ejemplo. mpirun -np XXX .... ..... )
    • Archivo de salida que llamarán output_<nombre_codigo_mpi>.txt, entonces si su código se llama mpi_transform.c su archivo de salida se llamara output_transform.txt
    • Un archivo en el cual mostraran la comparación de tiempos para tres experiencias diferentes, todas hechas en GUANE-1: Tiempo de corrida de la solución en serial (archivo original), tiempo de corrida en tiempo de la solución en OpenMP y el tiempo de corrida de la solución con paso de mensajes en MPI.
    • IMPORTANTE: Se deberá correr en mínimo 2 nodos (tenga en cuenta la cantidad de procesos con -np)
  4. Realicé el punto 4 igualmente de la anterior evaluación 1, en este caso para MPI.
  5. Tenga en cuenta las condiciones de entrega expresadas anteriormente para la evaluación 1.

Importante: El email con las indicaciones de corrida y demas información debe enviarse desde el viernes 15 de enero de 2021 a cualquier hora, hasta la fecha y hora límite: Sábado 16 de Enero de 2021 hasta las 23:59 (GMT - 5, Bogotá Time)

Es posible que encuentren soluciones de los problemas dados ya implementadas en MPI (de hecho, todos los problemas tienen ya solución paralela con paso de menajes), por lo que pueden usarla como guía (no solo se limiten a copiar y pegar), y por supuesto entender lo que hace ya paralelizado pues al igual que en la primera evaluación, deben enviar SU SOLUCIÓN con las condiciones dadas. Aleatoriamente se preguntará de manera aleatoria acerca de los desarrollos en la sesión del martes siguiente, 20 de enero de 2021. Por lo que una explicación del código y las decisiones tomadas debe tenerse lista.

Evaluación 3 (25%) C/C++ Procesamiento Memoria Híbrida CPU/GPU (Individual):

Desarrollo: Desde el 9 al 12 de febrero de 2021

Esta evaluación es el desarrollo de una actividad de certificación realizada con NVIDIA y se dará las indicaciones posteriormente.

Evaluación 4 (25%) Proyecto Final (Parejas y Trios):

Entrega: 27 de Febrero de 2021 hasta las 23:59 (GMT - 5) / Presentación: 3 de Marzo de 2021

Las indicaciones de esta evaluación final se darán después, antes de finalizar el año 2020.

Grupos de Trabajo y Asignaciones 2-2020

(A publicarse en los próximos dias)

Grupos de Trabajo y Asignaciones 2-2018
Grupo Participantes Descripción del Trabajo
1 2103657 - ALVAREZ TEJADA GABRIEL DE JESUS

2122485 - HERNANDEZ PABON JORGE ANDRES

Problema de N - Cuerpos (https://es.wikipedia.org/wiki/Problema_de_los_n_cuerpos)

El problema de N-Cuerpos es bien conocido y básicamente lo que trata es determinar los movimientos individuales de un grupo de partículas materiales siguiendo física newtoniana. Diferentes propuestas para realizar la simulación de n-cuerpos se encuentran implementadas, por ejemplo la que se encuentra en: http://www.new-npac.org/projects/cdroms/cewes-1999-06-vol2/cps615course/examples96/nbody-stuff/nbody.c

La asignación de este problema es realizar un código paralelo que permita la interacción de mínimo 1000 (mil) partículas en tres dimensiones. No se recomienda el uso de interpretadores. Bonus en nota: Si presenta gráficamente la simulación de los cuerpos.

2 2140180 - LEON PEREZ FABIAN ANDRES

2151196 - LOPEZ DURAN JHON EDINSON

Ecuación de Calor (https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_del_calor)

La ecuación del calor es una importante ecuación diferencial en derivadas parciales del tipo parabólica que describe la distribución del calor (o variaciones de la temperatura) en una región a lo largo del transcurso del tiempo. Dependiendo de las dimensiones a trabajar (siendo la más conocida en 2D) existen diferentes implementaciones como la que se encuentra en: https://people.sc.fsu.edu/~jburkardt/c_src/heated_plate/heated_plate.c

El objetivo que se busca en esta asignación es realizar un código paralelo que permita el análisis de la ecuación de calor de manera tridimensional en un cubo. No se recomienda el uso de interpretadores. Bonus de nota: Si se presenta gráficamente la simulación correspondiente a la solución.

3 2143696 - MANTILLA LOPEZ JUAN DAVID

2141354 - OÑATE LIZARAZO LEYSTON ALEXANDER

Ecuación de Onda (https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_onda)

La ecuación de onda es una importante ecuación diferencial en derivadas parciales lineal de segundo orden que describe la propagación de una variedad de ondas, como las ondas sonoras, las ondas de luz y las ondas en el agua. Computacionalmente se encuentran soluciones para tratar la sumación y propagación, siendo muy conocidas aquellas que han sido implementadas por supuesto en una o dos dimensiones ( http://www.labbookpages.co.uk/audio/beamforming/waveSum.html o https://computing.llnl.gov/tutorials/parallel_comp/#ExamplesWave)

La asignación a este trabajo es proponer una solución paralela para la ecuación de onda en 2D. No se recomienda el uso de interpretadores. Bonus de nota: Si se presenta gráficamente la simulación correspondiente a la solución dada.

Bibliografía y Fuentes de Información

  • Elements of Parallel Computing, Eric Aubanel (Chapman & Hall/CRC)
  • Essentials of Computer Architecture, D. Comer (CRC Press)
  • High Performance Embedded Computing: Applications in Cyber-Physical systems and Mobile Computing, M. Wolf (Morgan Kaufmann)
  • The Fourth Paradigm: Data-Intensive Scientific Discovery
  • Designing and Building Parallel Programs, by Ian Foster
  • Patterns for Parallel Programming, by Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill. Software Patterns Series, Addison Wesley Ed., USA. 2009
  • Patterns for Parallel Software Design, Jorge Luis Ortega-Arjona (Wiley)
  • Structured Parallel Programming: Patterns for Efficient Computation, M. McCool, A. D. Robison and J. Reinders (Morgan Kaufmann)
  • The Art of Concurrency “A thread Monkey’s Guide to Writing Parallel Applications”, by Clay Breshears (Ed. O Reilly, 2009)
  • Parallel Scientific Computing in C++ and MPI « A Seamless Approach to Parallel Algorithms and Their Implementation », Karniadakis and Kirby II (Cambridge Press)
  • Parallel And Distributed Computation Numerical Methods, D. P. Bertsekas and J. N. Tsitsiklis (Prentice Hall)
  • An Introduction to High Performance Scientific Computing, Scientific and Engineering Computation Series, Ll. D. Fosdick, E. R. Jessup, C. J. C. Schauble and G. Dmik (MIT Press)
  • The Algorithms Design Manual, S. S. Skiena ( Springer)
  • Algorithms Sequential and Parallel « A Unified Approach » Miller and Boxer (Computing Engineering Series)
  • Parallel Algorithms, Cassanova, Legrand and Robert (Chapman and Hall/CRC)
  • Fundamentals of Multicore Software Development, Ed. Victor Pankratius, Ali-Reza Adl-Tabatabai and Walter Tichy (CRC Press)
  • Introduction to HPC with MPI for Data Science, Frank Nielsen (Springer)
  • Programming Massively Parallel Processors « A Hands-on Approach » , Kirk and Hwu (Nvidia/Morgan Kaufmann)
  • CUDA Application Design and Development, Rob Farber (Nvidia/Morgan Kaufmann)
  • Introduction to High Performance Computing for Scientists and Engineers, Hager and Wellein (Chapman and Hall/CRC)
  • Sourcebook of Parallel Computing , Dongarra, Foster, Fox, Groop, Kennedy, Torczon and White (Morgan Kaufmann)
  • CUDA Programming: A Developer's Guide to Parallel Computing with GPUs, S. Cook (Morgan Kaufmann)
  • The CUDA Handbook: A Comprehensive Guide to GPU Programming, N. Wilt (Addison-Wesley)
  • CUDA by Example « An Introduction to General-Purpose GPU Programming » Sanders and Kandrot (Nvidia/Addison Wesley)
  • CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming, G. Ruetsch and M. Fatica (Morgan Kaufmann/PGI/Nvidia)
  • HPC@Green IT: Green High Performance Computing Methods, R. Gruber and V. Keller (Springer)
  • OpenACC for Programmers: Concepts and Strategies, S. Chandraserkaran and G. Juckeland (Addison-Wesley)
  • OpenACC: Parallel Programming with OpenACC, Edited by Rob Farber (Morgan Kaufmann)
  • High Performance Parallelism Pearls: Multicore and Many-core Programming Approaches, J. Reinders and J. Jeffers (Morgan Kaufmann)
  • OpenMP
  • OpenACC
  • NVIDIA
  • SC3
  • RICAP
  • Computing.llnl.gov
  • SC-Camp

PRESENTACIONES DEL CURSO

CONSULTA A ESTUDIANTES

Debido a las circunstancias actuales, las consultas pueden planificarse de manera asincrónica via correo electrónico, enviando un correo al profesor de la asignatura o al auxiliar de postgrado. En la práctica, via el foro creado para tal fin o durante las sesiones de las mismas.