La evaluación se adapta a los resultados de aprendizaje del curso. Se espera que los estudiantes demuestren que han adquirido las habilidades enumeradas en el resultado de aprendizaje y serán evaluados en base al proyecto de simulación de multitudes dividido en cuatro tareas (y resuelto en grupos durante los laboratorios semanales). Además de la presentación de cada tarea durante los laboratorios, habrá una presentación oral final y un informe final. Al final de la presentación oral de cada equipo, se harán preguntas a los miembros del equipo sobre cómo se han aplicado los temas enseñados en el curso para paralelizar la Simulación de Multitudes con Evitación de Colisiones. 1. Construir algoritmos paralelos, es decir, identificar el paralelismo en un algoritmo dado, implementar este paralelismo e identificar los factores que limitan el paralelismo en un programa o algoritmo. - Dado un algoritmo secuencial, transformarlo en un algoritmo paralelo, exponiendo al menos una de las oportunidades de paralelización: paralelismo de datos, paralelismo de tareas, vectorización. Explique la elección de la paralelización y razone por qué no son posibles otras formas de paralelismo - Identificar todas las fuentes de paralelismo, incluidas las combinaciones de paralelismo de datos, paralelismo de tareas y vectorización. - Identificar los cuellos de botella y los factores que limitan el paralelismo (por ejemplo, las dependencias) y las soluciones para superar dichas limitaciones (por ejemplo, una nueva programación de tareas). - Dado un determinado algoritmo razonar cuál de los paradigmas de programación paralela es el más adecuado, discutiendo las ventajas e inconvenientes de cada método de paralelización. 2. Explicar las cuestiones clave de la programación paralela, como la distribución de datos, el equilibrio de la carga, el bloqueo y la sincronización. - Identificar los cuellos de botella del rendimiento, como la distribución de datos y el equilibrio de la carga, y sugerir soluciones para reducirlos; por ejemplo, tareas de granularidad más fina o más gruesa, diferentes políticas de programación - Diseñar, implementar y evaluar esas soluciones avanzadas para reducir o aliviar los cuellos de botella de rendimiento. - Razonar sobre las características de los algoritmos que conducen a dichos cuellos de botella de rendimiento y cuáles son las elecciones óptimas en cuanto a los paradigmas de programación paralela, granularidad, distribución, sincronización, etc. 3. Garantizar la corrección de la ejecución, utilizando métodos de sincronización adecuados. 4. Comparar varios marcos de programación paralela en términos de rendimiento y eficiencia de desarrollo. |