Ficha Unidade Curricular (FUC)
Informação Geral / General Information
Carga Horária / Course Load
Área científica / Scientific area
480 - Informática
Departamento / Department
Departamento de Tecnologias Digitais
Ano letivo / Execution Year
2026/2027
Pré-requisitos / Pre-Requisites
Recomenda-se experiência de programação em Python.
Objetivos Gerais / Objectives
O principal objetivo desta unidade curricular (UC) é dotar os estudantes de conhecimentos e competências avançadas em computação de alto desempenho, com enfoque na utilização de arquiteturas GPU para acelerar aplicações de computação científica, processamento de dados e aprendizagem profunda. Pretende-se que os estudantes compreendam os princípios da computação paralela, a arquitetura das GPUs modernas e as principais estratégias de otimização de desempenho, utilizando ferramentas amplamente adotadas no ecossistema Python, como CuPy, Numba, RAPIDS, Dask e PyTorch. A UC aborda o desenvolvimento de aplicações paralelas, a programação de kernels em GPU, a análise e otimização de desempenho e a integração com frameworks de aprendizagem profunda. No final, os estudantes deverão ser capazes de desenvolver soluções escaláveis e eficientes para problemas computacionalmente intensivos, recorrendo às melhores práticas de programação paralela e aceleração por GPU.
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 os princípios fundamentais da computação paralela e o funcionamento das arquiteturas GPU modernas. OA2: Selecionar e aplicar ferramentas de computação acelerada, como CuPy, Numba e CUDA, para resolver problemas computacionalmente intensivos. OA3: Desenvolver e otimizar aplicações paralelas em GPU, implementando kernels e gerindo eficientemente os recursos computacionais. OA4: Avaliar o desempenho de aplicações paralelas, recorrendo a técnicas de profiling, identificação de estrangulamentos e otimização da utilização de memória e processamento. OA5: Integrar tecnologias de computação acelerada em frameworks modernas de aprendizagem profunda, utilizando ferramentas como RAPIDS, Dask e PyTorch. OA6: Desenvolver soluções completas de computação de alto desempenho aplicadas à aprendizagem profunda e à visão por computador, demonstrando capacidade de análise crítica e otimização de desempenho.
Conteúdos Programáticos / Syllabus
CP1: Fundamentos da computação paralela e arquiteturas GPU. Conceitos de paralelização, concorrência, escalabilidade, organização de threads, blocos, grids e hierarquia de memória. CP2: Programação paralela em GPU utilizando CuPy, Numba e CUDA. Desenvolvimento de kernels, gestão de memória, compilação e otimização de operações paralelas. CP3: Análise e otimização de desempenho em GPU. Profiling, identificação de estrangulamentos computacionais, otimização do acesso à memória e configuração eficiente de kernels. CP4: Frameworks para computação acelerada e distribuída. Utilização de RAPIDS, Dask e integração com PyTorch para treino de modelos de aprendizagem profunda. CP5: Técnicas avançadas de aceleração para aprendizagem profunda. Mixed Precision, Gradient Accumulation, Activation Checkpointing e otimização do treino em GPU. CP6: Casos de estudo e desenvolvimento de aplicações de computação de alto desempenho aplicadas à aprendizagem profunda e visão por computador.
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 fornece os fundamentos da computação paralela e das arquiteturas GPU, suportando o OA1, ao permitir compreender os princípios da paralelização e da execução em GPU. O CP2 desenvolve competências de programação paralela utilizando CuPy, Numba e CUDA, contribuindo para o OA2 e OA3 através da implementação de aplicações aceleradas por GPU. O CP3 está diretamente associado ao OA4, introduzindo metodologias de profiling, análise de desempenho e otimização de aplicações paralelas. O CP4 suporta o OA5, ao explorar frameworks modernas para computação distribuída e integração com PyTorch no treino de modelos de aprendizagem profunda. Finalmente, o CP5 e o CP6 consolidam os conhecimentos adquiridos através da utilização de técnicas avançadas de aceleração e da implementação de casos de estudo reais, permitindo atingir o OA6 mediante o desenvolvimento de soluções completas de computação de alto desempenho aplicadas à inteligência artificial.
Avaliação / Assessment
Esta UC, por ter uma natureza bastante prática e de aplicação, segue o modelo de Avaliação ao Longo do Semestre (ALS, prevista em RGACC) por projeto, não contemplando exame final. A avaliação desta UC possui os seguintes elementos de avaliação: - Projeto (100%): O projeto consiste no desenvolvimento de um trabalho prático que agrega os conhecimentos e competências adquiridos ao longo do semestre. A avaliação do Projeto (100%) 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 (30%): Nesta segunda fase, o foco centra-se no progresso técnico do projeto. -- Tutoria Final (50%): 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. Contempla também uma discussão oral individual como item de ponderação. O conjunto das três tutorias (1.ª, 2.ª e Final) totalizam 100% da avaliação, e cada tutoria possui uma nota mínima de 8,5 valores. Em qualquer elemento de avaliação, o docente ou coordenador da UC poderá solicitar, em qualquer momento durante o semestre, uma discussão oral individual destinada à confirmação da autoria dos trabalhos apresentados e/ou à aferição dos conhecimentos e competências demonstrados pelo estudante. A utilização de ferramentas de inteligência artificial generativa é permitida apenas como instrumento de apoio ao processo de aprendizagem, não podendo, em momento algum, substituir a autoria intelectual e a responsabilidade individual do estudante sobre qualquer elemento de avaliação entregue. O estudante é integralmente responsável pelo conteúdo submetido, devendo ser capaz de o justificar, explicar e defender perante o docente e/ou coordenador. Para esclarecimento adicional, é indispensável a leitura de outros documentos de referência para o processo de avaliação, tais como o Guia para uma Utilização Responsável da Inteligência Artificial em Trabalhos Académicos (Conselho Científico, 21/04/2026), o Código de Conduta Académica (CCA) e o Regulamento Disciplinar de Discentes (RDD). Para obter aprovação na UC, o estudante deverá alcançar uma nota final mínima de 10 valores, resultante da soma ponderada de todas as tutorias. Um estudante é considerado como reprovado caso não atinja aprovação na ALS. 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.
Metodologias de Ensino / Teaching methodologies
A metodologia de ensino-aprendizagem desta unidade curricular assenta num modelo ativo, centrado no estudante e alinhado com os princípios do Ensino a Distância (EaD), combinando momentos síncronos e assíncronos de forma a promover a autonomia, a experimentação prática e a aprendizagem colaborativa. Os conteúdos teóricos são disponibilizados através de vídeos, documentação técnica, notebooks interativos e leituras orientadas, permitindo ao estudante adquirir os fundamentos da computação paralela, das arquiteturas GPU e das principais ferramentas de aceleração computacional ao seu próprio ritmo. Estes recursos são complementados por exemplos práticos e demonstrações que ilustram a aplicação dos conceitos em cenários reais de computação científica e aprendizagem profunda. As sessões síncronas privilegiam a discussão de conceitos avançados, a resolução de dúvidas e a análise conjunta de problemas computacionais complexos. O docente assume um papel de facilitador, promovendo a participação ativa dos estudantes, o debate técnico e a reflexão crítica sobre diferentes estratégias de paralelização e otimização. A aprendizagem baseada em tarefas constitui um elemento central da UC. Ao longo do semestre, os estudantes desenvolvem exercícios de dificuldade progressiva envolvendo programação paralela com CuPy, Numba e CUDA, otimização de kernels, análise de desempenho e utilização de ferramentas de profiling. Estas atividades permitem consolidar os conhecimentos adquiridos e desenvolver competências práticas na implementação de aplicações aceleradas por GPU. A aprendizagem baseada em projetos (Project-Based Learning) materializa-se no desenvolvimento de um projeto final, individual ou em grupo, no qual os estudantes implementam uma solução de computação de alto desempenho aplicada à aprendizagem profunda ou à visão por computador. O projeto integra diferentes tecnologias abordadas na UC, incluindo frameworks como RAPIDS, Dask e PyTorch, incentivando a experimentação, a integração de conhecimentos e a resolução de problemas reais. O acompanhamento contínuo do docente, o feedback formativo, os fóruns de discussão e os momentos de partilha entre estudantes promovem uma aprendizagem colaborativa, favorecendo o desenvolvimento de competências técnicas, analíticas e de comunicação. Esta combinação de atividades teóricas, laboratoriais e de projeto assegura uma formação alinhada com as práticas atuais da computação de alto desempenho aplicada à Inteligência Artificial.
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
As metodologias de ensino adotadas encontram-se diretamente alinhadas com os objetivos de aprendizagem da UC, garantindo uma progressão equilibrada entre aquisição de conhecimentos teóricos e desenvolvimento de competências práticas. Os conteúdos teóricos, disponibilizados através de materiais multimédia, vídeos e documentação técnica, suportam o OA1, permitindo compreender os fundamentos da computação paralela, das arquiteturas GPU e dos princípios de aceleração computacional. As sessões síncronas complementam estes recursos através da discussão orientada de conceitos, esclarecimento de dúvidas e análise crítica de soluções alternativas. As atividades práticas e laboratoriais promovem o desenvolvimento dos OA2, OA3 e OA4, desafiando os estudantes a implementar aplicações paralelas utilizando CuPy, Numba e CUDA, bem como a recorrer a ferramentas de profiling para identificar estrangulamentos computacionais e otimizar o desempenho das aplicações. A experimentação contínua permite consolidar competências de programação paralela e tomada de decisão técnica. O OA5 é desenvolvido através da integração de frameworks modernas, como RAPIDS, Dask e PyTorch, permitindo aos estudantes compreender a utilização da computação acelerada em pipelines de aprendizagem profunda e processamento de grandes volumes de dados. Finalmente, o Projeto Final constitui o principal elemento integrador do OA6, exigindo que os estudantes concebam, implementem e avaliem uma solução completa de computação de alto desempenho aplicada à inteligência artificial. Esta atividade promove a autonomia, o pensamento crítico, a capacidade de integração de diferentes tecnologias e a resolução de problemas complexos. A combinação entre aprendizagem autónoma, experimentação prática, trabalho colaborativo, feedback contínuo e desenvolvimento de projetos assegura uma forte coerência entre as metodologias de ensino e os objetivos de aprendizagem, preparando os estudantes para utilizar tecnologias modernas de computação acelerada em contextos profissionais e de investigação.
Observações / Observations
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), o Código de Conduta Académica (CCA) e o Regulamento Disciplinar de Discentes (RDD).
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. 4. Wilt, N. (2013). The CUDA Handbook: A comprehensive guide to GPU programming (1st ed.). Pearson Education.
Bibliografia Secundária / Secondary Bibliography
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
2026-07-31