Última revisión realizada: 19/04/2023

Denominación de la asignatura: Programación Científica y HPC
Postgrado al que pertenece: Máster Universitario en Ingeniería Matemática y Computación
Créditos ECTS: 6
Cuatrimestre en el que se imparte: Primero
Carácter de la asignatura: Obligatoria
Materia a la que pertenece: Computación

Presentación

Desde su concepción, la informática ha sido una herramienta para resolver problemas de muy diversa índole. Los retos a los que hoy en día se enfrenta la ciencia y la ingeniería van de la mano con un adecuado conocimiento de las posibilidades que la computación ofrece.

La asignatura de Programación Científica y HPC tiene como objetivo familiarizar al alumno con las vicisitudes de la programación orientada al cálculo científico. ¿Cuál es el enfoque adecuado cuando hay que procesar grandes cantidades de datos? ¿Es posible cuantificar la eficiencia de un algoritmo? ¿Cómo es posible distribuir una computación larga y compleja entre máquinas independientes? ¿Qué librerías de apoyo pueden ser útiles en cada caso? Estos solo son algunos ejemplos de preguntas que serán analizadas en profundidad a lo largo de la asignatura y que formarán los cimientos de las competencias a desarrollar.

El enfoque será eminentemente práctico: si bien hay una base teórica significativa que es importante conocer, se establecerán relaciones constantes entre los contenidos y su aplicación práctica. El lenguaje de programación elegido para desarrollar la asignatura es Python; un lenguaje moderno, ampliamente utilizado y demandado tanto en la industria como en el ámbito académico, y que dispone de una gran variedad de utilidades para el cómputo científico.

Una vez superada esta materia, el alumno será capaz de idear diferentes soluciones al ser confrontado con un problema de computación científica; asimismo, tendrá las competencias necesarias para evaluar dichas soluciones y escoger las más adecuadas y eficientes.

Competencias básicas

  • CB6: Poseer y comprender conocimientos que aporten una base u oportunidad de ser originales en el desarrollo y/o aplicación de ideas, a menudo en un contexto de investigación.
  • CB7: Que los estudiantes sepan aplicar los conocimientos adquiridos y su capacidad de resolución de problemas en entornos nuevos o poco conocidos dentro de contextos más amplios (o multidisciplinares) relacionados con su área de estudio
  • CB8: Que los estudiantes sean capaces de integrar conocimientos y enfrentarse a la complejidad de formular juicios a partir de una información que, siendo incompleta o limitada, incluya reflexiones sobre las responsabilidades sociales y éticas vinculadas a la aplicación de sus conocimientos y juicios
  • CB9: Que los estudiantes sepan comunicar sus conclusiones y los conocimientos y razones últimas que las sustentan a públicos especializados y no especializados de un modo claro y sin ambigüedades.
  • CB10: Que los estudiantes posean las habilidades de aprendizaje que les permitan continuar estudiando de un modo que habrá de ser en gran medida autodirigido o autónomo.

Competencias generales

  • CG1: Aplicar pensamiento crítico, lógico y creativo, en la vanguardia del campo de estudio, en un contexto de investigación.
  • CG2: Capacidad para dirigir, planificar y supervisar equipos multidisciplinares.
  • CG3: Que los estudiantes tomen decisiones a partir de consideraciones abstractas, para organizar, planificar y optimizar cuestiones de carácter matemático y computacional.
  • CG4: Buscar y utilizar los recursos bibliográficos, físicos y/o electrónicos necesarios para abordar un problema.
  • CG5: Presentar ideas, procedimientos o informes de investigación, así como asesorar a personas u organizaciones en su ámbito de especialización en Ingeniería Matemática y la Computación.
  • CG6: Comprender y utilizar de manera avanzada el lenguaje y las herramientas matemáticas para modelizar, simular y resolver problemas complejos del ámbito de la ingeniería y de la industria, reconociendo y valorando las situaciones y problemas susceptibles de ser tratados matemáticamente.
  • CG7: Integrar de forma autónoma diferentes teorías y modelos haciendo una reflexión personal y creativa adaptada a sus propias necesidades profesionales.
  • CG8: Elaborar adecuadamente y con argumentos motivados, proyectos de trabajo, redactar planes así como formular hipótesis y conjeturas razonables en el ámbito de la Ingeniería Matemática y la Computación.

Competencias específicas

  • CE4: Capacidad para resolver problemas matemáticos avanzados, planificando su resolución en función de las herramientas disponibles y de las restricciones de tiempo y recursos.
  • CE5: Capacidad para comprender y poder aplicar conocimientos avanzados de computación y métodos numéricos o computacionales a problemas de ingeniería para resolverlos de la forma más adecuada a cada situación.
  • CE6: Capacidad para comprender, elegir, aplicar y describir las técnicas matemáticas avanzadas adecuadas para la optimización en distintos ámbitos de la ingeniería..
  • CE7: Capacidad para diseñar, desarrollar e implementar programas informáticos, utilizando principalmente software libre, para abordar problemas complejos relacionados con las matemáticas y la ingeniería.
  • CE8: Capacidad de identificar y corregir los errores existentes en programas informáticos relacionados con la matemática avanzada elaborados por terceras personas.
  • CE9: Capacidad para saber elegir y utilizar aplicaciones informáticas, de cálculo numérico y simbólico u otras, para experimentar en matemáticas y resolver problemas complejos.

Competencias transversales

  • CT1: Organizar y planificar las tareas aprovechando los recursos, el tiempo y las competencias de manera óptima.
  • CT2: Identificar las nuevas tecnologías como herramientas didácticas para el intercambio comunicacional en el desarrollo de procesos de indagación y de aprendizaje.
  • CT4: Adquirir la capacidad de trabajo independiente, impulsando la organización y favoreciendo el aprendizaje autónomo.

Tema 1. Lenguajes y herramientas de programación científica

  • Introducción y objetivos
  • Instrucciones básicas
  • Clasificación de lenguajes de programación
  • Lenguajes científicos: R, Scala, MATLAB/Octave, Python, C/C++, Fortran
  • Evaluación de rendimiento: profiling
  • Gestión de cambios: git

Tema 2. Introducción a Python

  • Introducción y objetivos
  • Entorno de desarrollo
  • Elementos básicos: tipos de datos, sentencias de control, bucles
  • Funciones
  • Manejo de ficheros
  • Excepciones
  • Módulos
  • Programación orientada a objetos

Tema 3. Eficiencia computacional

  • Introducción y objetivos
  • Complejidad en tiempo vs. espacio
  • Notaciones asintóticas

Tema 4. Estructuras de datos

  • Introducción y objetivos
  • Listas y arrays
  • Pilas y colas
  • Tablas hash
  • Grafos
  • Árboles
  • Montículos

Tema 5. Métodos algorítmicos de resolución de problemas

  • Introducción y objetivos
  • Algoritmos de ordenación
  • Algoritmos de búsqueda
  • Heurísticas
  • Programación dinámica

Tema 6. Computación científica en Python

  • Introducción y objetivos
  • IPython
  • Numpy y SciPy
  • Visualizaciones gráficas con matplotlib
  • Manipulación de datos con Pandas

Tema 7. Programación concurrente

  • Introducción y objetivos
  • Métodos de sincronización
  • Comunicación entre hilos
  • Problemas en la programación concurrente
  • Ejemplos clásicos de la programación concurrente

Tema 8. Programación paralela

  • Introducción y objetivos
  • Modelos de computación paralela
  • Evaluación del rendimiento en programas paralelos
  • Paralelización sencilla con GNU Parallel
  • El módulo multiprocessing
  • Paso de mensajes con MPI
  • Introducción a la programación distribuida. Llamamientos a procedimientos remotos
  • Gestión con Celery e introducción a PySpark
  • Referencias bibliográficas

Tema 9. Programación heterogénea

  • Introducción y objetivos
  • La GPU como dispositivo de cómputo general
  • CUDA / PyCUDA
  • OpenCL / PyOpenCL
  • Programación GPGPU con Numba

Tema 10. Computación en la nube

  • Introducción y objetivos
  • Ventajas e inconvenientes de la nube
  • Categorización: IaaS, PaaS, FaaS, SaaS
  • Docker para aplicaciones en Python

Las actividades formativas de la asignatura se han elaborado con el objetivo de adaptar el proceso de aprendizaje a las diferentes capacidades, necesidades e intereses de los alumnos.

Las actividades formativas de esta asignatura son las siguientes:

  • Trabajos individuales. Se trata de actividades de diferentes tipos: reflexión, análisis de casos, prácticas, análisis de textos, etc.
  • Trabajos colaborativos. Son actividades grupales en las que tendrás la oportunidad de trabajar con tus compañeros. Durante el desarrollo de la asignatura tendrás toda la información que necesites sobre cómo organizarte para trabajar en equipo.
  • Participación en eventos. Son actividades programadas todas las semanas del cuatrimestre como clases en directo o foros de debate.
Descargar programación

Estas actividades formativas prácticas se completan, por supuesto, con estas otras:

  • Estudio personal
  • Tutorías. Las tutorías se pueden articular a través de diversas herramientas y medios. Durante el desarrollo de la asignatura, el profesor programa tutorías en días concretos para la resolución de dudas de índole estrictamente académico a través de las denominadas “sesiones de consultas”. Como complemento de estas sesiones se dispone también del foro “Pregúntale al profesor de la asignatura” a través del cual se articulan algunas preguntas de alumnos y las correspondientes respuestas en el que se tratan aspectos generales de la asignatura. Por la propia naturaleza de los medios de comunicación empleados, no existen horarios a los que deba ajustarse el alumno.
  • Examen final presencial u online

Las horas de dedicación a cada actividad se detallan en la siguiente tabla:

ACTIVIDADES FORMATIVAS HORAS POR ASIGNATURA % PRESENCIAL
Clases en directo 15 horas 100%
Recursos didácticos audiovisuales 6 horas 0
Estudio del material básico 60 horas 0
Lectura del material complementario 45 horas 0
Trabajos, casos prácticos y test de evaluación 17 horas 0
Sesiones prácticas de laboratorio virtual 12 horas 16,7%
Tutorías 16 horas 30%
Trabajo colaborativo 7 horas 0
Examen final 2 horas 0%
Total 180 horas -

Bibliografía básica

Recuerda que la bibliografía básica es imprescindible para el estudio de la asignatura. Cuando se indica que no está disponible en el aula virtual, tendrás que obtenerla por otros medios: librería UNIR, biblioteca...

Los textos necesarios para el estudio de la asignatura han sido elaborados por UNIR y están disponibles en formato digital para consulta, descarga e impresión en el aula virtual.

Bibliografía complementaria

  • VanderPlas, J. (2016). Python Data Science Handbook: Essential Tools for Working with Data. O’Reilly.
  • Lee, K. D. & Hubbard, S. (2015). Data Structures and Algorithms with Python. Springer.
  • Mehta, H. K. (2015). Mastering Python Scientific Computing. Packt Publishing.
  • Zaccone, G. (2019). Python Parallel Programming Cookbook. Packt Publishing.
  • Forbes, E. (2017). Learning Concurrency in Python. Packt Publishing.
  • Skiena, S. (2008). The Algorithm Design Manual. Springer.
  • Burns, B. (2018). Designing Distributed Systems. O’Reilly.
  • Chacon, S. & Straub, B. (2014). Pro Git. Apress.

El sistema de calificación se basa en la siguiente escala numérica:

0 - 4, 9 Suspenso (SS)
5,0 - 6,9 Aprobado (AP)
7,0 - 8,9 Notable (NT)
9,0 - 10 Sobresaliente (SB)

La calificación se compone de dos partes principales:

El examen se realiza al final del cuatrimestre y es de carácter PRESENCIAL u ONLINE y OBLIGATORIO. Supone el 60% de la calificación final y para que la nota obtenida en este examen se sume a la nota final, es obligatorio APROBARLO.

La evaluación continua supone el 40% de la calificación final. Este 40% de la nota final se compone de las calificaciones obtenidas en las diferentes actividades formativas llevadas a cabo durante el cuatrimestre.

Ten en cuenta que la suma de las puntuaciones de las actividades de la evaluación continua permite que realices las que prefieras hasta conseguir el máximo puntuable mencionado. En la programación semanal de la asignatura, se detalla la calificación máxima de cada actividad o evento concreto puntuables.

Sistema de evaluación Ponderación min - max
Participación del estudiante (sesiones, foros, tutorías) 0% - 40%
Trabajos, proyectos, laboratorios/talleres y casos 0% - 40%
Test de evaluación 0% - 40%
Examen final 60% - 60%

Jesús Cigales Canga

Formación académica: Graduado en Química y Master en Ciencias Analíticas y Bioanalíticas por la Universidad de Oviedo, Master en Formación para el Profesorado por la Universidad Isabel I de Burgos, Master en Data Science & Big Data por The Valley Business School y Master en Big Data & Business Analytics por FADE-Asturias. Se encuentra finalizando la tesis doctoral cuyo núcleo de investigación son los nanomateriales y Carbon Quantum Dots.

Experiencia: Ha trabajado en empresas internacionales como Bayer Hispania S.L. dentro del departamento de Control de Calidad. Actualmente, trabaja como Responsable de Ciencia del Dato en Química del Nalón S.A., trabaja codo con codo con un equipo multidisciplinar formado por Data Scientists y Data Engineers. Como responsable del departamento tiene que garantizar el cumplimiento de todo el proceso que engloban los proyectos de Ciencia del Dato (Gobierno, desarrollo de código e implementación). Trabaja como profesor en Universidad Internacional de La Rioja, IE University y Universidad Internacional de Valencia. Ha publicado artículos científicos en revistas especializadas y participado en diversos proyectos de investigación.

Lineas de investigación: Sus principales líneas de investigación han sido el descubrimiento de nuevos materiales de base carbono, la caracterización de Carbon Quantum Dots (CQDs) y el estudio de sus propiedades luminiscentes haciendo uso de distintos métodos numéricos. Dirige activamente, distintos Trabajos Fin de Máster de distintas Universidades centrando su estudio en la aplicación de la Inteligencia Artificial (Machine Learning/Deep Learning) en la resolución de problemas.

Al tratarse de formación online puedes organizar tu tiempo de estudio como desees, siempre y cuando vayas cumpliendo las fechas de entrega de las actividades y la fecha de exámenes. Nosotros, para ayudarte, te proponemos los siguientes pasos:

  1. Desde el Campus virtual podrás acceder al aula virtual de cada asignatura en la que estés matriculado y, además, al aula virtual del Curso de introducción al campus virtual. Aquí podrás consultar la documentación disponible sobre cómo se utilizan las herramientas del aula virtual y sobre cómo se organiza una asignatura en UNIR. También podrás organizar tu plan de trabajo con tu tutor personal.
  2. Observa la programación semanal. Allí te indicamos qué parte del temario debes trabajar cada semana.
  3. Ya sabes qué trabajo tienes que hacer durante la semana. Accede ahora a la sección Temas del aula virtual. Allí encontrarás el material teórico y práctico del tema correspondiente a esa semana.
  4. Comienza con la lectura de las Ideas clave del tema. Este material es el que debes estudiar para superar la asignatura. Consulta, además, las secciones del tema que contienen material complementario: con esto podrás tener una visión más amplia sobre el tema que estaás trabajando..
  5. Dedica tiempo al trabajo práctico (sección Actividades). En la programación semanal te detallamos cuáles son las actividades correspondientes a cada semana y qué calificación máxima puedes obtener con cada una de ellas.
  6. Te recomendamos que participes en los eventos del curso (clases en directo, foros de debate…). Para conocer la fecha concreta de celebración de los eventos debes consultar las herramientas de comunicación del aula vitual. Tu profesor y tu tutor personal te informarán de las novedades de la asignatura.

En el aula virtual del Curso de introducción al campus virtual encontrarás siempre disponible la documentación donde te explicamos cómo se estructuran los temas y qué podrás encontrar en cada una de sus secciones. Tambén puedes consulltar ahí el funcionamiento de las distintas herramientas del aula virtual: Correo, Foro, Clases en directo, Envío de actividades, etc.

Ten en cuenta estos consejos...

  • Sea cual sea tu plan de estudio, accede periódicamente al aula Virtual, ya que de esta forma estarás al día de las novedades del curso y en contacto con tu profesor y con tu tutor personal.
  • Recuerda que no estás solo: consulta todas tus dudas con tu tutor personal utilizando el correo electrónico. Además, siempre puedes consultar tus dudas sobre el temario en los foros que encontrarás en cada asignatura (Pregúntale al profesor).
  • ¡Participa! Siempre que te sea posible accede a los foros de debate. El intercambio de opiniones, materiales e ideas nos enriquece a todos.
  • Y ¡recuerda!, estás estudiando con metodología on line: tu esfuerzo y constancia son imprescindibles para conseguir buenos resultados. ¡No dejes todo para el último día!