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 📩