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

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
Próxima revisão Ambos lados da revisão seguinte
faq:cuda [2019/05/28 09:12]
orem [5. Uso]
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.
- +
-A finalidade do servidor de GPUs da Rede Linux é o uso para fins acadêmicos como EPs, projetos, testes, experimentos, entre outros. **O uso das GPUs para fins não acadêmicos é expressamente proibido**.+
  
-Em particular, o uso de qualquer computador da Rede Linux para **mineração de criptomoedas é proibido**Essa atividade causa prejuízo acadêmico, pois inutiliza aquele recurso para os outros estudantes, e causa prejuízo financeiro, pois é uma atividade de alto custo de energiaA violação dessa regra pode resultar em banimento permanente da Rede Linux. Como isso pode configurar uso indevido de patrimônio público, medidas em outras esferas também podem ser aplicadas.+==== Uso ==== 
 +Eu vou pessoalmente bater em quem usar isso pra minerar bitcoin. 
 + --- //[[jose.alvim@usp.br|Jose Goudet Alvim]] 2020/05/02 07:39//