Propostas atribuídas ano letico 2025/2026

DEI - FCTUC
Gerado a 2025-12-09 07:34:03 (Europe/Lisbon).
Voltar

Titulo Estágio

Suporte para aplicações de alto desempenho utilizando GPUs

Área Tecnológica

Computação de Alto Desempenho

Local do Estágio

DEI/CISUC - Grupo de Software and Systems Engineering.

Enquadramento

Nos últimos anos, a capacidade de cálculo das unidades de processamento de 

gráficos (Graphics Processing Units - GPUs) tem vindo a crescer de forma 

substancial, ao ponto de haver no mercado GPUs que, para determinados fins, 

são substancialmente mais rápidas do que CPUs topo de gama. Esta diferença 

em capacidade, que tem vindo a acentuar-se, resulta do paradigma Single 

Instruction Multiple Threads (SIMT), utilizado nas GPUs. No entanto, em 

resultado destas diferenças arquitecturais, a programação duma GPU tende a 

ser mais complexa do que a programação duma CPU. Com vista a reduzir esta 

complexidade, o fabricante Nvidia criou uma tecnologia de nome CUDA 

(Compute Unified Device Architecture), que permite programar as suas GPUs, 

utilizando como base a linguagem C. O CUDA vai assim no sentido de permitir a 

utilização de GPUs para computação genérica (GPGPU – General-Purpose 

Computation Using Graphics Hardware). Em resultado destas inovações, as 

GPUs prometem vir a causar um enorme impacto em todas as áreas onde a 

capacidade de cálculo é fundamental e justifica um forte investimento de tempo 

e mão de obra em paralelização de código. Em geral, neste tipo de problemas, o 

objectivo do programador é o de minimizar o tempo que medeia desde que 

submete o programa para execução, até que obtém o resultado. 

 


O grande desafio que queremos resolver neste estágio é o de tornar o poder de 

cálculo das GPUs acessível a muitos programas vulgares, de pequena ou média 

dimensão, que correm sequencialmente. Consideremos o caso de um cluster de 

máquinas que estão disponíveis para um escalonador de tarefas como o 

Condor. O parâmetro mais importante será o do throughput, ou seja, quantas 

tarefas é que se conseguem executar no longo prazo. O tempo que cada uma 

das tarefas demora, quando analisado individualmente, não tem a mesma 

importância (desde que mantido dentro de certos limites). Por razões 

económicas, e para um tempo de resposta aproximadamente constante, o que 

queremos é maximizar o número de tarefas executadas. 


Objetivo

Para carregar ao máximo uma GPU enquanto se alivia, por outro lado, a CPU, o 

desafio é conseguir alcançar um débito permanente de submissão e execução 

de tarefas do lado da GPU, de acordo com um percurso tarefa na CPU-> tarefa 

na GPU->resultado na GPU -> resultado na CPU, numa lógica que se 

assemelha à do pipelining. Com vista a alcançar este objectivo, o aluno deverá 

desenvolver uma biblioteca e outro software de suporte à externalização de 

tarefas, da forma mais simples possível para o programador. Tipicamente estas 

tarefas deverão envolver execução de ciclos e operações vectoriais. A título de 

exemplo, poderemos mencionar ordenação de listas, cálculo de FFTs, geração 

de números aleatórios, operações com matrizes/vectores, reduções 

(max/min/sum/etc) ou reconhecimento de padrões (Boyer-Moore / kmp). Em 

particular, o Estagiário poderá tirar partido de muitas funções já existentes no 

CUDA, como o CUBLAS ou CUFFT, que resolvem já alguns dos problemas 

anteriormente citados. 


Plano de Trabalhos - Semestre 1

Estado da arte (meses 1-2) 

Nesta fase o estagiário deverá tomar contacto com a tecnologia e deverá 

produzir um documento que resuma o estado da arte. 

 

Análise de requisitos e Especificação Funcional (meses 3-4) 

 

Escrita da proposta de tese (meses 4-5). 


Plano de Trabalhos - Semestre 2

Realização da Biblioteca (meses 6-9). 

Nesta tarefa, o Estagiário deverá implementar o código necessário ao suporte do 

percurso tarefa na CPU-> tarefa na GPU->resultado na GPU -> resultado na 

CPU, de uma forma que seja eficiente. 

 

Escrita da tese (mês 10) 


Condições

O trabalho será realizado no Departamento de Engenharia Informática, no Grupo 

de Software and Systems Engineering, do Centro de Informática e Sistemas da 

Universidade de Coimbra. O Estágio não é remunerado. 

Observações

Será dada preferência a alunos com bons resultados em disciplinas relacionadas 

com este trabalho (nomeadamente, Sistemas Distribuídos, Sistemas Operativos, 

Computação de Alto Desempenho ou Integração de Sistemas).

Orientador

Filipe Araújo
filipius@dei.uc.pt 📩