Ferramentas do usuário


CUDA

Qual Máquina tem o CUDA disponível?

A única máquina que tem placas de vídeo Nvidia com capacidade CUDA é a dota. Ela está equipada com duas Nvidia Tesla K20c SM35.

Qual a versão do CUDA Toolkit disponível?

A versão atual é o CUDA Toolkit 9.1 e planejamos mantê-lo atualizado sempre que possível.

Como faço para usar o CUDA?

0. Conectar

Para poder usar qualquer parte do CUDA (compilar e executar comandos) é necessário que você faça ssh para o servidor dota, de dentro da rede linux (Se ainda não está dentro da rede veja aqui como acessá-la externamente), através do comando:

 ssh dota

Uma vez logado na dota, podemos iniciar a preparação. Não se preocupe, esse passo só é necessário na primeira vez.

1. Preparação caso o nvcc não funcione

Para poder usar o nvcc e outros comandos do CUDA toolkit, é necessário adicionar a pasta /usr/local/cuda/bin para a sua variável de ambiente PATH. O comando abaixo deve funcionar se o seu shell for o bash(padrão na rede linux):

 echo "export PATH=\$PATH:/usr/local/cuda/bin" >> ~/.bashrc 

2. Exemplos

A Nvidia provê vários exemplos pequenos, mas muito abrangentes, de código CUDA. Eles estão localizados na pasta /nvidia/NVIDIA_CUDA-X.X_Samples, onde o X.X é a versão mais recente do CUDA Toolkit. Para poder compilar, modificar ou executar esses códigos, você deve copiá-los para alguma pasta de sua preferência dentro de sua home:

 cp -r /nvidia/NVIDIA_CUDA-9.1_Samples ~/cuda_samples

3. Compilando e Rodando

O compilador do CUDA aceita códigos C e C++, além do próprio CUDA. Para compilar um arquivo de código, basta chamar o nvcc como se fosse qualquer outro compilador de C.

 nvcc codigo.cu 

Para rodar o executável gerado também é como qualquer outro. IMPORTANTE Não crie seu próprio nvidia-cuda-mps-server, já há um processo desses para gerenciar todos os executáveis rodados pelos usuários.

-------IMPORTANTE!-------

Como o servidor possui duas GPUS, é necessário informar em qual delas seu kernel irá rodar. Para isso basta antes de chamar o kernel colocar a linha:

 cudaSetDevice(id); 

Onde id é 0 ou 1 dependendo de qual GPU é para ser utilizada. É possível também executar, usando esse método, programas que rodam em várias GPUs, porém eles requerem maior otimização para compensar o overhead da comunicação inter-GPUs. Lembrando que mais de um programa pode rodar em cada GPU, mesmo sendo de outro usuário.

4. Comando Úteis

Comando Descrição
nvcc Compilador de código CUDA
cudatop Exibe informações de proessos dos usuários e uso das GPUS
nvidia-smi Display de informações gerais das gpus

O comando nvidia-smi é na verdade uma variedade de comandos juntos num comando só (vide nvidia-smi -h) . Com ele é possível obter informações como id, uso e memória livre das GPUs e quais processos estão rodando nelas (grealmente os processos serão gerenciados pelo mps-server e não aparecerão individualmente), o que facilita na hora de escolher uma GPU mais livre para rodar o seu programa(livre em termos de memória).

Infos

O nvidia-cuda-mps-server é um processo gerenciador das gpus, ele é rodado pelo root e não atrapalha a execução do seu processo.

5. Uso

O fim do servidor de GPUs da Rede Linux é o uso por parte dos alunos para fins acadêmicos como EPs, projetos, testes, experimentos, etc.. Assim, o uso das GPUs para fins não acadêmicos, como MINERAÇÃO de criptomoedas, são EXPRESSAMENTE PROIBIDOS