Propostas de Estágio 2011/2012

DEI - FCTUC
Gerado a 2024-04-29 11:55:04 (Europe/Lisbon).
Voltar

Titulo Estágio

Biblioteca para Gestão da Latência e Débito em GPUs.

Área Tecnológica

Engenharia de Software

Local do Estágio

DEI

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 arquiteturais, 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. Uma outra linguagem que procura normalizar a utilização de dispositivos heterogéneos é o OpenCL, criado pela Apple e normalizado pelo grupo Khronos. Tanto o CUDA como o OpenCL permitem a utilização de GPUs para computação genérica (GPGPU – General-Purpose Computation Using Graphics Hardware). Em resultado destas inovações, as GPUs podem causar um enorme impacto em todas as áreas onde a capacidade de cálculo é fundamental e justificam um forte investimento de tempo e mão de obra em paralelização de código.

Quando falamos em desempenho computacional poderemos estar a referir-nos a dois aspetos. Por um lado, é importante minimizar o tempo de execução de uma dada tarefa – a latência. Noutros contextos o mais importantes é conseguir maximizar o número de tarefas que um computador é capaz de realizar por unidade de tempo, ou seja throughput (que poderemos traduzir por “débito”).

O grande desafio que queremos resolver neste estágio é o de tornar o poder de cálculo das GPUs acessível a programas vulgares, de pequena ou média dimensão. Consoante o contexto poderemos querer melhorar uma ou outra das duas métricas anteriores: a latência ou o débito. A latência é mais importante quando o utilizador tem um número reduzido de tarefas e está apenas interessado numa resposta rápida, enquanto que o débito será mais relevante quando a lista de cálculos é muito longa e a escala do tempo mais dilatada.

Para minimizarmos a latência, esta biblioteca tem de permitir a execução de tarefas para as quais o programador obtém uma resposta num intervalo de tempo muito curto, mesmo que isso prejudique o desempenho de longo prazo. No extremo oposto do espectro, para maximizarmos o débito, a ideia será carregarmos ao máximo uma GPU, libertando a CPU para outros serviços, mesmo que as tarefas individuais demorem mais tempo, pela espera que sofrem à entrada para a GPU.

Objetivo

A originalidade e objetivos deste trabalho residem precisamente em permitir que o programador selecione para as suas tarefa o ponto de equilíbrio entre o desempenho global (débito) e o desempenho particular desta ou daquela tarefa (latência). Para isto, o desafio passa por conseguirmos submeter permanentemente tarefas para uma fila à entrada da GPU, de forma a que esta esteja sempre ocupada, permitindo por outro lado a ultrapassagem por tarefas prioritárias. Com vista a alcançar este objectivo, o aluno deverá desenvolver uma biblioteca de suporte à externalização de tarefas da CPU.

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/vetores, 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-10).
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 11)

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 📩