Programación Consciente de la Arquitectura

Usted está aquí

Créditos
6
Tipos
Complementaria de especialidad (Ingeniería de Computadores)
Requisitos
  • Prerrequisito: AC
Departamento
AC
Asignatura muy práctica que tiene como objetivo principal el aprendizaje de técnicas de programación para "la optimización" (reducción del tiempo de ejecución) de aplicaciones; considerando la arquitectura del computador y lo que puede hacer el compilador, utilizando herramientas de medida y análisis y herramientas de alto nivel de desarrollo de hardware específico desde código C.

Profesorado

Responsable

  • Daniel Jimenez Gonzalez ( )

Horas semanales

Teoría
1
Problemas
1
Laboratorio
2
Aprendizaje dirigido
0
Aprendizaje autónomo
6

Competencias

Competencias Transversales

Espíritu emprendedor e innovador

  • G1 [Avaluable] - Conocer y comprender la organización de una empresa y las ciencias que rigen su actividad; capacidad de comprender las reglas laborales y las relaciones entre la planificación, las estrategias industriales y comerciales, la calidad y el beneficio. Desarrollar la creatividad, el espíritu emprendedor y la tendencia a la innovación.
    • G1.3 - Ser resolutivo. Utilizar conocimientos y habilidades estratégicas para la creación y gestión de proyectos, aplicar soluciones sistémicas a problemas complejos, y diseñar y gestionar la innovación en la organización. Demostrar flexibilidad y profesionalidad en el desarrollo de su trabajo.

Competencias Técnicas de cada especialidad

Especialidad ingeniería de computadores

  • CEC2 - Analizar y evaluar arquitecturas de computadores incluyendo plataformas paralelas y distribuidas, y desarrollar y optimizar software para dichas plataformas.
    • CEC2.2 - Programar considerando la arquitectura hardware, tanto en ensamblador como en alto nivel.
    • CEC2.3 - Desarrollar y analizar software para sistemas basados en microprocesadores y sus interfícies con usuarios y otros dispositivos.
  • CEC3 - Desarrollar y analizar hardware y software para sistemas empotrados y/o de muy bajo consumo.
    • CEC3.1 - Analizar, evaluar y seleccionar las plataformas hardware y software más adecuadas para el soporte de aplicaciones empotradas y de tiempo real.
    • CEC3.2 - Desarrollar procesadores específicos y sistemas empotrados; desarrollar y optimizar el software de estos sistemas. 

Objetivos

  1. Seguir una metodología de optimización para reducir el tiempo de ejecución de una aplicación en un procesador determinado; primeramente identificando las partes más costosas, después evaluando si vale la pena o no (ley de Amdahl ) su optimización, y finalmente realizando la optimización y evaluar si se ha sacado suficiente rendimiento como para incorporarla a la aplicación.
    Competencias relacionadas: CEC2.3, CEC2.2,
  2. Identificar y reconocer las optimizaciones que el compilador puede hacer, ya sea por el conocimiento básico que se tenga del compilador como gcc, del análisis del código ensamblador generado, o porque se hace "profiling" o instrumentación.
    Competencias relacionadas: CEC2.3, CEC3.2, CEC3.1,
  3. Escoger las herramientas y sus opciones más adecuadas para generar el código binario, analizar el código binario generado y analizar la ejecución de la aplicación ("profiling", instrumentación, "trace"), además de escoger las métricas para hacer este análisis y el entorno más adecuado para hacer la evaluación.
    Competencias relacionadas: G1.3, CEC2.3, CEC3.1,
  4. Definir latencia, latencia de repetición y "throughput" de una instrucción, y aplicar este conocimiento en la optimización de sus códigos para elegir la operación más adecuada en cada caso.
    Competencias relacionadas: CEC3.2, CEC2.2,
  5. Aplicar correctamente técnicas de optimización para reducir y / o evitar operaciones de larga latencia, reduciendo el tiempo de ejecución de la aplicación.
    Competencias relacionadas: G1.3, CEC3.2, CEC2.2,
    Subcompetences:
    • Aplicar la técnica de "memoization" para reducir / evitar operaciones de larga latencia
    • Reducir el "overhead" total de las llamadas al sistema operativo y librerías.
    • Especializarse el código de las aplicaciones para reducir / evitar operaciones de larga latencia.
    • Aplicar la técnica de "bithacks" para reducir / evitar operaciones de larga latencia
  6. Reducir el tiempo destinado a los saltos en un código, aplicando técnicas que reducen el número de saltos.
    Competencias relacionadas: G1.3, CEC3.2, CEC2.2, CEC3.1,
    Subcompetences:
    • Aplicar las técnicas de "loop unrolling", "loop fusion" and "loop collapsing".
    • Cambiar el orden de evaluación de las condiciones para reducir, en media, el tiempo de ejecución de una aplicación.
    • Aplicar la técnica de "code hoisting".
    • Aplicar otras técnicas como "memoization", "bithacks", etc. para reducir el número de saltos.
    • Aplicar la técnica de "inlining".
  7. Caracterizar la jerarquía de memoria del computador con el que trabaja ya sea documentándose con manuales o ya sea estudiándolo empíricamente con códigos y herramientas de profiling y tracing.
    Competencias relacionadas: CEC2.3,
  8. Aplicar correctamente técnicas de optimización para hacer un uso más eficiente de la jerarquía de memoria del procesador, reduciendo el tiempo de ejecución de la aplicación.
    Competencias relacionadas: G1.3, CEC3.2, CEC2.2,
    Subcompetences:
    • Aplicar correctamente técnicas de optimización para mejorar la explotación de la localidad de datos.
    • Detectar y evitar posibles "data aliasing" para ayudar a la labor del compilador.
    • Aplicar optimizaciones para aprovechar el ancho de banda de memoria.
  9. Identificar si un código es vectoritzable y vectorizar-si esto significa una reducción del tiempo de ejecución de la aplicación.
    Competencias relacionadas: CEC3.2, CEC2.2, CEC3.1,
    Subcompetences:
    • Aplicar correctamente las técnicas de optimización de códigos escalares también sobre códigos vectoriales.
  10. Analizar e identificar si un código puede ser acelerado con un hardware específico y utilizar las herramientas de alto nivel disponibles en la asignatura para definir el hardware específico y hacerlo des de C on pragmas muy sencillos.
    Competencias relacionadas: G1.3, CEC3.2,
  11. Analizar y optimizar una aplicación de tamaño medio duerante el curso, aplicando la metodología de optimización y las técnicas de optimización seguidas en la asignatura, en coordinación con el resto de miembros de su equipo.
    Competencias relacionadas: G1.3, CEC2.2,
  12. Liderar un grupo de estudiantes para obtener la solución más adecuada a un problema de optimización o de análisis dado, considerando las soluciones del resto de miembros de su equipo de trabajo y tras una discusión entre todos los miembros del equipo.
    Competencias relacionadas: G1.3,

Contenidos

  1. Introducción: Programación consciente de la arquitectura
    Que entendemos por programación consicent de la arquitectura y en qué casos vale la pena hacerlo. Estrategias de optimización. Evaluación del rendimiento.
  2. Herramientas de programación y optimización
    Medida del rendimiento de los programas. Opciones de compilación. Estudio del comportamiento dinámico de los programas. Uso de herrramientas de alto nivel para accelerar (optimizar) en hardware algunas partes del programa a partir de código C.
  3. Operaciones de larga latencia
    Alternativas a algunas operaciones de coste de ejecución elevado y / o larga latencia. Sustitución de operaciones complejas por operaciones más sencillas. Memorización de resultados. Detección de casos triviales. Uso de los recursos sistema operativo.
  4. Optimización del control de flujo
    Detección y eliminación de saltos críticos. Inlining. Desenrrollado de bucles, etc.
  5. Optimizaciones consciente de la memoria
    Tamaño y alineación de datos. División de los datos en bloques de tamaño proporcional a la memoria cache. Desambiguación de memoria. Definición de las estructuras de datos y pragmas para mejorar el rendimiento de la aplicación tanto en un hardware específico como en un procesador de carácter general.
  6. Extensiones vectoriales y uso de hardware específico para "vectorizar"
    Instrucciones del lenguaje máquina. Identificación de códigos que se pueden vectorizar. Inserción de código vectorial en código C.
    Uso de herramientas de alto nivel para acelerar (optimizar) con hardware las partes del programa que consumen mayor tiempo de ejecución, en un sistema SoC con procesadores ARM, utilizando la misma idea de la vectorización.

Actividades

Actividad Acto evaluativo


Introducción a la programación consciente de la arquitectura

Participar activamente en una sesión de clase expositiva-participativa de 2 horas de teoría y problemas. (2 horas). Estudiar en casa el tema asignado y realizar los ejercicios que se hayan propuesto como trabajo autónomo.
Objetivos: 1
Contenidos:
Teoría
1h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
2h

Herramientas de programación y optimización

Participar activamente en una sesión de clase expositiva-participativa de 2 horas de teoría y problemas. (2 horas). Estudiar en casa el tema asignado y realizar los ejercicios que se hayan propuesto como trabajo autónomo.
Objetivos: 2 3 10
Contenidos:
Teoría
2h
Problemas
2h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Operaciones de larga latencia

Participar activament en una sessió de classe expositiva-participativa de 2 hores de teoria i problemes. (2 hores). Estudiar a casa el tema assignat i realitzar els exercicis que s'hagin proposat com a treball autònom.
Objetivos: 1 2 4 5 12
Contenidos:
Teoría
2h
Problemas
2h
Laboratorio
4h
Aprendizaje dirigido
0h
Aprendizaje autónomo
12h

Optimización del control de flujo

Participar activamente en una sesión de clase expositiva-participativa de 2 horas de teoría y problemas. (2 horas). Estudiar en casa el tema asignado y realizar los ejercicios que se hayan propuesto como trabajo autónomo.
Objetivos: 1 2 3 6 12 10
Contenidos:
Teoría
2h
Problemas
2h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
18h

Control 1-T

Temas 1-3.
Objetivos: 1 2 3 4 5 7 10
Semana: 7
Tipo: examen de teoría
Teoría
1h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
2h

Control-1-P

Temas 1-3
Objetivos: 1 2 3 4 5 7 10
Semana: 7
Tipo: examen de problemas
Teoría
0h
Problemas
1h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
2h

Optimizaciones consciente de la memoria

Participar activamente en una sesión de clase expositiva-participativa de 2 horas de teoría y problemas. (2 horas). Estudiar en casa el tema asignado y realizar los ejercicios que se hayan propuesto como trabajo autónomo.
Objetivos: 1 2 3 8 7 12 10
Contenidos:
Teoría
2h
Problemas
3h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
14h

Extensiones vectoriales y uso de hardware específico

Participar activamente en una sesión de clase expositiva-participativa de 2 horas de teoría y problemas. (2 horas). Estudiar en casa el tema asignado y realizar los ejercicios que se hayan propuesto como trabajo autónomo.
Objetivos: 1 2 3 9 12 10
Contenidos:
Teoría
2h
Problemas
4h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
22h

Control 2-T

Todos los temas. Más centrado en temas 5-6, pero puede salir cualquier concepto previo.
Objetivos: 1 2 3 4 5 6 8 7 9 11 12 10
Semana: 14
Tipo: examen de teoría
Teoría
1h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
2h

Control-2-P

Todos los temas. Más centrado en temas 4-6 pero puede salir cualquier concepto previo.
Objetivos: 1 2 3 4 5 6 8 7 9 11 12 10
Semana: 14
Tipo: examen de problemas
Teoría
0h
Problemas
1h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
2h

Examen Final

Examen Final. Fuera de horario de clase.
Objetivos: 11 12 10 1 2 3 4 5 6 8 7 9
Semana: 15 (Fuera de horario lectivo)
Tipo: examen de teoría
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h

Metodología docente

Clases de teoría orientadas a exponer conceptos básicos de arquitectura de procesadores y metodología de optimización y herramientas; intercalando pequeños problemas a resolver en clase.

Para cada tema, una serie de ejercicios teórico-prácticos se propondrán para que los alumnos lo resuelvan y lo cuelguen en foros creados por el/la profesor/a en Atenea. Los problemas a resolver en los foros serán de una dificultad media y orientados a facilitar la actividad a laboratorio, sirviendo así de trabajo previo.
Se crearán equipos de trabajo de aproximadamente 5 alumnos. Se intentará que el número de personas por equipo sea igual al número de problemas asignados por tema, y ¿¿será fijo para todo el curso. En un principio, se asignarán un mínimo de 5 problemas por equipo y tema.


La metodología para resolver estos problemas consta de un trabajo personal y un trabajo en equipo. Básicamente consistirá en: (1) resolver individualmente los problemas pedidos para ese tema y colgar el problema resuelto a un foro que el profesor crea para cada equipo, (2) discutir en el foro del equipo de las soluciones individuales (primer feedback que obtendrán los/as alumnos/as) y acordar una solución para cada problema y (3) colgar la solución final acordada a cada problema en cada equipo a un foro de soluciones finales común a todos los equipos. En cada equipo, cada estudiante será responsable de un problema, y será quien colgará la solución final de aquel problema en el foro común antes de una fecha concreta. El profesorado revisará estas soluciones finales (segundo feedback) pero también puede revisar los foros de discusión de las soluciones individuales.

En las clases de problemas se realizarán actividades en equipo y se discutirán con todos los equipos las soluciones obtenidas (tercer feedback).
Para facilitar que los alumnos puedan comparar sus soluciones con las del resto de alumnos de la asignatura, los foros estarán abiertos a todos.

Las clases de laboratorio servirán de soporte a la teoría y de comprobación empírica de los ejercicios hechos en clase de problemas. Los alumnos dispondrán de la información de prácticas antes de cada sesión. La realización de estas prácticas se hará íntegramente en las horas de laboratorio asignadas. Las prácticas se dividirán en dos grupos: experimentos de alcance limitado para ilustrar aplicaciones y optimizaciones determinadas, y otras en que habrá que aplicar todos los conocimientos adquiridos para optimizar una aplicación completa.

Al final de la última sesión de laboratorio de cada tema, los alumnos dispondrán de un tiempo para entregar algunos de los ejercicios hechos en el laboratorio.

Método de evaluación

En la evaluación del/la estudiante intervienen 5 componentes:

(1) Ejercicios del laboratorio: L - 40% de la nota de la asignatura

Hay una práctica por cada tema que puede durar más de una sesión de laboratorio. Cada práctica tendrá un peso del 20% del laboratorio.

L = 0.2*L2+0.2*L3+0.2*L4+0.2*L5+0.2*L6

La solución de los ejercicios del laboratorio será un informe breve (entre 1 y 5 páginas), códigos fuentes y scripts que deberán ser entregado al profesor/a vía Raco que evaluará el informe.

(2) - Ejercicios de clase de problemas: P - 10% de la nota de la asignatura.

Estos ejercicios son pedidos por el profesorado en clase de problemas, y han de trabajar en equipo y presentar en los foros de Atenea o via Raco.


(3) Nota de Controles parciales: C - 50% de la nota de la asignatura

A lo largo del curso los alumnos deberán responder 2 controles: C1, C2. Su objetivo es evaluar si el alumno/a ha conseguido asimilar las optimizaciones de código explicadas hasta el momento.

C = 0.35 * C1 +0.65 * C2.

(4) Nota de Examen final: F

Final: Examen final donde se preguntarán casos prácticos y teóricos. Este examen sólo es obligatorio para aquellos alumnos que no hayan asolido una nota de aprobado en los controls (C>=5)

(5) Nota Extra de Challenge: cha

Challenge: Se propondrá un ejercicio de optimización a entregar mediante un portal web de ejecución o via Racó donde se premiarán las soluciones más rápidas. Los alumnos que presenten las 10 soluciones más rápidas verán incrementada su nota final en 1 punto (solución más rápida), 0.9 puntos (segunda solución más rápida ),... y 0.1 puntos (décima solución más rápida) respectivamente.
Esta nota adicional sólo se aplicará a los estudiantes con nota C>=5.0.


La asignatura se puede aprobar de dos formas:
===========================================

La nota de exámenes (NEX) se puede conseguir de dos formas, bien por evaluación continuada o bien por examen final:

Si (C> = 5)
NEX = MAX (C, F)
contrario:
NEX = MAX(0.25*C+0.75*F, F)

La Nota Final es:

Nota Final = MIN (0.50 * Nex + 0.1*P +0.40 * L + cha, 10)

La competencia transversal se evalúa a cada estudiante considerando su trabajo en equipo, liderazgo en encontrar soluciones eficientes, alternativas, creativas e innovadoras a los problemas a resolver de los que el/la estudiante sea responsable . Es decir, s'avaularà su capacidad de encontrar una solución que sea una combinación exitosa de las soluciones encontradas por un problema, o la mejor solución. También formará parte de esta evaluación su participación en encontrar soluciones creativas a problemas que no sea responsable.

Bibliografía

Básica:

Complementaria:

  • Transparències de suport de l'assignatura (en anglès) - Jiménez-González, Daniel, , 2022.
  • Col·lecció de problemes de suport de l'assignatura (en anglès) - Jiménez-González, Daniel, , 2022.
  • Enunciats de laboratori de suport de l'assignatura (en anglès) - Jiménez-González, Daniel, , 2022.

Capacidades previas

Las previstas por los requisitos.