Objetivos | Esta unidade curricular tem como objetivo fornecer os conhecimentos necessários aos estudantes para compreenderem, analisarem e avaliarem as características fundamentais de sistemas de computação. Os resultados da aprendizagem focam-se em entender como sistemas de computação representam e processam dados, e nos conceitos da sua arquitetura relevantes para o desempenho de código, dando ênfase ao desenvolvimento do pensamento crítico na análise e melhoria de limitações ao desempenho. Os conteúdos programáticos são consistentes e sincronizados com estes resultados de aprendizagem. Os conceitos são apresentados recorrendo a casos de estudo, permitindo aos estudantes avaliar o impacto de usar eficazmente o hardware no desempenho e eficiência do código. Os conteúdos estão estruturados de forma a permitir o estudo incremental e o teste de otimizações e metodologias que permitam o desenvolvimento de código paralelo eficiente.
|
Programa | 1. Estrutura e organização de um computador 2. Representação binária de números inteiros e reais 3. Modelo de execução de desempenho (métricas e previsão de desempenho) 4. Organização e desempenho da hierarquia de memória 5. Encadeamento de instruções, superescalaridade, e processamento vetorial 6. Paralelismo em ambientes de memória partilhada com dispositivos multicore
|
Bibliografia | Computer Organization and Design: The Hardware/Software Interface, David Patterson and John Hennessy, 5th Edition, Morgan Kaufmann, 2013. Computer Systems: A Programmer's Perspective, Randal E. Bryant and David R. O'Hallaron, 3rd Edition, Pearson, 2016. Algorithms in C: parts 1-4, Fundamentals, Data Structures, Sorting, and Searching, Robert Sedgewick, 3rd Edition, Addison-Wesley Longman Publishing Co., 1997.
|
Resultados da aprendizagem | - Reconhecer a organização e estrutura de um computador - Analisar o funcionamento de programas imperativos (tipo C) - Usar efetivamente ferramentas de compilação de linguagens de alto nível - Caracterizar as métricas de desempenho e a sua relação com o código - Avaliar o impacto do uso implícito e explícito da hierarquia de memória - Analisar o impacto da superescalaridade e do processamento vetorial no desempenho de código
|