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

From Supercomputación y Cálculo Científico UIS
 
(66 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  __NOTOC__<div class="btn btn-primary"><i class="fa  fa-long-arrow-left"></i> [[Cursos]]</div></p>
+
Volver a  [[Cursos]]
 +
 
 +
 
 +
'''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">
    <div class="col-md-14">
+
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.
        <div class="well well-midnight">
+
 
                <h5>'''Introducción a la Computación Paralela - Código 2661'''</h5>
+
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 class="panel-body">
+
 
            <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>Auxiliatura Técnica. Equipo SC3UIS</p>         
 
        </div>
 
    </div>
 
 
</div>
 
</div>
  
 +
==='''Contenido'''===
 
<div class="col-md-14">
 
<div class="col-md-14">
    <div class="panel panel-darker-white-border">
+
#Introducción a la Computación Paralela
        <div class="panel-heading">
+
#*Pensamiento Paralelo y Pervasibidad
            <h3 class="panel-title">PRESENTACION</h3>
+
#*Elementos de Paralelismo
        </div>
+
#*Evolución de la Computación Paralela
        <div class="panel-body">
+
#*Computación de Alto Rendimiento (HPC)
            <p>La computación paralela más que una tendencia de programación  es una exigencia industrial y real. Los sistemas paralelos se encuentran listos para ser explotados, desde dispositivos portátiles y embebidos hasta supercomputadoras.</p>
+
#Arquitecturas Paralelas y Sistemas Escalables
            <p>Este curso introductorio dirigido a estudiantes de ingeniería de sistemas, es un acercamiento a conceptos básicos y estrategias de programación paralela. Trata desde sistemas y arquitecturas escalables, hasta ambientes de programación paralela, haciendo un fuerte énfasis en el análisis y diseño de algoritmos paralelos concurrentes y en la evaluación de arquitecturas para soluciones científicas e industriales.</p><p></p><p>Las sesiones se realizan en el CENTIC.</p>
+
#*Modelos de Máquinas Paralelas
        </div>
+
#*Modelos de Ejecución Paralela
    </div>
+
#*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
 +
#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)
 +
#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
 +
#Optimización
 +
#*Optimización Local y Global Paralela
 +
#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)
 +
#Debugging and Profiling
 +
#*Consideraciones de Debugging y Monitoreo de Rendimiento y Comportamiento
 +
#*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 1- 2020</big>'''===
    <div class="panel panel-darker-white-border">  
+
Se realizarán sesiones teóricas via visioconferencia de manera sincrónica los dias martes de 10:15 a.m. a 11:45 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 class="panel-heading">
+
<br />
            <h3 class="panel-title">Contenido</h3>
+
==='''<big>Evaluación</big>'''===
        </div>
+
====='''Evaluaciones programadas para el 1er Semestre de 2020'''=====
        <div class="panel-body">
+
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.
            <ol>
+
<br />
                <li>Introducción a la Programación Paralela</li>
+
 
                <li>Introducción a las Arquitecturas y Sistemas Escalables</li>
+
*'''Evaluación 1 (20%) C/C++  Procesamiento Memoria Compartida (Individual): Entrega: 30 de Junio de 2020'''
                <li>Algoritmos Concurrentes y Paralelos</li>
+
*'''Evaluación 2 (20%) C/C++  Procesamiento Memoria Distribuída (Individual): Entrega: 28 de Julio de 2020'''
                <li>Modelos de Programación Paralela (Introducción a la programación de Memoria Distribuida, Introducción a la programación de Memoria</li>
+
*'''Evaluación 3 (20%) C/C++ Procesamiento Memoria Híbrida CPU/GPU (Individual): Entrega: 18 de Agosto de 2020'''
                <li>Compartida, Introducción al a programación de maquinas masivamente paralelas y sistemas híbridos)</li>
+
*'''Evaluación 4 (25%) Proyecto Final (Parejas y Trios): Entrega: 6 de Septiembre de 2020 / Presentación 7 de Septiembre de 2020'''
                <li>Lineamientos para el desarrollo de Aplicaciones Paralelas</li>
+
*'''Evaluación 5 (15%) Prácticas: Entregas programadas desde el Martes 2 de Junio de 2020'''
                <li>Evaluación de Desempeño</li>
+
 
                <li>Direcciones y Temas Candentes en Programación Paralela</li>
+
====='''Grupos de Trabajo y Asignaciones 2-2018'''=====
            </ol>
+
{| class="wikitable"
        </div>
+
!Grupo
    </div>
+
!Participantes
</div>
+
!Descripción del Trabajo
 +
|-
 +
|1
 +
|'''2103657''' - ALVAREZ TEJADA GABRIEL DE JESUS
  
<div class="col-md-14">
+
'''2122485''' - HERNANDEZ PABON JORGE ANDRES
    <div class="panel panel-darker-white-border">
+
|'''Problema de N - Cuerpos (https://es.wikipedia.org/wiki/Problema_de_los_n_cuerpos<nowiki/>)'''
        <div class="panel-heading">
 
            <h3 class="panel-title">ASPECTOS METODOLOGICOS</h3>
 
        </div>
 
        <div class="panel-body">
 
            <ol>
 
                <li>Sesiones Teórico-Prácticas</li>
 
                <li>Lecturas y Discusiones de Artículos (La mayoría en Inglés)</li>
 
                <li>Observación y Análisis de Aplicaciones y Propuestas</li>               
 
            </ol> 
 
        </div>
 
    </div>
 
</div>
 
  
<div class="col-md-14">
+
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
    <div class="panel panel-darker-white-border">
 
        <div class="panel-heading">
 
            <h3 class="panel-title">MATERIAL DEL CURSO 2012</h3>
 
        </div>
 
        <div class="panel-body">
 
            <ol>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/lXyulyKWnzec0Ku Introduction to Parallel Programming (And Parallel Systems)]</li>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/EdMZAFDYEr0505i Programación Paralela y Programación Científica desde la E-Ciencia y El Cómputo Avanzado]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/2LoPD79xsRmeOJZ Scalable Systems and Architectures]</li>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/W8hRnaAiuJZOwZf Concurrency and Parallel Programming]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/AqA5G1u8DRp022P Management, Scheduling and Deployment in HPC]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/865jnQY4XBwPVNX Introducción a la Programacion de Memoria Compartida con OpenMP]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/8PwF3DWMTAcXgk5 Introducción a la Programación de Memoria Distribuída con MPI]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/2fBpzrSiHeFomFZ Introducción a la Programación con CUDA]</li>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/O2tsn4yGI6YAWlC GPU Programming with Nvidia CUDA]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/DIxUlUB48IMlSAO Evaluación de Rendimiento - Una aproximación de base]</li>
 
                    </ul>
 
                <li>Sesión</li>
 
                    <ul>
 
                        <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/GE28yyeAdkN1kuw Direcciones y Temas Candentes]</li>
 
                    </ul>           
 
            </ol>
 
            <p><b>Lecturas sugeridas</b></p>
 
            <p>De The Fourth Paradigm: Data Intensive Scientific Discovery</p>
 
            <ul>
 
                <li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/4th_paradigm_book_jim_gray_transcript.pdf Jim Gray on eScience: A Transformed Scientific Method - (Tony Hey, Stewart Tansley, and Kristin Tolle)]</li>
 
                <li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/4th_paradigm_book_part3_gannon_reed.pdf Parallelism and The Cloud - (Dennis Gannon, Dan Reed)]</li>
 
                <li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/4th_paradigm_book_part3_larus_gannon.pdf Multicore Computing and Scientific Discovery - (James Larus, Dennis Gannon)]</li>
 
            </ul>   
 
        </div>
 
    </div>
 
</div>
 
  
<div class="col-md-14">
+
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.  
    <div class="panel panel-darker-white-border">
+
|-
        <div class="panel-heading">
+
|2
            <h3 class="panel-title">MATERIAL DEL CURSO 2013 - 2014</h3>
+
|'''2140180''' - LEON PEREZ FABIAN ANDRES
        </div>
 
        <div class="panel-body">
 
            <ul>
 
                <li>Introducción</li>
 
                <li>Arquitecturas Paralelas</li>
 
                <li>Concurrencia y Paralelismo</li>
 
                <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/tFnLLTrvr7Jonal Modelo de Programacion de Memoria Compartida] - [http://openmp.org/wp OpenMP]</li>
 
                <li>[http://www.sc3.uis.edu.co/owncloud/index.php/s/XPIbNBqLqtma6Am Modelo de Programación de Memoria Distribuída] -  [http://www.open-mpi.org OpenMPI]</li>
 
            </ul>       
 
        </div>
 
    </div>
 
</div>
 
  
<div class="col-md-14">
+
'''2151196''' - LOPEZ DURAN JHON EDINSON
    <div class="panel panel-darker-white">
+
|'''Ecuación de Calor (https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_del_calor<nowiki/>)'''
        <div class="panel-heading">
 
            <h3 class="panel-title">EVALUACIONES</h3>
 
        </div>
 
        <div class="panel-body">
 
  
 +
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
  
            <div class="col-md-12">
+
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.
                <div class="panel panel-midnight-border">
 
                    <div class="panel-heading">
 
                        <h3 class="panel-title">(30%) Examen de Conocimientos Único</h3>
 
                    </div>
 
  
                    <div class="panel-body">                       
+
|-
                        <p>Este examen de conocimientos es un analisis de caso, se realizará en el tiempo de la clase de manera individual. Incluye un punto de los trabajos presentados por sus compañeros.</p>
+
|3
                    </div>
+
|'''2143696''' - MANTILLA LOPEZ JUAN DAVID
                    <div class="panel-footer">Examen</div>
 
                </div>
 
            </div>
 
  
            <div class="col-md-12">
+
'''2141354''' - OÑATE LIZARAZO LEYSTON ALEXANDER
                <div class="panel panel-midnight-border">
+
|'''Ecuación de Onda (https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_onda<nowiki/>)'''
                    <div class="panel-heading">
 
                        <h3 class="panel-title">(70%) Trabajo de Aplicación</h3>
 
                    </div>
 
  
                    <div class="panel-body">
+
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)
                        <p>El trabajo de aplicación, es un trabajo que se realizará durante todo el semestre y que implica dos entregas previas, un seguimiento del trabajo realizado y una entrega final, observando unos parametros de evaluación que son:  </p>
 
                        <p><b>Criterios:</b></p>
 
                            <ul>
 
                                <li>Calidad del Análisis y Diseño de la Solución</li>
 
                                <li>Eficiencia y Rendimiento de la Solución Propuesta</li>
 
                                <li>Calidad del Proyecto (Estructura, Documentación, Coherencia)</li>
 
                                <li>Evaluación de Rendimiento (Identificación de Limitaciones)</li>
 
                                <li>Organización y Presentación de los informes previos y de la presentación final.</li>
 
                            </ul>
 
                        <p></p>
 
                        <p>Los pesos de cada una de las entregas son:</p>
 
                            <ul>
 
                                <li>Informe Inicial (20/70)</li>
 
                                <li>Informe de Avance (20/70)</li>
 
                                <li>Informe y Presentación Final (30/70) </li>
 
                            </ul>
 
                        <p></p>
 
                        <p>Los trabajos se realizarán de manera individual y las entregas y seguimiento se hará de la siguiente manera:</p>
 
                            <ol>
 
                                <li>Entrega de los temas</li>
 
                                <li>Entrega del Primer Informe que implica el análisis y diseño de la solución</li>
 
                                    <ul>
 
                                        <li>Ese informe deberá realizarse de manera escrita a manera de resumen extendido en un documento en pdf, de máximo 6 paginas en columna sencilla, tamaño de la letra 12ppt</li>
 
                                        <li> Discusión y presentación en el tablero en una sesión privada</li>
 
                                    </ul>
 
                                <li>Informe de Avance</li>
 
                                    <ul>
 
                                        <li>Este informe de avance deberá exponerse unicamente, usando máximo 5 diapositivas y 10 minutos de presentación al profesor. Deberá estar planteado el algoritmo final de la solución, seudocodigo, tipo de lenguaje a utilizar, estrategia de implementación y aspectos tecnicos esperados</li>
 
                                    </ul>
 
                                <li>Informe y Presentación Final</li>
 
                                    <ul>
 
                                        <li>Se presentará en un documento escrito, tipo artículo, en español, de máximo 10 páginas en un documento pdf, tipo de fuente Arial y tamaño de letra 12ppt, en columna sencilla. El documento se enviará al correo que el profesor indique el dia</li>
 
                                        <li>Se realizará una presentación de 10 minutos incluyendo un demo del prototipo o solución realizada, tanto el codigo fuente como las instrucciones de compilación y ejecución deberan enviarse al profesor previamente</li>
 
                                    </ul>
 
                                </ol>
 
                    </div>
 
                    <div class="panel-footer">Trabajo de Aplicación</div>
 
                </div>
 
            </div>
 
  
           
+
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. 
       
+
|}
        </div>
 
        <div class="panel-footer">Evaluaciones</div>
 
    </div>
 
</div>
 
  
 +
==='''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:MemCompOpenMP2.pdf|Shared Memory Programming with OpenMP]] (In Spanish/En Español)
 +
*[[:File:SharedMPI14c.pdf|Distributed Memory Exploitation with MPI: An Introduction]]
 +
 +
==='''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. En la práctica, via el foro creado para tal fin.

Latest revision as of 17:38, 26 May 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 1- 2020

Se realizarán sesiones teóricas via visioconferencia de manera sincrónica los dias martes de 10:15 a.m. a 11:45 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 1er 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 (20%) C/C++ Procesamiento Memoria Compartida (Individual): Entrega: 30 de Junio de 2020
  • Evaluación 2 (20%) C/C++ Procesamiento Memoria Distribuída (Individual): Entrega: 28 de Julio de 2020
  • Evaluación 3 (20%) C/C++ Procesamiento Memoria Híbrida CPU/GPU (Individual): Entrega: 18 de Agosto de 2020
  • Evaluación 4 (25%) Proyecto Final (Parejas y Trios): Entrega: 6 de Septiembre de 2020 / Presentación 7 de Septiembre de 2020
  • Evaluación 5 (15%) Prácticas: Entregas programadas desde el Martes 2 de Junio de 2020
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. En la práctica, via el foro creado para tal fin.