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

From Supercomputación y Cálculo Científico UIS
 
(129 intermediate revisions by 3 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 programación paralela - Código 21888</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>
 
 
</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">Profesor</h3>
+
#*Elementos de Paralelismo
        </div>
+
#*Evolución de la Computación Paralela
        <div class="panel-body">
+
#*Computación de Alto Rendimiento (HPC)
            <p><b>[https://sites.google.com/site/carlosjaimebh/ Carlos Jaime Barrios Hernandez, PhD.]</b> - (cbarrios@uis.edu.co)</p>         
+
#Arquitecturas Paralelas y Sistemas Escalables
        </div>
+
#*Modelos de Máquinas Paralelas
    </div>
+
#*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
 +
#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 1-2024</big>'''===
    <div class="panel panel-darker-white-border">  
+
Se realizarán sesiones teóricas-prácticas en dos días a la semana (Martes de 14:00 a 16:00 y Viernes de 6:00 a 8:00).<br />
        <div class="panel-heading">
+
==='''<big>Evaluación</big>'''===
            <h3 class="panel-title">PRESENTACION</h3>
+
'''Evaluaciones programadas para el 1er Semestre de 2024'''
        </div>
+
 
        <div class="panel-body">
+
Las evaluaciones programadas para este semestre, es un desarrollo continuo de una solución siguiendo paradigmas especiales para la resolución de un problema. Las diferentes entregas que son individuales o en grupo de acuerdo se diga,  se realizarán principalmente via github.<br />
            <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>
+
 
            <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>
+
===='''Evaluación 1 (25%) C/C++  Procesamiento Memoria Compartida (Individual):'''====
        </div>
+
'''Fecha Limite de Entrega: Viernes 22 de Marzo  de 2024 hasta las 9:59 (GMT - 5, Bogotá Time)'''
    </div>
+
 
</div>
+
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] .
 +
 
 +
Este taller esta diseñado para hacerlo en 2 horas, sin embargo, tienen toda la semana para realizarlo y la entrega es hasta las 9:59 a.m. del dia viernes 22 de marzo. Recuerden que esto es la primera nota que se subirá al sistema. 
 +
 
 +
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''') [https://github.com/orgs/SC3UIS/teams (https://github.com/orgs/SC3UIS/teams]) 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 o C++
 +
#**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 transform3.c, el código nuevo que subirán allí se llamara omp_transform3.c). Como es obvio el código fuente que recibirán es en C o 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. 
 +
 
 +
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.'''''
 +
 
 +
'''Recomendaciones:'''
 +
 
 +
#Si usa chatGPT o alguna de las aplicaciones de IA, debe indicarlo y lo importante es que usted entienda que fué lo que hizo y por qué. En la primera sesión posterior a la evaluación, se realizará una sustentación oral de su solución de manera aleatoria que modificaría la nota.
 +
#Lea cuidadosamente el texto dado para que efectivamente responda lo que se le esta diciendo que haga.
 +
#Puede haber un bonus si usa las máquinas EXA. (SMExa o EXADell).
 +
 
 +
====='''Evaluación 2 (25%) C/C++  Procesamiento Memoria Distribuída (En Parejas o Trios):'''=====
 +
'''Fecha de Entrega: <s>19 de Abril de 2024</s>  Viernes 26 de abril.'''
 +
 
 +
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. (Un repositorio en su github enlazado que diga por ejemplo Entrega_MPI dentro de su repositorio del curso. Por razones de problemas de sincronización que hemos tenido en el pasado, deben avisarnos al correo electrónico cuando suban su respectiva entrega).
 +
 
 +
#Tenga en cuenta todas las recomendaciones generales de entrega de la Evaluación 1.
 +
#En esta ocasión, se trabajaran los códigos que se dieron para la evaluación 1, buscando realizar una versión MPI, deben realizarse los dos códigos.
 +
#Igualmente, debe subirse en su repositorio gitHub, la solución dada para cada uno de ellos, usando la mayor cantidad de procesos posible.
 +
#En el archivo Readme.md de su repositorio de entrega, '''''ES LA EXPLICACION DE SU SOLUCION'''''. Debe explicar que hace la solución, la estructura de los códigos, identificar el código principal, las instrucciones de compilación y ejecución en modo interactivo y en modo pasivo (usando sbatch. Ese archivo debe igualmente subirse al repositorio), teniendo en cuenta el modulo recomendado por ustedes para ejecutar la solución (y explicar el por qué), así como las mejoras que se realizaron al código, a la ejecución y la compilación. En la carpeta respectiva deben subir '''''la nueva version de la solución''''' con los códigos respectivos. (SE DA UN BONUS si usa Makefile (recuerde que como buena práctica en el encabezado del código principal, debe documentar sus mejoras y la fecha de la misma). Igualmente tenga en cuenta que debe agregar opciones de compilación, de ser necesario, vistas en clase (por ejemplo, opciones de compilación recomendado la mejor opción que ustedes encontraron (por ejemplo, si -01 u -03 o ninguna), opciones para detectar los warnings, etc.).
 +
#En el Readme.md (o generando un segundo archivo de Readme2.md) debe explicar las salidas obtenidas relevantes (las figuras y resultados en pantalla), el comportamiento en los tiempo, comparando tanto la versión secuencial, como la de OpenMP como la versión en MPI (los cuales los calcula la solución) en el manejo de datos, distinguiendo la mejor solución posible de acuerdo a lo que se quiere, la peor solución obtenida, las limitaciones relevantes según ustedes.
 +
#Tenga en cuenta que el código (o los códigos) dado (s) tiene (n)  múltiples maneras de mejorarlo (s)  y aunque pueden interacturar con sus compañeros, las soluciones tienen que ser diferentes y explicadas diferentes (si son similares un un porcentaje alto, se perjudica la nota).
 +
#Tenga en cuenta las condiciones de entrega expresadas anteriormente para la evaluación 1. Se es estricto con la fecha y hora de entrega. Si son dos personas, solo basta con que se suba en uno de los repositorios pero en el Readme.md asi como en el encabezado de su respectivo código principal (o en aquellos que hayan intervenido) no olviden comentar su participación.
 +
#Recuerden que si no modificaron todos los códigos dados, deben explicar el porqué y adjuntarlos igualmente para garantizar la ejecución del mismo.
 +
#La solución se deberá explicar en la sesión del martes siguiente a la entrega, durante la sesión respectiva.
 +
#Debe correrse en GUANE-1 no en local.
 +
 
 +
Recomendaciones:
 +
 
 +
*Es posible que encuentren soluciones en internet de los problemas dados ya implementadas  o usando chatGPT, Copilot y otra herramienta, 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, asi que esfuercese y hagan sus aportes</u>''.
 +
*Observen de que se trata el método numérico para que puedan proponer sus soluciones.
 +
*Pueden realizar un código que puede ejecutarse en local usando 2 procesos para equipos que tengan al menos dos núcleos. Esta solución para los códigos dados ya existe y puede encontrarse con cualquier buscador de su preferencia.
 +
*Explore de manera sistemática, siguiendo una metodología, los archivos respectivos.
 +
*No olvide ver las diapositivas del curso, y el material bibliográfico asociado.
 +
 
 +
===='''Evaluación 3 (25%) C/C++ Procesamiento Memoria Híbrida CPU/GPU (Individual) -Certificación :'''====
 +
'''Desarrollo: (Por Definir).'''
 +
 
 +
Esta evaluación es el desarrollo de una actividad realizada únicamente con NVIDIA CUDA  y se dará las indicaciones en la sesión del 13 de Junio.
 +
 
 +
===='''Evaluación 4 (25%) Proyecto Final (TRABAJO COLABORATIVO en Parejas o Trios):'''====
 +
'''Entrega:  Viernes 31 de Mayo  hasta las 23:59 (GMT - 5)'''
 +
 
 +
El trabajo final de aplicación busca evaluar las competencias obtenidas en el curso en el desarrollo de una solución de programación paralela desde la concepción misma del tratamiento del problema, hasta la selección del paradigma para la implementación y la implementación misma. Para todas las asignaciones, se tendrá en cuenta lo siguiente:
 +
 
 +
#Análisis y proposición del algoritmo solución paralela.
 +
#Análisis de los resultados (por ejemplo, solución secuencial vs solución paralela, paradigma/mecanismo de implementación vs otros paradigmas posibles a utilizar, aceleración obtenida)/
 +
#Escalabilidad de la solución y calidad de la misma.
 +
 
 +
Cada grupo deberá conformarse por al menos dos integrantes y máximo tres. NO SE ACEPTAN TRABAJOS INDIVIDUALES.
 +
 
 +
====='''Requisitos de Entrega'''=====
 +
<blockquote>1. Debe crear un repositorio con un nombre clave del proyecto asignado dado por ustedes en el GitLab/GitHub anteriormente explicado, asociarlo a los espacios y equipo SC3UIS al igual que con las entregas anteriores y vincularlo a los integrantes del grupo. En el repositorio el archivo README.md debe contener el enunciado del problema dado, en análisis en texto que se hizo para proponer la solución paralela. En el mismo archivo debe explicar como se compila y ejecuta (si es posible ejecutarlo en local o no. Si si es posible, distinguir la compilación/ejecución en local de GUANE-1)  Dentro de su repositorio de tener los siguientes archivos (organizados lo mejor posible, puede  ser en repositorios):
 +
- Archivo  con el código Fuente (En C o C++) con el paradigma utilizado (openmp, mpi, cuda u openacc) (No olvidar documentarlo)
 +
 
 +
- Archivo Sbatch con condiciones de corrida en GUANE-1 (No olvidar documentarlo)
 +
 
 +
- Archivo de Entrada de Datos</blockquote>- Archivo de Salida de Datos/Resultados
 +
 
 +
- Archivo *.pdf con la presentación del proyecto (máximo 12 diapositivas). En estas diapositivas debe estar el análisis precisamente de escalabilidad, aceleración, resultados, recomendaciones, limitaciones,  etc  (No olvide colocar los nombres de todos los integrantes)
 +
 
 +
2. Crear el repositorio en su GitHub con los archivos anteriores, salvo el archivo *.pdf.  Esto lo consultaremos
 +
 
 +
3. No olvidar en análisis de rendimiento y compararlo con una solución de base (si es secuencial, con ella, si es otra paralela encontrada, obviamente con su mejora y debe ser mejor en rendimiento).
 +
 
 +
====='''Asignaciones 2023'''=====
 +
Cada grupo seleccionara uno de los siguientes proyectos, en el cual, buscarán una solución paralela (que podrán realizar o encontrar pero entender y mejorar)  con cualquiera de los paradigmas dados (memoria compartida con OpenMP, memoria distribuida con MPI o memoria híbrida con CUDA), en una solución en C o C++ exclusivamente (no se aceptan otros lenguajes). Tengan en cuenta que deben ser problemas con muchos datos (bastante grandes que un pc no pueda realizarlo). En cada propuesta, se les da un enlace de base con ejemplos de códigos en C para cada una de las propuestas. Estos ejemplos son eso, ejemplos y no necesariamente la base de su proyecto, pero si una guia.
 +
 
 +
'''1) Clasificación paralela''': implemente un algoritmo de clasificación paralela que pueda ordenar de manera eficiente grandes conjuntos de datos mediante el uso de múltiples procesadores o subprocesos. (Ver: https://www.geeksforgeeks.org/sorting-algorithms/)
 +
 
 +
'''2) Multiplicación de matrices paralelas:''' desarrolle un algoritmo paralelo para multiplicar matrices, lo que puede acelerar significativamente el cálculo de matrices grandes. (Ver: https://www.geeksforgeeks.org/sorting-algorithms/)
 +
 
 +
'''3) Algoritmos genéticos paralelos:''' implemente algoritmos genéticos paralelos para resolver problemas de optimización, como encontrar la solución óptima para un problema determinado mediante la evolución de una población de soluciones candidatas. (Ver: https://www.geeksforgeeks.org/genetic-algorithms/)
 +
 
 +
'''4) Procesamiento de imágenes en paralelo:''' cree una aplicación de procesamiento de imágenes en paralelo que pueda realizar tareas como filtrado de imágenes, detección de bordes o reconocimiento de imágenes utilizando técnicas de computación en paralelo. (Ver: https://www.geeksforgeeks.org/histogram-equalisation-in-c-image-processing/)
 +
 
 +
'''5) Simulación paralela:''' cree un programa de simulación paralela que pueda simular sistemas complejos, como el flujo de tráfico, la dinámica de la población o los patrones climáticos, automatas, distribuyendo la carga computacional entre múltiples procesadores o nodos. (Ver: https://www.geeksforgeeks.org/c-program-to-simulate-nondeterministic-finite-automata-nfa/)
 +
 
 +
'''6) Algoritmos de gráficos paralelos:''' desarrolle algoritmos paralelos para problemas relacionados con gráficos, como el recorrido de gráficos, la búsqueda de la ruta más corta o la agrupación de gráficos, para procesar de manera eficiente gráficos a gran escala. (Ver: https://www.geeksforgeeks.org/computer-graphics-2/)
 +
 
 +
'''7) Aprendizaje automático paralelo:''' implemente algoritmos paralelos para tareas de aprendizaje automático, como paralelizar procesos de entrenamiento para redes neuronales profundas o paralelizar algoritmos de selección de características. (Ver: https://www.geeksforgeeks.org/machine-learning-algorithms/)
 +
 
 +
'''8) Simulación paralela de Monte Carlo:''' cree un programa de simulación paralelo de Monte Carlo para estimar el valor de problemas matemáticos complejos, como la fijación de precios de opciones o el análisis de riesgos. (Ver: https://www.geeksforgeeks.org/ml-monte-carlo-tree-search-mcts/)<blockquote></blockquote>
 +
 
 +
====='''''EJEMPLO DE ASIGNACIONES DE OTROS SEMESTRES:'''''=====
 +
 
 +
======''' Asignaciones Varias'''======
 +
{| class="wikitable"
 +
|https://www.studytonight.com/c/programs/array/sort-array-element-program
 +
|-
 +
|
 +
|-
 +
|https://www.studytonight.com/c/programs/array/remove-duplicate-element-program
 +
|-
 +
|
 +
|-
 +
|https://www.studytonight.com/c/programs/array/checking-for-sparse-matrix
 +
|-
 +
|
 +
|-
 +
|https://www.studytonight.com/c/programs/array/check-square-matrix-is-symmetric-or-not
 +
|-
 +
|
 +
|-
 +
|https://www.studytonight.com/c/programs/array/addition-and-subtraction-of-matrices
 +
|-
 +
|
 +
|-
 +
|https://www.studytonight.com/c/programs/array/matrix-multiplication-program
 +
|-
 +
|
 +
|-
 +
|https://www.studytonight.com/c/programs/numbers/finding-exponential-without-pow()-method
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-3.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-8.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-19.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-30.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-34.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-33.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-48.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-3.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-5.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-31.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-20.php
 +
|-
 +
|
 +
|-
 +
|https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-28.php
 +
|-
 +
|
 +
|}
 +
 
 +
======'''Equipo 1 : "HPC contra Virus"'''======
 +
Un equipo de biólogos esta trabajando con datos obtenidos después de secuenciación en entender mejor el virus del Dengue para proponer identificación,  tratamientos eficientes y posibles vacunas, pero es necesario procesar con técnicas de bioinformática los datos obtenidos en tiempo record, de la manera más simple y eficiente posible. Para ello tienen una serie de archivos que requieren tratar y tener en cuenta y recurren a ustedes para tratarlos, buscando obtener la siguiente información:
 +
 
 +
#¿Cuál es la secuencia que más se repite en cada uno de los archivos dados de 6 y 9 caracteres?  ¿Cuántas veces?
 +
#¿Cuál es la secuencia que más se repite en todo el conjunto de archivos dados? (Recuerde para 5 y 7 caracteres)
 +
#Dada esa secuencia dada, identifique en que archivos dados se da esas mayores repeticiones.
 +
#¿Cuales archivos tienen datos inválidos (Caracteres diferentes a ACGTC, pueden ser espacios, signos o las letras en minúscula).
 +
#Hay una sospecha de diseño del virus en alguna (o algunas) de  las secuencias dadas. Si es cierto, debe aparecer la secuencia GATTACCA. Su solución debe igualmente buscar e identificar los archivos en los cuales aparece dicha secuencia y cuantas veces (en particular y en general).
 +
 
 +
Si desea aprender mas sobre secuenciación y formatos de referencia, puede ver el enlace: https://bioinformatics-core-shared-training.github.io/intro-to-IGV/fileFormats.pdf
 +
 
 +
Nota, los datos son basados en secuencias reales, pero completamente sintéticos y modificados para los fines del proyecto final del curso. (Cortesia: https://www.ncbi.nlm.nih.gov/) Estos se enviarán por correo electrónico directamente.
 +
 
 +
======'''Equipo 2 :  "El Problema de n-cuerpos en Paralelo"'''======
 +
Esta asignación busca tratar computacionalmente uno de los mas famosos problemas que existen en física, el cual es el denominado problema de los n-cuerpos (https://es.wikipedia.org/wiki/Problema_de_los_n_cuerpos), cuyas soluciones en métodos numéricos han permitido la implementación para entender el comportamiento del átomo, los sistemas planetarios, multitudes y videojuegos. Existen diferentes técnicas y mecanísmos de implementación en diferentes lenguajes (puede verse por ejemplo, estos ejemplos (https://rosettacode.org/wiki/N-body_problem).  El reto consiste en realizar un programa eficiente que permita la simulación de miles (o millones de cuerpos) de manera eficiente y en paralelo teniendo en cuenta dos aspectos importantes de base: la gran cantidad de cuerpos posibles a ser simulados y la entrada y salida de datos en archivos con los parámetros de los cuerpos a simularse. <u>BONUS: visualización de animada de la salida</u>. Nota: existe una opción en OpenMP limitada en: https://stackoverflow.com/questions/27480095/n-body-simulation-in-c que puede usarse como guía.
 +
 
 +
======'''Equipo 3: "Economía del Pico y Cédula y Paralelísmo"'''======
 +
Las medidas de aislamiento y restricción de movilidad se han debido endurecer en los siguientes seis meses, debido a los problemas asociados con la deficiente atención médica, la vulnerabilidad de la población en términos sanitarios y aspectos culturales.  Teniendo en cuenta que se tomó la decision de implementar un pico y cédula estricto observando el último dígito  de la cédula (dia par = cédula que termina en cero y par, dia impar = cédula que termina en número impar),  y utilizando un archivo que contiene los números de cédula para una población especifica obtenido del último censo electoral de 2019, responda las siguientes preguntas:
 +
 
 +
#¿ Cuántas personas con cédula par e impar saldrían en cada dia correspondiente para su pico y cédula de los meses de febrero, marzo y abril? (Tenga en cuenta que cada mes tiene dias diferentes y asignaciones de fecha por dia diferentes).
 +
#¿Cuántas veces las personas con pico y cédula par, pueden salir sin restricción los dias sábado?.
 +
#¿Cuántas personas con pico y cédula impar pueden salir sin restricción los dias domingo?.
 +
#Las personas con cédula de identificación de 10 dígitos son personas de 18 a 20 años. ¿Cuántas son y cómo es la distribución de salida por mes los  fines de semana?
 +
#Proporcione datos para dar información de análisis a los tomadores de decisiones políticos y ver si es proporcional y justa la medida del pico y cédula para esa población, observando números pares e impares, tomando, la población en general (cantidad total de habitantes), personas de menos de 20 años (cédulas con diez cifras), personas de mayores de 60 años (Entre 6 y 7 cifras) y extranjeros (cédulas con menos de 7 cifras).
 +
 
 +
Su solución debe permitir obtener de manera eficiente y rápida la información necesaria. Si bien para la aplicación del problema se da un único archivo, diseñe la solución pensando en recibir un conjunto de archivos.
 +
 
 +
Nota, los datos son basados de datos reales obtenidos por la Universidad Popular del Cesar de los registros de la Registraduría Nacional de Colombia (https://www.registraduria.gov.co/) y mantienen su anonimato. Estos se enviarán directamente al correo.
  
<div class="col-md-14">
+
<br />
    <div class="panel panel-darker-white-border">
+
====='''Grupos de Trabajo y Asignaciones 2-2018'''=====
        <div class="panel-heading">
+
{| class="wikitable"
            <h3 class="panel-title">Contenido</h3>
+
!Grupo
        </div>
+
!Participantes
        <div class="panel-body">
+
!Descripción del Trabajo
            <ol>
+
|-
                <li>Introducción a la Programación Paralela</li>
+
|1
                <li>Introducción a las Arquitecturas y Sistemas Escalables</li>
+
|'''2103657''' - ALVAREZ TEJADA GABRIEL DE JESUS
                <li>Algoritmos Concurrentes y Paralelos</li>
 
                <li>Modelos de Programación Paralela (Introducción a la programación de Memoria Distribuida, Introducción a la programación de Memoria</li>
 
                <li>Compartida, Introducción al a programación de maquinas masivamente paralelas y sistemas híbridos)</li>
 
                <li>Lineamientos para el desarrollo de Aplicaciones Paralelas</li>
 
                <li>Evaluación de Desempeño</li>
 
                <li>Direcciones y Temas Candentes en Programación Paralela</li>
 
            </ol>
 
        </div>
 
    </div>
 
</div>
 
  
<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:Slides-debug-Course.pdf|Debugging]]
 +
**Practical notes: https://gitlab.uni.lu/SC-Camp/2019/debug
 +
*Optmization
 +
**Suggested Video: https://www.youtube.com/watch?v=c-k5tygmlGc
 +
**[[:File:OPT GCC-Essentials.pdf|Slides]]
 +
*[[:File:MemCompOpenMP3.pdf|Shared Memory Programming with OpenMP]] (In Spanish/En Español)
 +
*[[:File:SharedMPI14d.pdf|Distributed Memory Exploitation with MPI: An Introduction]]
 +
*Hybrid/Heterogeneous Computing
 +
**[[:File:IntroGPUs.pdf|Introduction to GPU Computing]]
 +
**[[:File:IntroCUDA.pdf|Introduction to CUDA]]
 +
***[https://github.com/NVIDIA/cuda-samples Following CUDA-SAMPLES]
 +
***[https://github.com/carlosjaimebh/GPGPUComputing Some Different Examples]
 +
**[https://on-demand.gputechconf.com/gtc/2014/presentations/S4236-multi-gpu-programming-mpi.pdf Multi GPU Using MPI and CUDA]
 +
***[https://imsc.uni-graz.at/haasegu/Lectures/2015_Chile_HPC/html/cuda_mpi_1.html Multi GPU-Example 1]
 +
***[https://github.com/NVIDIA/multi-gpu-programming-models/tree/master Multi GPU-Examples 2]
 +
***
 +
**[[:File:IntroOpenACC.pdf|Introduction to OpenACC]]
 +
*[[:File:OpenMP-MPI-Intro.pdf|Hybrid Programming Introduction with MPI and OpenMP]]
 +
*[[:File:TowardsHPC-23.pdf|Towards HPC Elements]]
 +
 +
<br />
 +
 +
==Quices y Talleres Especiales de Clase==
 +
 +
====='''Taller Inicial de Compilación, Ejecución y Uso de Optimizadores [Martes 27 de Febrero de 2024 - Individual o Por Parejas]'''=====
 +
El objetivo de este taller, es realizar una primera interacción práctica con el espacio de la plataforma, así como la compilación, ejecución y uso de optimizadores, usando gcc.
 +
 +
Observe el corto video:  Tutorial de C – 46. El optimizador de GCC y la opción -O - YouTube (https://www.youtube.com/watch?v=c-k5tygmlGc) y responda las preguntas numeradas, transcribiendo inicialmente el código realizado en C para el método de Jacobi disponible en: https://www.codesansar.com/numerical-methods/system-of-linear-equation-using-jacobi-iteration-using-c-programming.htm  en el espacio de la plataforma (GUANE-1) 
 +
 +
1. Compilelo usando usando gcc y ejecutelo.
 +
 +
2.  Use las opciones -01, -02 y -03 generando un ejecutable, por ejemplo de cada manera: suejecutable01.exe ¿Que observa en el comportamiento del código tanto al compilarlo como al ejecutar?
 +
 +
3.  ¿Que pasa si usa las opciones -O, -O0, -Ofast -Og y Oz?
 +
 +
Para responder las anteriores preguntas, utilice la opción siguiente y explique que observa (Para cada una de salidas):
 +
[Suespacio]$ objdump --disassemble=main -Mintel64 sucodigoejecutable
 +
 +
4. Busqué por internet un código de ejemplo simple que use punteros y repita los puntos del 1 al 3. NO PUEDEN HABER DOS CODIGOS IGUALES POR PAREJAS DEL CURSO POR LO QUE DEBEN PONERSE DE ACUERDO CON SUS COMPAÑEROS DE NO REPETIR.
 +
 +
Para realizar esta entrega de taller, uno de ustedes deben subir al espacio GitHub o GitLab de uno de los miembros de las parejas (o individual), enlazando al grupo correspondiente del curso (recuerden las clases dadas con el ingeniero responsable de soporte de SC3UIS),  el código de ejemplo dado, el código buscado por internet y  el seleccionado para el punto 4 con las respuestas respectivas.
 +
 +
'''Recomendaciones:'''
 +
 +
Una vez haya subido a su espacio de Git, notifique la entrega via correo electrónico al correo del profesor.
 +
 +
Replique el código HolaMundo hecho en el video para entender la práctica. Igualmente puede observar la documentación usando https://gcc.gnu.org/onlinedocs/gcc/
 +
 +
'''Bonus:''' Realice modificaciones "funcionales no accesorias" a los códigos tanto de ejemplo como el encontrado de prueba con punteros, resaltando en la entrega cuales fueron las modificaciones realizadas.
 +
 +
====='''Taller  de Compilación, Ejecución y Uso de MPI  [Individual o Por Parejas]'''=====
 +
El objetivo de este taller es compilar y ejecutar diferentes códigos previamente dados en clase sobre la plataforma GUANE-1.
 +
 +
#Observe adecuadamente cada uno de los códigos dados.
 +
#*Identifique en cada uno de ellos cual es el código principal que resuelve el problema, cual es el contexto, grupo y los comunicantes.
 +
#*Identifique el número de procesos mínimo para que pueda ejecutarse adecuamente el código
 +
#Reserve los recursos necesarios para que puedan ejecutarse los códigos respectivos en la plataforma.
 +
#Compile usando el compilador adecuado y tambien use optimizadores y banderas si es necesario.
 +
#En el código puede variarse la cantidad de elementos a realizar. ¿Que observa?
 +
#¿Qué pasa si cambia la cantidad de procesos?
 +
 +
=='''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 16:45, 23 April 2024

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 1-2024

Se realizarán sesiones teóricas-prácticas en dos días a la semana (Martes de 14:00 a 16:00 y Viernes de 6:00 a 8:00).

Evaluación

Evaluaciones programadas para el 1er Semestre de 2024

Las evaluaciones programadas para este semestre, es un desarrollo continuo de una solución siguiendo paradigmas especiales para la resolución de un problema. 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: Viernes 22 de Marzo de 2024 hasta las 9: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 .

Este taller esta diseñado para hacerlo en 2 horas, sin embargo, tienen toda la semana para realizarlo y la entrega es hasta las 9:59 a.m. del dia viernes 22 de marzo. Recuerden que esto es la primera nota que se subirá al sistema.

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) (https://github.com/orgs/SC3UIS/teams) 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 o C++
      • 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 transform3.c, el código nuevo que subirán allí se llamara omp_transform3.c). Como es obvio el código fuente que recibirán es en C o 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.

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.

Recomendaciones:

  1. Si usa chatGPT o alguna de las aplicaciones de IA, debe indicarlo y lo importante es que usted entienda que fué lo que hizo y por qué. En la primera sesión posterior a la evaluación, se realizará una sustentación oral de su solución de manera aleatoria que modificaría la nota.
  2. Lea cuidadosamente el texto dado para que efectivamente responda lo que se le esta diciendo que haga.
  3. Puede haber un bonus si usa las máquinas EXA. (SMExa o EXADell).
Evaluación 2 (25%) C/C++ Procesamiento Memoria Distribuída (En Parejas o Trios):

Fecha de Entrega: 19 de Abril de 2024 Viernes 26 de abril.

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. (Un repositorio en su github enlazado que diga por ejemplo Entrega_MPI dentro de su repositorio del curso. Por razones de problemas de sincronización que hemos tenido en el pasado, deben avisarnos al correo electrónico cuando suban su respectiva entrega).

  1. Tenga en cuenta todas las recomendaciones generales de entrega de la Evaluación 1.
  2. En esta ocasión, se trabajaran los códigos que se dieron para la evaluación 1, buscando realizar una versión MPI, deben realizarse los dos códigos.
  3. Igualmente, debe subirse en su repositorio gitHub, la solución dada para cada uno de ellos, usando la mayor cantidad de procesos posible.
  4. En el archivo Readme.md de su repositorio de entrega, ES LA EXPLICACION DE SU SOLUCION. Debe explicar que hace la solución, la estructura de los códigos, identificar el código principal, las instrucciones de compilación y ejecución en modo interactivo y en modo pasivo (usando sbatch. Ese archivo debe igualmente subirse al repositorio), teniendo en cuenta el modulo recomendado por ustedes para ejecutar la solución (y explicar el por qué), así como las mejoras que se realizaron al código, a la ejecución y la compilación. En la carpeta respectiva deben subir la nueva version de la solución con los códigos respectivos. (SE DA UN BONUS si usa Makefile (recuerde que como buena práctica en el encabezado del código principal, debe documentar sus mejoras y la fecha de la misma). Igualmente tenga en cuenta que debe agregar opciones de compilación, de ser necesario, vistas en clase (por ejemplo, opciones de compilación recomendado la mejor opción que ustedes encontraron (por ejemplo, si -01 u -03 o ninguna), opciones para detectar los warnings, etc.).
  5. En el Readme.md (o generando un segundo archivo de Readme2.md) debe explicar las salidas obtenidas relevantes (las figuras y resultados en pantalla), el comportamiento en los tiempo, comparando tanto la versión secuencial, como la de OpenMP como la versión en MPI (los cuales los calcula la solución) en el manejo de datos, distinguiendo la mejor solución posible de acuerdo a lo que se quiere, la peor solución obtenida, las limitaciones relevantes según ustedes.
  6. Tenga en cuenta que el código (o los códigos) dado (s) tiene (n) múltiples maneras de mejorarlo (s) y aunque pueden interacturar con sus compañeros, las soluciones tienen que ser diferentes y explicadas diferentes (si son similares un un porcentaje alto, se perjudica la nota).
  7. Tenga en cuenta las condiciones de entrega expresadas anteriormente para la evaluación 1. Se es estricto con la fecha y hora de entrega. Si son dos personas, solo basta con que se suba en uno de los repositorios pero en el Readme.md asi como en el encabezado de su respectivo código principal (o en aquellos que hayan intervenido) no olviden comentar su participación.
  8. Recuerden que si no modificaron todos los códigos dados, deben explicar el porqué y adjuntarlos igualmente para garantizar la ejecución del mismo.
  9. La solución se deberá explicar en la sesión del martes siguiente a la entrega, durante la sesión respectiva.
  10. Debe correrse en GUANE-1 no en local.

Recomendaciones:

  • Es posible que encuentren soluciones en internet de los problemas dados ya implementadas o usando chatGPT, Copilot y otra herramienta, 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, asi que esfuercese y hagan sus aportes.
  • Observen de que se trata el método numérico para que puedan proponer sus soluciones.
  • Pueden realizar un código que puede ejecutarse en local usando 2 procesos para equipos que tengan al menos dos núcleos. Esta solución para los códigos dados ya existe y puede encontrarse con cualquier buscador de su preferencia.
  • Explore de manera sistemática, siguiendo una metodología, los archivos respectivos.
  • No olvide ver las diapositivas del curso, y el material bibliográfico asociado.

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

Desarrollo: (Por Definir).

Esta evaluación es el desarrollo de una actividad realizada únicamente con NVIDIA CUDA y se dará las indicaciones en la sesión del 13 de Junio.

Evaluación 4 (25%) Proyecto Final (TRABAJO COLABORATIVO en Parejas o Trios):

Entrega: Viernes 31 de Mayo hasta las 23:59 (GMT - 5)

El trabajo final de aplicación busca evaluar las competencias obtenidas en el curso en el desarrollo de una solución de programación paralela desde la concepción misma del tratamiento del problema, hasta la selección del paradigma para la implementación y la implementación misma. Para todas las asignaciones, se tendrá en cuenta lo siguiente:

  1. Análisis y proposición del algoritmo solución paralela.
  2. Análisis de los resultados (por ejemplo, solución secuencial vs solución paralela, paradigma/mecanismo de implementación vs otros paradigmas posibles a utilizar, aceleración obtenida)/
  3. Escalabilidad de la solución y calidad de la misma.

Cada grupo deberá conformarse por al menos dos integrantes y máximo tres. NO SE ACEPTAN TRABAJOS INDIVIDUALES.

Requisitos de Entrega

1. Debe crear un repositorio con un nombre clave del proyecto asignado dado por ustedes en el GitLab/GitHub anteriormente explicado, asociarlo a los espacios y equipo SC3UIS al igual que con las entregas anteriores y vincularlo a los integrantes del grupo. En el repositorio el archivo README.md debe contener el enunciado del problema dado, en análisis en texto que se hizo para proponer la solución paralela. En el mismo archivo debe explicar como se compila y ejecuta (si es posible ejecutarlo en local o no. Si si es posible, distinguir la compilación/ejecución en local de GUANE-1) Dentro de su repositorio de tener los siguientes archivos (organizados lo mejor posible, puede ser en repositorios):

- Archivo con el código Fuente (En C o C++) con el paradigma utilizado (openmp, mpi, cuda u openacc) (No olvidar documentarlo)

- Archivo Sbatch con condiciones de corrida en GUANE-1 (No olvidar documentarlo)

- Archivo de Entrada de Datos

- Archivo de Salida de Datos/Resultados

- Archivo *.pdf con la presentación del proyecto (máximo 12 diapositivas). En estas diapositivas debe estar el análisis precisamente de escalabilidad, aceleración, resultados, recomendaciones, limitaciones, etc (No olvide colocar los nombres de todos los integrantes)

2. Crear el repositorio en su GitHub con los archivos anteriores, salvo el archivo *.pdf. Esto lo consultaremos

3. No olvidar en análisis de rendimiento y compararlo con una solución de base (si es secuencial, con ella, si es otra paralela encontrada, obviamente con su mejora y debe ser mejor en rendimiento).

Asignaciones 2023

Cada grupo seleccionara uno de los siguientes proyectos, en el cual, buscarán una solución paralela (que podrán realizar o encontrar pero entender y mejorar) con cualquiera de los paradigmas dados (memoria compartida con OpenMP, memoria distribuida con MPI o memoria híbrida con CUDA), en una solución en C o C++ exclusivamente (no se aceptan otros lenguajes). Tengan en cuenta que deben ser problemas con muchos datos (bastante grandes que un pc no pueda realizarlo). En cada propuesta, se les da un enlace de base con ejemplos de códigos en C para cada una de las propuestas. Estos ejemplos son eso, ejemplos y no necesariamente la base de su proyecto, pero si una guia.

1) Clasificación paralela: implemente un algoritmo de clasificación paralela que pueda ordenar de manera eficiente grandes conjuntos de datos mediante el uso de múltiples procesadores o subprocesos. (Ver: https://www.geeksforgeeks.org/sorting-algorithms/)

2) Multiplicación de matrices paralelas: desarrolle un algoritmo paralelo para multiplicar matrices, lo que puede acelerar significativamente el cálculo de matrices grandes. (Ver: https://www.geeksforgeeks.org/sorting-algorithms/)

3) Algoritmos genéticos paralelos: implemente algoritmos genéticos paralelos para resolver problemas de optimización, como encontrar la solución óptima para un problema determinado mediante la evolución de una población de soluciones candidatas. (Ver: https://www.geeksforgeeks.org/genetic-algorithms/)

4) Procesamiento de imágenes en paralelo: cree una aplicación de procesamiento de imágenes en paralelo que pueda realizar tareas como filtrado de imágenes, detección de bordes o reconocimiento de imágenes utilizando técnicas de computación en paralelo. (Ver: https://www.geeksforgeeks.org/histogram-equalisation-in-c-image-processing/)

5) Simulación paralela: cree un programa de simulación paralela que pueda simular sistemas complejos, como el flujo de tráfico, la dinámica de la población o los patrones climáticos, automatas, distribuyendo la carga computacional entre múltiples procesadores o nodos. (Ver: https://www.geeksforgeeks.org/c-program-to-simulate-nondeterministic-finite-automata-nfa/)

6) Algoritmos de gráficos paralelos: desarrolle algoritmos paralelos para problemas relacionados con gráficos, como el recorrido de gráficos, la búsqueda de la ruta más corta o la agrupación de gráficos, para procesar de manera eficiente gráficos a gran escala. (Ver: https://www.geeksforgeeks.org/computer-graphics-2/)

7) Aprendizaje automático paralelo: implemente algoritmos paralelos para tareas de aprendizaje automático, como paralelizar procesos de entrenamiento para redes neuronales profundas o paralelizar algoritmos de selección de características. (Ver: https://www.geeksforgeeks.org/machine-learning-algorithms/)

8) Simulación paralela de Monte Carlo: cree un programa de simulación paralelo de Monte Carlo para estimar el valor de problemas matemáticos complejos, como la fijación de precios de opciones o el análisis de riesgos. (Ver: https://www.geeksforgeeks.org/ml-monte-carlo-tree-search-mcts/)

EJEMPLO DE ASIGNACIONES DE OTROS SEMESTRES:
Asignaciones Varias
https://www.studytonight.com/c/programs/array/sort-array-element-program
https://www.studytonight.com/c/programs/array/remove-duplicate-element-program
https://www.studytonight.com/c/programs/array/checking-for-sparse-matrix
https://www.studytonight.com/c/programs/array/check-square-matrix-is-symmetric-or-not
https://www.studytonight.com/c/programs/array/addition-and-subtraction-of-matrices
https://www.studytonight.com/c/programs/array/matrix-multiplication-program
https://www.studytonight.com/c/programs/numbers/finding-exponential-without-pow()-method
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-3.php
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-8.php
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-19.php
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-30.php
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-34.php
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-33.php
https://www.w3resource.com/c-programming-exercises/for-loop/c-for-loop-exercises-48.php
https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-3.php
https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-5.php
https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-31.php
https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-20.php
https://www.w3resource.com/c-programming-exercises/numbers/c-numbers-exercise-28.php
Equipo 1 : "HPC contra Virus"

Un equipo de biólogos esta trabajando con datos obtenidos después de secuenciación en entender mejor el virus del Dengue para proponer identificación, tratamientos eficientes y posibles vacunas, pero es necesario procesar con técnicas de bioinformática los datos obtenidos en tiempo record, de la manera más simple y eficiente posible. Para ello tienen una serie de archivos que requieren tratar y tener en cuenta y recurren a ustedes para tratarlos, buscando obtener la siguiente información:

  1. ¿Cuál es la secuencia que más se repite en cada uno de los archivos dados de 6 y 9 caracteres? ¿Cuántas veces?
  2. ¿Cuál es la secuencia que más se repite en todo el conjunto de archivos dados? (Recuerde para 5 y 7 caracteres)
  3. Dada esa secuencia dada, identifique en que archivos dados se da esas mayores repeticiones.
  4. ¿Cuales archivos tienen datos inválidos (Caracteres diferentes a ACGTC, pueden ser espacios, signos o las letras en minúscula).
  5. Hay una sospecha de diseño del virus en alguna (o algunas) de las secuencias dadas. Si es cierto, debe aparecer la secuencia GATTACCA. Su solución debe igualmente buscar e identificar los archivos en los cuales aparece dicha secuencia y cuantas veces (en particular y en general).

Si desea aprender mas sobre secuenciación y formatos de referencia, puede ver el enlace: https://bioinformatics-core-shared-training.github.io/intro-to-IGV/fileFormats.pdf

Nota, los datos son basados en secuencias reales, pero completamente sintéticos y modificados para los fines del proyecto final del curso. (Cortesia: https://www.ncbi.nlm.nih.gov/) Estos se enviarán por correo electrónico directamente.

Equipo 2 : "El Problema de n-cuerpos en Paralelo"

Esta asignación busca tratar computacionalmente uno de los mas famosos problemas que existen en física, el cual es el denominado problema de los n-cuerpos (https://es.wikipedia.org/wiki/Problema_de_los_n_cuerpos), cuyas soluciones en métodos numéricos han permitido la implementación para entender el comportamiento del átomo, los sistemas planetarios, multitudes y videojuegos. Existen diferentes técnicas y mecanísmos de implementación en diferentes lenguajes (puede verse por ejemplo, estos ejemplos (https://rosettacode.org/wiki/N-body_problem). El reto consiste en realizar un programa eficiente que permita la simulación de miles (o millones de cuerpos) de manera eficiente y en paralelo teniendo en cuenta dos aspectos importantes de base: la gran cantidad de cuerpos posibles a ser simulados y la entrada y salida de datos en archivos con los parámetros de los cuerpos a simularse. BONUS: visualización de animada de la salida. Nota: existe una opción en OpenMP limitada en: https://stackoverflow.com/questions/27480095/n-body-simulation-in-c que puede usarse como guía.

Equipo 3: "Economía del Pico y Cédula y Paralelísmo"

Las medidas de aislamiento y restricción de movilidad se han debido endurecer en los siguientes seis meses, debido a los problemas asociados con la deficiente atención médica, la vulnerabilidad de la población en términos sanitarios y aspectos culturales. Teniendo en cuenta que se tomó la decision de implementar un pico y cédula estricto observando el último dígito de la cédula (dia par = cédula que termina en cero y par, dia impar = cédula que termina en número impar), y utilizando un archivo que contiene los números de cédula para una población especifica obtenido del último censo electoral de 2019, responda las siguientes preguntas:

  1. ¿ Cuántas personas con cédula par e impar saldrían en cada dia correspondiente para su pico y cédula de los meses de febrero, marzo y abril? (Tenga en cuenta que cada mes tiene dias diferentes y asignaciones de fecha por dia diferentes).
  2. ¿Cuántas veces las personas con pico y cédula par, pueden salir sin restricción los dias sábado?.
  3. ¿Cuántas personas con pico y cédula impar pueden salir sin restricción los dias domingo?.
  4. Las personas con cédula de identificación de 10 dígitos son personas de 18 a 20 años. ¿Cuántas son y cómo es la distribución de salida por mes los fines de semana?
  5. Proporcione datos para dar información de análisis a los tomadores de decisiones políticos y ver si es proporcional y justa la medida del pico y cédula para esa población, observando números pares e impares, tomando, la población en general (cantidad total de habitantes), personas de menos de 20 años (cédulas con diez cifras), personas de mayores de 60 años (Entre 6 y 7 cifras) y extranjeros (cédulas con menos de 7 cifras).

Su solución debe permitir obtener de manera eficiente y rápida la información necesaria. Si bien para la aplicación del problema se da un único archivo, diseñe la solución pensando en recibir un conjunto de archivos.

Nota, los datos son basados de datos reales obtenidos por la Universidad Popular del Cesar de los registros de la Registraduría Nacional de Colombia (https://www.registraduria.gov.co/) y mantienen su anonimato. Estos se enviarán directamente al correo.


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


Quices y Talleres Especiales de Clase

Taller Inicial de Compilación, Ejecución y Uso de Optimizadores [Martes 27 de Febrero de 2024 - Individual o Por Parejas]

El objetivo de este taller, es realizar una primera interacción práctica con el espacio de la plataforma, así como la compilación, ejecución y uso de optimizadores, usando gcc.

Observe el corto video: Tutorial de C – 46. El optimizador de GCC y la opción -O - YouTube (https://www.youtube.com/watch?v=c-k5tygmlGc) y responda las preguntas numeradas, transcribiendo inicialmente el código realizado en C para el método de Jacobi disponible en: https://www.codesansar.com/numerical-methods/system-of-linear-equation-using-jacobi-iteration-using-c-programming.htm en el espacio de la plataforma (GUANE-1)

1. Compilelo usando usando gcc y ejecutelo.

2. Use las opciones -01, -02 y -03 generando un ejecutable, por ejemplo de cada manera: suejecutable01.exe ¿Que observa en el comportamiento del código tanto al compilarlo como al ejecutar?

3. ¿Que pasa si usa las opciones -O, -O0, -Ofast -Og y Oz?

Para responder las anteriores preguntas, utilice la opción siguiente y explique que observa (Para cada una de salidas):

[Suespacio]$ objdump --disassemble=main -Mintel64 sucodigoejecutable

4. Busqué por internet un código de ejemplo simple que use punteros y repita los puntos del 1 al 3. NO PUEDEN HABER DOS CODIGOS IGUALES POR PAREJAS DEL CURSO POR LO QUE DEBEN PONERSE DE ACUERDO CON SUS COMPAÑEROS DE NO REPETIR.

Para realizar esta entrega de taller, uno de ustedes deben subir al espacio GitHub o GitLab de uno de los miembros de las parejas (o individual), enlazando al grupo correspondiente del curso (recuerden las clases dadas con el ingeniero responsable de soporte de SC3UIS), el código de ejemplo dado, el código buscado por internet y el seleccionado para el punto 4 con las respuestas respectivas.

Recomendaciones:

Una vez haya subido a su espacio de Git, notifique la entrega via correo electrónico al correo del profesor.

Replique el código HolaMundo hecho en el video para entender la práctica. Igualmente puede observar la documentación usando https://gcc.gnu.org/onlinedocs/gcc/

Bonus: Realice modificaciones "funcionales no accesorias" a los códigos tanto de ejemplo como el encontrado de prueba con punteros, resaltando en la entrega cuales fueron las modificaciones realizadas.

Taller de Compilación, Ejecución y Uso de MPI [Individual o Por Parejas]

El objetivo de este taller es compilar y ejecutar diferentes códigos previamente dados en clase sobre la plataforma GUANE-1.

  1. Observe adecuadamente cada uno de los códigos dados.
    • Identifique en cada uno de ellos cual es el código principal que resuelve el problema, cual es el contexto, grupo y los comunicantes.
    • Identifique el número de procesos mínimo para que pueda ejecutarse adecuamente el código
  2. Reserve los recursos necesarios para que puedan ejecutarse los códigos respectivos en la plataforma.
  3. Compile usando el compilador adecuado y tambien use optimizadores y banderas si es necesario.
  4. En el código puede variarse la cantidad de elementos a realizar. ¿Que observa?
  5. ¿Qué pasa si cambia la cantidad de procesos?

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.