Ficha Unidade Curricular (FUC)

Informação Geral / General Information


Código :
04945
Acrónimo :
04945
Ciclo :
2.º ciclo
Línguas de Ensino :
Português (pt)
Língua(s) amigável(eis) :
inglês

Carga Horária / Course Load


Semestre :
1
Créditos ECTS :
6.0
Aula Teórica (T) :
0.0h/sem
Aula Teórico-Prática (TP) :
24.0h/sem
- Síncrono à distância (TP) :
8.0h/sem
- Assíncrono à distância (TP) :
16.0h/sem
Aula Prática e Laboratorial (PL) :
0.0h/sem
Trabalho de Campo (TC) :
0.0h/sem
Seminario (S) :
0.0h/sem
Estágio (E) :
0.0h/sem
Orientação Tutorial (OT) :
1.0h/sem
- Síncrono à distância (OT) :
1.0h/sem
Outras (O) :
0.0h/sem
Horas de Contacto :
25.0h/sem
Trabalho Autónomo :
0.0
Horas de Trabalho Total :
25.0h/sem

Área científica / Scientific area


480 - Informática

Departamento / Department


Departamento de Tecnologias Digitais

Ano letivo / Execution Year


2025/2026

Pré-requisitos / Pre-Requisites


Recomenda-se experiência de programação Python.

Objetivos Gerais / Objectives


O principal objetivo desta unidade curricular (UC) é dotar os estudantes de conhecimentos e competências avançadas em computação paralela, com ênfase na utilização do GPU para acelerar tarefas de computação gráfica, processamento de dados e aprendizagem profunda. Pretende-se que os estudantes compreendam os princípios subjacentes à arquitetura CUDA e às estratégias de paralelização, bem como dominem ferramentas e bibliotecas, tais como Numba para Python, e cuDNN, aplicando-as no desenvolvimento e otimização de aplicações de alto desempenho. Neste contexto, a UC abordará a implementação de kernels CUDA personalizados, a análise e otimização de desempenho em GPU, e a utilização de cuDNN no contexto da aprendizagem profunda, permitindo aos estudantes desenvolver soluções eficientes e escaláveis em domínios como o treino de redes neuronais e simulação distribuída de casos de estudo complexos.

Objetivos de Aprendizagem e a sua compatibilidade com o método de ensino (conhecimentos, aptidões e competências a desenvolver pelos estudantes) / Learning outcomes


No final desta UC, cada estudante deverá ser capaz de: OA1: Explicar a arquitetura e os princípios fundamentais da computação paralela em GPU OA2: Diferenciar as várias abordagens de programação paralela e selecionar as técnicas mais adequadas para otimizar o desempenho das aplicações computacionais em GPU. OA3: Implementar kernels CUDA personalizados, utilizando a framework Numba OA4: Demonstrar capacidade de análise de desempenho, detetando e corrigindo estrangulamentos computacionais e problemas de ocupação, comunicação e latência de memória. OA5: Aplicar o cuDNN para acelerar operações de aprendizagem profunda, integrando as rotinas otimizadas da biblioteca em fluxos de trabalho de treino e inferência de redes neuronais convolucionais. OA6: Desenvolver soluções completas que combinam computação gráfica, processamento paralelo e algoritmos de aprendizagem profunda, consolidando competências técnicas e de raciocínio crítico na abordagem de problemas complexos.

Conteúdos Programáticos / Syllabus


CP1: Introdução à computação paralela e à arquitetura CUDA, conceitos de paralelização de tarefas, estrutura de blocos e threads, hierarquia de memória em GPU CP2: Desenvolvimento de kernels em CUDA, modelação de grids, otimização do acesso à memória global, partilhada e constante, técnicas de coalescência de memória. CP3: Compilação para GPU utilizando o Numba, paralelização de ambientes com recurso à GPU. CP4: Perfis de execução, identificação de estrangulamentos computacionais, ajuste de parâmetros de grid e bloco, estratégias de redução do uso de memória global. CP5: Introdução ao cuDNN: Principais rotinas e funcionalidades, integração com estruturas de dados e frameworks de aprendizagem profunda CP6: Casos de estudo e aplicações práticas, simulação e treino de redes neuronais convolucionais

Demonstração da coerência dos conteúdos programáticos com os objetivos de aprendizagem da UC / Evidence that the curricular unit's content dovetails with the specified learning outcomes


O CP1 estabelece as bases teóricas da computação paralela em GPU, sustentando o OA1, ao apresentar a arquitetura CUDA e os conceitos fundamentais necessários para compreender as vantagens e desafios da programação paralela. O CP2 e o CP3 fornecem os conhecimentos práticos para a programação CUDA e para o uso do Numba, garantindo a consecução do OA2 e do OA3, ao permitir que o estudante desenvolva kernels personalizados. O CP4 aborda estratégias de otimização e análise de desempenho, alinhando-se com o OA4, ao ensinar a detetar estrangulamentos e a melhorar a eficiência computacional. O CP5, dedicado ao cuDNN, liga-se diretamente ao OA5, introduzindo a utilização desta biblioteca na aprendizagem profunda e a sua integração com as redes neuronais convolucionais para aceleração de treino e inferência. Finalmente, o CP6 consolida todos estes conhecimentos, criando condições para a aplicação integrada em cenários complexos (OA6).

Avaliação / Assessment


Esta UC, por ter uma natureza bastante prática e de aplicação, segue o modelo de de Avaliação ao Longo do Semestre (prevista em RGACC), não contemplando exame final. A avaliação desta UC tem a seguinte composição: - 2 Quizzes (20%): Ao longo do semestre serão disponibilizados dois quizzes de curta duração, realizados individualmente na plataforma de e-learning. - Projeto Final (80%): O projeto final consiste no desenvolvimento de um trabalho prático que agrega os conhecimentos e competências adquiridos ao longo do semestre, onde poderá haver participação de organizações externas / empresas no desafio proposto. Este projeto será desenvolvido ao longo do semestre e será acompanhado por tutorias individuais ou em grupo, de modo a garantir o seguimento contínuo e o feedback formativo. A avaliação do Projeto Final (80%) será faseada da seguinte forma: -- 1ª Tutoria (20%): Nesta fase, o estudante apresenta o planeamento inicial do projeto, incluindo a definição do problema e os objetivos a atingir com o projeto. -- 2ª Tutoria (20%): Nesta segunda fase, o foco centra-se no progresso técnico do projeto. O estudante deverá demonstrar o código parcial já desenvolvido, apresentar testes parciais de desempenho e discutir as primeiras estratégias de otimização. Espera-se uma melhoria contínua do trabalho, beneficiando do feedback do docente. -- Tutoria Final (40%): Na última fase, o estudante apresenta a versão final do projeto, incluindo todo o código funcional, a análise detalhada de desempenho, a discussão sobre resultados obtidos, as dificuldades enfrentadas e as soluções adotadas. É também avaliada a capacidade de análise crítica, a clareza da comunicação e a relevância dos resultados. O conjunto das três tutorias (1ª, 2ª e Final) totaliza 80% da avaliação, e cada tutoria possui uma nota mínima de 8,5 valores. Para obter aprovação na UC, o estudante deverá alcançar uma nota final mínima de 10 valores, resultante da soma ponderada dos quizzes (20%) e do projeto final (80%). Os quizzes, realizados individualmente, visam aferir a compreensão dos conteúdos teóricos e práticos à medida que são introduzidos, permitindo um feedback rápido e contínuo. Não será exigida nota mínima nos quizzes, mas a sua realização contribui para a consolidação das aprendizagens e tem um peso de 20% na nota final. Um estudante é considerado como Reprovado caso não atinja aprovação com a Avaliação ao Longo do Semestre desta UC. A melhoria de nota poderá ser obtida no ano letivo seguinte, repetindo as componentes de avaliação, em conformidade com o regulamento em vigor. A 1ª Época e 2ª Época poderão ser utilizadas para realização de momentos de avaliação. A presença nas sessões síncronas não é obrigatória. Para além do RGACC, recomenda-se a leitura de outros documentos de referência para o processo de avaliação, tais como o Regulamento de Estudantes com Estatuto Especial (REEE) e o Código de Conduta Académica (CCA).

Metodologias de Ensino / Teaching methodologies


Nesta UC, as metodologias de ensino e aprendizagem são estruturadas para promover uma abordagem ativa, flexível e centrada no estudante, potenciando a autonomia e a capacidade de resolução de problemas complexos. A articulação com o modelo de ensino a distância (EaD) é assegurada através de um equilíbrio entre momentos síncronos, assíncronos, materiais interativos e atividades colaborativas. As aulas teóricas expositivas, disponibilizadas em formato vídeo (assíncrono), apresentam os fundamentos teóricos da computação gráfica de alto desempenho, a arquitetura CUDA, a programação paralela e a utilização de Numba e cuDNN. Estas sessões incluem exemplos práticos e casos reais, permitindo aos estudantes compreender o contexto de aplicação dos conceitos. Os estudantes têm acesso a recursos multimédia, tais como diapositivos interativos, tutoriais, artigos científicos e documentação técnica, fomentando a aprendizagem autónoma e a exploração independente dos temas. Os momentos síncronos, em videoconferência, destinam-se à discussão de tópicos avançados, esclarecimento de dúvidas, análise de problemas reais e partilha de experiências entre colegas e docentes. Estas sessões asseguram o acompanhamento individual e coletivo, bem como o feedback atempado e construtivo, incentivando a participação ativa, o pensamento crítico e a aplicação prática dos conceitos aprendidos. As aulas laboratoriais, organizadas em sessões interativas online, permitem aos estudantes aplicar os conteúdos programáticos em cenários práticos. O docente propõe exercícios crescentemente complexos, convidando os estudantes a desenvolver kernels CUDA, a otimizar o desempenho dos seus códigos e a integrar cuDNN em fluxos de trabalho de aprendizagem profunda. Esta prática consolidada reforça as competências técnicas, a autonomia e a capacidade de resolver problemas não trivialmente estruturados. A aprendizagem baseada em projetos (Project-Based Learning) é integrada ao longo do semestre: cada estudante ou grupo desenvolve um projeto final que integra computação gráfica, processamento paralelo e aprendizagem profunda. Este projeto reforça a capacidade de planeamento, de gestão do tempo, de integração de diferentes técnicas e ferramentas, e culmina na apresentação de uma solução funcional, testada e avaliada criticamente. A análise de casos reais, o trabalho colaborativo e a comunicação clara dos resultados fortalecem as competências transversais e a autonomia, assegurando a coerência entre metodologia e objetivos de aprendizagem. Desta forma, a UC conjuga teoria, prática, discussão orientada, experimentação e aplicação de ferramentas profissionais num ambiente de aprendizagem flexível e dinâmico, promovendo o desenvolvimento de competências técnicas, analíticas e de colaboração, coerentes com as exigências da computação de alto desempenho e da aprendizagem profunda.

Demonstração da coerência das metodologias de ensino e avaliação com os objetivos de aprendizagem da UC / Evidence that the teaching and assessment methodologies are appropriate for the learning outcomes


A coerência entre as metodologias de ensino e os objetivos de aprendizagem (OAs) é assegurada pela integração equilibrada de teoria e prática, pelo recurso a um conjunto diversificado de atividades pedagógicas e pela promoção da autonomia do estudante. Os OAs relacionados com a compreensão teórica da arquitetura CUDA, dos princípios da computação paralela e das estratégias de otimização (OA1, OA2) são suportados pelas aulas teóricas expositivas e pelos materiais multimédia que ilustram conceitos abstratos com exemplos práticos. Estas aulas fornecem a base conceptual necessária para a análise e resolução de problemas, formando o alicerce para a aplicação prática posterior. As aulas laboratoriais e os exercícios práticos reforçam os OAs que exigem aplicação dos conceitos em cenários reais (OA3, OA4, OA5, OA6). Ao desenvolver kernels CUDA personalizados com Numba, o estudante pratica a programação GPU e exercita a resolução de problemas de desempenho. A análise de estrangulamentos e otimização de parâmetros reforça a autonomia e a capacidade de tomada de decisão, assegurando a coerência metodológica. A integração do cuDNN (OA5) é garantida através de atividades práticas e de estudo de casos reais, em que o estudante experimenta a aceleração de operações de aprendizagem profunda. Esta abordagem garante uma conexão estreita entre a teoria (conhecer a biblioteca e as suas funcionalidades) e a prática (aplicar as rotinas otimizadas na resolução de problemas complexos). O projeto final (OA6) ilustra claramente a coerência entre metodologias e objetivos: ao propor um desafio aberto, que combina computação gráfica, programação paralela e aprendizagem profunda, o projeto requer a aplicação integrada de todos os conhecimentos adquiridos. Esta atividade desenvolve competências transversais, tais como trabalho em equipa, gestão de tempo, comunicação, análise crítica e criatividade na resolução de problemas complexos, refletindo a natureza multidimensional do objetivo de aprendizagem. O feedback contínuo do docente, as discussões síncronas, a análise de casos práticos e o acesso a materiais de referência permitem ao estudante refletir sobre o seu percurso de aprendizagem, identificar áreas de melhoria e consolidar competências. Desta forma, as metodologias adotadas – incluindo ensino teórico, laboratórios, projetos, avaliação contínua e recursos digitais – estão intimamente alinhadas com os objetivos de aprendizagem, assegurando um percurso formativo coerente, integrado e orientado para a aquisição de competências relevantes no domínio da computação gráfica de alto desempenho.

Observações / Observations


.

Bibliografia Principal / Main Bibliography


"1. Tuomanen, B. (2018). Hands-On GPU Programming with Python and CUDA: Explore high-performance parallel computing with CUDA. Packt Publishing. 2. 1. Kirk, D. B., & Hwu, W.-M. W. (2016). Programming Massively Parallel Processors: A Hands-on Approach 3. Storti, D., & Yurtoglu, M. (2016). CUDA for engineers: An introduction to high-performance parallel computing (1st ed.). Addison-Wesley Professional.

Bibliografia Secundária / Secondary Bibliography


4. Wilt, N. (2013). The CUDA Handbook: A comprehensive guide to GPU programming (1st ed.). Pearson Education. 5. Cook, S. (2013). CUDA Programming: A Developer’s Guide to Parallel Computing with GPUs. Morgan Kaufmann. 6. Sanders, J., & Kandrot, E. (2011). CUDA by Example: An Introduction to General-Purpose GPU Programming. Addison-Wesley."

Data da última atualização / Last Update Date


2025-05-23