Ferramentas do usuário

Ferramentas do site


faq:cuda

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Próxima revisão
Revisão anterior
Próxima revisão Ambos lados da revisão seguinte
faq:cuda [2019/03/22 09:57]
127.0.0.1 edição externa
faq:cuda [2020/05/02 07:39]
josealvim
Linha 2: Linha 2:
  
 ===== Qual Máquina tem o CUDA disponível? ===== ===== Qual Máquina tem o CUDA disponível? =====
- +A única máquina que tem placas de vídeo Nvidia com capacidade CUDA é a ''neozil'' 
-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.+Ela está equipada com duas Nvidia Tesla K20c SM35.
    
- 
 ===== Qual a versão do CUDA Toolkit disponível? ===== ===== Qual a versão do CUDA Toolkit disponível? =====
- +A versão atual é o CUDA Toolkit 9.1.
-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? ===== ===== Como faço para usar o CUDA? =====
  
-==== 0. Conectar ==== +==== Caso o nvcc não funcione ==== 
-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 [[FAQ:acesso|aqui]] como acessá-la externamente), através do comando:+Para poder usar ''nvcc'' e outros comandos do CUDA toolkité necessário  
 +adicionar a pasta /usr/local/cuda/bin para a sua variável de ambiente PATH.
  
-<code bash> ssh dota</code>+<code bash>  
 +PATH=$PATH:/usr/local/cuda/bin" 
 +echo "export PATH=$PATH:/usr/local/cuda/bin" >> ~/.bashrc  
 +</code>
  
-Uma vez logado na dotapodemos iniciar a preparação. Não se preocupeesse passo só é necessário na primeira vez+==== Exemplos ==== 
 +A Nvidia provê vários exemplos pequenosmas muito abrangentesde código  
 +CUDA. Eles estão localizados na pasta ''/nvidia/NVIDIA_CUDA-X.X_Samples'',  
 +Para poder compilar, modificar ou executar esses códigos, você deve  
 +copiá-los para alguma pasta de sua preferência dentro de sua //home//:
  
-==== 1Preparação caso o nvcc não funcione ====+<code bash>  
 +cp -r /nvidia/NVIDIA_CUDA-9.1_Samples ~/cuda_samples 
 +</code> 
  
-Para poder usar o nvcc outros comandos do CUDA toolkité necessário adicionar a pasta /usr/local/cuda/bin para a sua variável de ambiente PATH+==== Compilando Rodando ==== 
-O comando abaixo deve funcionar se seu shell for o bash(padrão na rede linux):+O compilador do CUDA aceita códigos C e C++além do próprio CUDAPara  
 +compilar um arquivo de código, basta chamar **nvcc** como se fosse  
 +qualquer outro compilador de C.
  
-<code bash> echo "export PATH=\$PATH:/usr/local/cuda/bin" >> ~/.bashrc </code>+<code bash>  
 +nvcc codigo.cu  
 +</code>
  
-==== 2Exemplos ====+Para rodar o executável gerado também é como qualquer outro
  
-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.é a versão mais recente do CUDA ToolkitPara poder compilar, modificar ou executar esses códigos, você deve copiá-los para alguma pasta de sua preferência dentro de sua //home//:+<note important> 
 +Não crie seu próprio ''nvidia-cuda-mps-server''O  
 +''nvidia-cuda-mps-server'' é um processo gerenciador  
 +das gpus que é executado pela raíz e não atrapalha  
 +execução do seu processo 
 +</note>
  
-<code bashcp -r /nvidia/NVIDIA_CUDA-9.1_Samples ~/cuda_samples</code+<note important> 
 +Como o servidor possui duas GPUS, é necessário informar em  
 +qual delas seu ''kernel'' irá rodar. 
 +</note
  
-==== 3. Compilando e Rodando ====+Para isso basta, antes de chama-lo, colocar a linha:
  
-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.+<code c>  
 +cudaSetDevice(id);  
 +</code>
  
-<code bash> nvcc codigo.cu </code> +==== Comando Úteis ====
- +
-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: +
- +
-<code c> cudaSetDevice(id); </code> +
- +
-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^ ^ Comando         ^ Descrição^
Linha 57: Linha 65:
 | ''nvidia-smi''  | Display de informações gerais 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). +O comando ''nvidia-smi'' é na verdade uma variedade de comandos  
- +juntos num comando só (vide ''nvidia-smi -h'') . Com ele é possível  
-=== Infos === +obter informações como id, uso e memória livre das GPUs e quais  
- +processos estão rodando nelas (grealmente os processos serão  
-O ''nvidia-cuda-mps-server'' é um processo gerenciador das gpus, ele é rodado pelo root e não atrapalha a execução do seu processo.  +gerenciados pelo ''mps-server'' e não aparecerão individualmente),  
- +o que facilita na hora de escolher uma GPU mais livre para rodar o  
-==== 5. Uso ==== +seu programa.
- +
-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__+
  
 +==== Uso ====
 +Eu vou pessoalmente bater em quem usar isso pra minerar bitcoin.
 + --- //[[jose.alvim@usp.br|Jose Goudet Alvim]] 2020/05/02 07:39//