Difference between revisions of "Algoritmos y Computación de Alto Rendimiento"

From Supercomputación y Cálculo Científico UIS
(Created page with "<div class="thumbnail img-thumbnail">http://wiki.sc3.uis.edu.co/images/a/a8/Logo_sc33.png</div> <p> </p>Volver a Cursos<div class="column clearfix"><div class="col-m...")
 
Line 4: Line 4:
 
==='''PRESENTACION DEL CURSO'''===
 
==='''PRESENTACION DEL CURSO'''===
 
<div class="column clearfix">
 
<div class="column clearfix">
Cuando .
+
El desarrollo de algoritmos computacionales para soportar tanto análisis de datos como simulaciones de fenómenos físicos (diseñados, reproducidos en laboratorio, observados o propuestos) es importante para garantizar precisamente la calidad, realismo, confianza y reproductibilidad del conocimiento generado. Dichos algoritmos, que surgen de modelos previamente concebidos se convertirán en códigos que componen programas de computación que serán ejecutados en máquinas computacionales. El rendimiento obtenido y las capacidades, dependen igualmente del algoritmo pero no hay que olvidar que de las características arquitecturales de la máquina computacional utilizada.  
  
Este es un curso dirigido a estudiantes de postgrado, que si bien puede compararse en contenido con el curso [http://wiki.sc3.uis.edu.co/index.php/Introducci%C3%B3n_a_la_programaci%C3%B3n_paralela Introducción a la programación paralela] el enfoque es hacia estudiantes de master y doctorado en ciencias computacionales y afines, haciendo énfasis en la obtención de altas prestaciones, y en el soporte hacia la solución de problemas científicos multidisciplinarios, desde un enfoque computacional.
+
Precisamente, este curso (teórico-práctico) busca fundamentar el desarrollo de algortimos y su implementación en lenguajes de programación que permitan el desarrollo de códigos para atacar un problema físico, ejecutar ese código y obtener el máximo desempeño y confianza. Teniendo en cuenta la diversidad de arquitecturas computacionales que permiten seleccionar que tipo de plataforma se necesita para atacar un problema, igualmente es necesario conocer diferentes aspectos arquitecturales tecnológicos y espacios de desarrollo que permiten la colaboración y la reproductibilidad.  
 
</div>
 
</div>
==='''Contenido'''===
+
==='''Contenido ( No en un orden estricto, Después de Encuesta con los Estudiantes)'''===
 
<div class="col-md-14">
 
<div class="col-md-14">
#Introducción a la Computación de Alto Rendimiento y Cálculo Científico
+
#Introducción a la Computación Científica
#*Altas Prestaciones y Alta Demanda Computacional
+
#Fundamentos para el Análisis y Diseño de Algoritmos
#*Computación Científica y de Alto Rendimiento
+
#*Principios Básicos de Representación
#*Evolución de la Computación de Alto Rendimiento
+
#*Análisis de Complejidad
#*El Top500 y otros rankings
+
#Programación de Algoritmos Científicos cn C/C++ : Una Introducción
#Arquitecturas Paralelas y Sistemas Escalables
+
#*Principios Básicos
#*Modelos de Máquinas  y Ejecución Paralelas
+
#*Buenas Prácticas de Desarrollo
#*Paralelismo y Comunicación
+
#*Compilación Ejecución Eficiente y Optimización
#*Caracterización de Flynn
+
#*Debugging, Profiling and Tracing.
#*Multinucleos y Multiprocesamiento
+
#Sistemas, Plataformas y Ambientes de Desarrollo y Ejecución
#*Procesamiento Vectorial
+
#*Aquitecturas computacionales para investigación (y desarrollo científico)
#*Arquitecturas para el Procesamiento Masivamente Paralelo (Manycores)
+
#**Infrastructuras
#*Modelos de Memoria
+
#**Repositorios (GitHub/GitLab) y Ambientes Colaborativos
#**Jerarquia de Memoria
+
#**Sistemas Operativos (Linux)
#*Sistemas Distribuidos de Gran Escala
+
#*Interacción y Plataformas de Gran Escala
#*Unidades de Procesamiento Tensor
+
#Cómputo Científico Paralelo
#*Unidades de Procesamiento Cuántico
+
#*Concurrencia y Paralelismo
#*Sistemas Operativos, Sistemas de Archivos, Calendarización y Monitoreo en Arquitecturas Paralelas
+
#*Paradigmas de Programación Paralela
#**Aspectos especiales de Linux y Slurm
+
#**Memoria Compartida con OpenMP
#*Algunos aspectos relacionados con CAPEX y Ambientes de Implementación de Plataformas
+
#**Memoria Distribuida con MPI
#**Energia y Temperatura
+
#**Memoria Hibrida con OpenACC (Y un poco de CUDA)
#**Seguridad y Comodidad
+
#**Otras Posibilidades
#Algoritmos Concurrentes y Paralelos
+
#*Paralelismo Cuántico : Una introducción
#*Caracterización de Paralelismo
+
#*Librerias, Solucionadores y Más
#*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)
 
#*Algunos Aspectos Importantes de Comunicación
 
#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
 
#*Aspectos Importantes de Comunicación, Balanceo de Carga y Tolerancia a Fallos desde la Implementación
 
#*Implementaciones hibridas
 
#**OpenMP + MPI
 
#**CUDA + MPI
 
#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
 
#*Exascale
 
#*Explotación de Unidades Tensor y Aplicaciones Emergentes
 
#*Visualizacióm
 
#*Explotación de Memoria
 
#*Paradigmas de Programación Emergentes
 
#*Computación Cuántica
 
#*Tecnologías de ruptura computacional
 
 
</div>
 
</div>
 
==='''Evaluación'''===
 
==='''Evaluación'''===
====='''Evaluaciones programadas para el 1er Semestre de 2021'''=====
+
====='''Evaluaciones programadas para el 2do Semestre de 2021'''=====
El objetivo este semestre, es que el desarrollo del curso contribuya a tratar alguno de los aspectos de su proyecto de investigación de postgrado, o algún proyecto relacionado. La evaluación se dará en tres fases:
+
La evaluación planteada, busca promover el trabajo colaborativo, por equipos que se conforman de acuerdo a la afinidad e interés en una temática específica de la física. Y en ese trabajo se tendrán en cuenta los siguientes aspectos
  
# '''FASE 1:''' Presentación de la propuesta a realizar.
+
#'''20%''' Diseño y Análisis de Algoritmo a Realizar '''(Diciembre 7 2021)'''
# '''FASE 2: Desarrollo de la propuesta.'''
+
#'''20%:''' Implementación y Solución
# '''FASE 3: Presentación de la propuesta como un poster digital'''
+
#'''20%:''' Análisis y Evaluación de Rendimiento
 +
#'''20%:''' Presentación de la propuesta como un póster digital '''(Marzo 8 2022)*'''
 +
#'''20%:''' Trabajos Prácticos en Clase
 +
 
 +
''Bonus: Participación en seminarios y eventos libres propuestos por el profesor en el transcurso del curso''
 +
 
 +
''*Los puntos 2 y 3 deben estar contenidos en la presentación del poster digital y en un repositorio github/gitlab (codigo de la solución y visualizaciones posibles)''
  
Por adicional, se tiene en cuenta la participación en todas las sesiones.
 
 
<br />
 
<br />
 
==='''Bibliografía y Fuentes de Información'''===
 
==='''Bibliografía y Fuentes de Información'''===

Revision as of 16:51, 10 November 2021

Logo_sc33.png

 

Volver a Cursos

Algoritmos y Computación de Alto Rendimiento - Código 29451

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

Progprob.jpg

PRESENTACION DEL CURSO

El desarrollo de algoritmos computacionales para soportar tanto análisis de datos como simulaciones de fenómenos físicos (diseñados, reproducidos en laboratorio, observados o propuestos) es importante para garantizar precisamente la calidad, realismo, confianza y reproductibilidad del conocimiento generado. Dichos algoritmos, que surgen de modelos previamente concebidos se convertirán en códigos que componen programas de computación que serán ejecutados en máquinas computacionales. El rendimiento obtenido y las capacidades, dependen igualmente del algoritmo pero no hay que olvidar que de las características arquitecturales de la máquina computacional utilizada.

Precisamente, este curso (teórico-práctico) busca fundamentar el desarrollo de algortimos y su implementación en lenguajes de programación que permitan el desarrollo de códigos para atacar un problema físico, ejecutar ese código y obtener el máximo desempeño y confianza. Teniendo en cuenta la diversidad de arquitecturas computacionales que permiten seleccionar que tipo de plataforma se necesita para atacar un problema, igualmente es necesario conocer diferentes aspectos arquitecturales tecnológicos y espacios de desarrollo que permiten la colaboración y la reproductibilidad.

Contenido ( No en un orden estricto, Después de Encuesta con los Estudiantes)

  1. Introducción a la Computación Científica
  2. Fundamentos para el Análisis y Diseño de Algoritmos
    • Principios Básicos de Representación
    • Análisis de Complejidad
  3. Programación de Algoritmos Científicos cn C/C++ : Una Introducción
    • Principios Básicos
    • Buenas Prácticas de Desarrollo
    • Compilación Ejecución Eficiente y Optimización
    • Debugging, Profiling and Tracing.
  4. Sistemas, Plataformas y Ambientes de Desarrollo y Ejecución
    • Aquitecturas computacionales para investigación (y desarrollo científico)
      • Infrastructuras
      • Repositorios (GitHub/GitLab) y Ambientes Colaborativos
      • Sistemas Operativos (Linux)
    • Interacción y Plataformas de Gran Escala
  5. Cómputo Científico Paralelo
    • Concurrencia y Paralelismo
    • Paradigmas de Programación Paralela
      • Memoria Compartida con OpenMP
      • Memoria Distribuida con MPI
      • Memoria Hibrida con OpenACC (Y un poco de CUDA)
      • Otras Posibilidades
    • Paralelismo Cuántico : Una introducción
    • Librerias, Solucionadores y Más

Evaluación

Evaluaciones programadas para el 2do Semestre de 2021

La evaluación planteada, busca promover el trabajo colaborativo, por equipos que se conforman de acuerdo a la afinidad e interés en una temática específica de la física. Y en ese trabajo se tendrán en cuenta los siguientes aspectos

  1. 20% Diseño y Análisis de Algoritmo a Realizar (Diciembre 7 2021)
  2. 20%: Implementación y Solución
  3. 20%: Análisis y Evaluación de Rendimiento
  4. 20%: Presentación de la propuesta como un póster digital (Marzo 8 2022)*
  5. 20%: Trabajos Prácticos en Clase

Bonus: Participación en seminarios y eventos libres propuestos por el profesor en el transcurso del curso

*Los puntos 2 y 3 deben estar contenidos en la presentación del poster digital y en un repositorio github/gitlab (codigo de la solución y visualizaciones posibles)


Bibliografía y Fuentes de Información