Encabezado Facultad de Ciencias
Presentación

Ciencias de la Computación (plan 2013) 2025-1

Optativas, Seminario de Ciencias de la Computación A

Grupo 7131, 20 lugares. 8 alumnos.
Introducción a la programación en paralelo con MPI, OpenMP y CUDA
Profesor Miguel Angel Pérez León ma ju 17:30 a 19 204 (Nuevo Edificio)
Ayudante Lucía Martínez Rivas lu mi 19 a 20 204 (Nuevo Edificio)
Ayud. Lab. Erick Jesús Ríos González ju 12 a 14 Taller de Sistemas Operativos, Redes de Cómputo, Sistemas Distribuidos y Manejo de Información
 

Modalidad del curso: Presencial

Profesor: zeus@ciencias.unam.mx

Formación Académica:

  • Ciencias de la Computación, Facultad de Ciencias U.N.A.M.

  • Maestro en Ciencias e Ingeniería de la Computación, con especialidad en Cómputo Científico, I.I.M.A.S, U.N.A.M.

Cursos impartidos previamente:

  • Manejo de datos.

  • Análisis numérico.

  • Programación 1 y 2.

  • Programación en paralelo.

  • Sistemas operativos.

  • Bases de datos.

  • Ingeniería de software.

¿Qué vas a aprender en este curso?.

En este curso aprenderás las diferentes formas de programación en paralelo y sus respectivas ventajas y desventajas, comenzando con las arquitecturas, restricciones y limitaciones de un algoritmo en paralo programado en un lenguaje de bajo nivel, hasta llegar sus equivalentes en lenguajes de alto nivel como Python:
  • OPEM MP: es un conjunto de bibliotecas, funciones y directivas de compilador (API) que permite programar en paralelo en conjunto con lenguajes como Fortran, C o C++. Su principal característica es que se sigue la idea de dividir (fork) y unir (join).
  • MPI: la principal característica de MPI es que este no se basa en un modelo de memoria compartida, por lo que la comunicación entre procesos se realiza mediante paso de mensajes.
  • CUDA: es un API de programación en paralelo desarrollado por la compañia NVIDIA que permite tener acceso y ejecitar algoritmos en paralelo mediante el uso de las GPU's (tarjetas gráficas).
  • NUMBA: es un envoltorio (wrapper) que funciona con python, con el cual se pueden implementar algoritmos en paralelo, mediante los 3 estándares previamente mencionados desde un lenguaje de alto nivel, como lo es python.
  • INTRODUCCIÓN A REDES NEURONALES: veremos una introducción al tema de redes neuronales artificiales y el por qué hacer uso del GPU para el proceso de entrenamientos es buena idea.

Temario.

El temario del curso lo puedes revisar aquí.

Alcance del curso.

La idea es cubrir todos los temas del seminario, sin embargo el objetivo principal es que el alumno conozca las diferentes formas de programación en paralelo y haga uso de las mismas para poder optimizar los algoritmos que sean de su interés y sobretodo con la intención de que este seminario sea la base para el desarrollo de su tema de tesis o de investigación. Aquí algunos ejemplos.

Aplicaciones.

Los conocimientos adquiridos en el curso pueden ser aplicados en temas tan variados como:

  • Economía.
  • Medicina.
  • Biología.
  • Física.
  • Inteligencia artificial (redes neuronales).

¿Conocimientos previos?.

Para poder tomar este curso es necesario haber cursado las siguientes materias:

  • Algebra Lineal 1 (deseablemente Algebra Lineal 2).

  • Cálculo 1, 2 (deseablemente Cálculo 3 y 4).

  • Programación (o equivalente).

  • Análisis Numérico.

Herramientas.

El seminario se adapta de manera perfecta a la modalidad a distancia debido a que las herramientas usadas en el mismo son gratuitas y sobretodo enfocadas a colaborar a distancia. Muchas de estas herramientas son accesibles desde tu cuenta de correo (@ciencias.unam.mx) por lo que no hace falta instalación algúna y para el resto (cómo zoom) únicamente se tiene que generar una cuenta gratuita.

  • MACTI: plataforma educativa/interactiva para enseñanza y laboratorio virtual.

  • GitHub: rrepositorio del curso.

  • Google Colab: utilizando esta herramienta se mostrará tanto la teoría cómo la práctica (lenguaje python con jupyter notebooks) de los temas del curso.

  • Zoom (Meet): plataforma para reuniones virtuales.

  • Editor de Texto (lenguaje matemático): la entrega de tareas/examenes/proyecto será mediante documentos en formato .pdf por lo que es necesario manejar algún editor de texto con lenguaje matemático.

  • IDE: la mayor parte de los programas (algoritmos) se presentará mediante google colab, sin embargo los programas más extensos se subirán al repositorio de código y para poder trabajar con ellos será útil tener instalado algún IDE (entorno de desarrollo) cómo Eclipse o Netbeans.

  • SSH: Acceso vía remota a los servidores del laboratorio de cómputo de alto rendimiento.

Evaluación.

  • Tareas 20%.

  • Exámenes 20%.

  • Proyecto 60%.

Nota: para aprobar el curso es necesario aprobar la totalidad de los examenes parciales.

Servicio Social.

Una vez aprobado el seminario, puedes liberar tu servicio social en el laboratorio llevando a cabo labores relacionadas con los temas tratados en el seminario.

Metodología de enseñanza.

Dadas las condiciones de este semestre se hará uso de la metodología de enseñanza conocida cómo aula invertida. Está forma de enseñanza a grandes rasgos considera los siguientes pasos:

  • Antes de la clase el alumno adquiere conocimientos: todo el material que se revise en cada clase será accesible días antes de la clase, con la idea de que el alumno lo revise previo a la clase.

  • Durante la clase se comparte información y se consolida el conocimiento: una vez en clase el profesor repasa el material, muestra ejemplos prácticos y resuelve dudas.

Bibliografía.

Los principales libros sobre los cuales esta basado el curso son:

  • Michael J. Quinn, (2004) PARALLEL PROGRAMING in C with MPI and OpenMP, McGraw-Hill.
  • Nicholast Wilt, (2013) The CUDA HANDBOOK A Comprehensive Guide to GPU Programming, Pearson.
  • Sanders Karndrot, (2010) CUDA BY EXAMPLE An Introduction to General-Purpose GPU Programming, Pearson.
  • Análisis Numérico, Richard L. Burden, J. Douglas Faires. (QA297 B8718 2011).
  • Introducción a los Métodos Numéricos, Yuri N. Skiba. (Lo venden en las publicaciones de la facultad).
  • Introduction to Numerical Analysis using Matlab, Rizwan Butt (QA297 B88).
  • Métodos Numéricos y Computación, David Kincaid (QA297 C4318 2011).
Todos los libros, excepto el del Dr. Skiba los pueden encontrar en la biblioteca.

Primera Clase.

Aquí un video introductorio de parte de lo que veremos en el seminario.

"El número de transistores por unidad de superficie en circuitos integrados, se duplicara cada año. En consecuencia, la velocidad de cómputo relacionada directamente al hardware se verá duplicada cada año". Ley de Moore.

 


Hecho en México, todos los derechos reservados 2011-2016. Esta página puede ser reproducida con fines no lucrativos, siempre y cuando no se mutile, se cite la fuente completa y su dirección electrónica. De otra forma requiere permiso previo por escrito de la Institución.
Sitio web administrado por la Coordinación de los Servicios de Cómputo de la Facultad de Ciencias. ¿Dudas?, ¿comentarios?. Escribenos. Aviso de privacidad.