Ir ao conteúdo
  • Cadastre-se

Tutorial - Instalação do GPU3 no Linux (Gentoo) - Folding@Home GPU nVidia


Zeca Pagodinho

Posts recomendados

Introdução:

O Folding@Home, um dos maiores projetos de computação distribuída do mundo, possui clientes desenvolvidos para Windows, Linux e Macintosh.

A maior abrangência do suporte ocorre na plataforma Windows, onde há disponibilidade de clientes para CPU's Single Core e Multi Core, clientes para GPU's nVidia e ATI/AMD de várias famílias, e clientela desenvolvida para várias versões do Windows, inclusive DOS.

No Linux e Macintosh o cenário é semelhante (creio). O cliente SMP está no mesmo patamar do cliente para Windows, apesar das dificuldades encontradas na hora de instalá-lo, dependendo da distribuição... questão de suporte de outros grupos não relacionados diretamente a Stanford. O problema está no cliente para GPU's: não há suporte. Simplesmente não existe um cliente desenvolvido por Stanford com código nativo para Linux e/ou Macintosh. O cliente V7 aponta a possibilidade de suporte futuro, mas ainda não passa de especulação.

Usuários de Linux, pelo menos grande parte deles, não costumam se deixar levar pelas dificuldades, acabam encontrando formas de driblá-las e provendo o seu próprio suporte. Esse foi o caso dos clientes GPU2 e GPU3, cujos binários são compilados originalmente para Windows. Utilizando-se de um wrapper, software que faz o meio de campo entre as bibliotecas Linux e Windows, permitindo a comunicação entre o FahCore_11 ou FahCore_15 com o GPU2/GPU3, desenvolveu-se uma técnica capaz de rodar o folding na placa de vídeo sem que para isso fosse necessário iniciar obrigatoriamente o Windows.

O objetivo desse tutorial é descrever como essa técnica é implementada em sistemas Linux, com ênfase no sistema Gentoo, metadistribuição bastante utilizada em servidores e nos últimos anos popularizada entre Desktops devido à grande flexibilidade na hora de customizar e otimizar código binário para cada tipo de sistema.

Descrição de sucesso:

O tutorial é baseado na documentação descrita na Bibliografia e foi testada, com alguns ajustes, em dois sistemas Linux 64bits:

1) MoBo M4N78-SE, chipset GeForce 720D sem suporte ao NVCC;

- Processador Phenom II X2 555BE (3,2GHz);

- Memórias DDR2 800MHz, 2 x 2GB, Dual Channel;

- Placa de vídeo nVidia GeForce 9500GT XFX, 512MB de memória DDR3, shaders a 1620MHz, memória 1000MHz e clock de 650MHz

- Fonte 3R System 500W, sem PFC ativo, certificação 80+ padrão.

- Driver nVidia versão 260.19.36

2) MoBo P8Z68-V, chipset Z68 Intel;

- Processador Core i7 2600K (@4,6GHz);

- Memórias DDR3 1600MHz Corsair Vengeance, 2 x 4GB, Dual Channel;

- Placa de vídeo nVidia GeForce GTX 560Ti 448 Cores FTW EVGA, 1,2GB de memória GDDR5, shaders 1594MHz, memória 975MHz e clock de 797MHz

- Fonte OCZ ModStream 600W, PFC ativo, certificação 80+ Bronze.

- Driver nVidia versão 285.05.09-r1

Em ambos os sistemas a versão do driver CUDA utilizada foi a 3.0, de 32 bits.

Requisitos de sistema:

São necessários os seguintes programas instalados, de preferência utilizando-se do gerenciador de pacotes da distribuição em uso:

1) WINE - Wine Is Not Emulator, trata-se de um Wrapper para binários compilados para Windows. Se você não sabe do que se trata e não sabe configurá-lo, pare por aqui, vá à cozinha, prepare uma cafezinho e retorne para consultar o grande oráculo Google...

OBS.: a melhor experiência com o Wine se dará, na maioria das vezes, no sistema Gentoo, pois ele é desenvolvido por membros da equipe de suporte do Gentoo.

2) nVidia Driver - o driver pré-compilado para Linux que provê suporte às placas de vídeo da nVidia.

Mão na massa!

Como o sistema Gentoo é preparado para compilar código-fonte otimizando-o de acordo com as características do hardware e as opções do administrador, não são necessárias configurações para receber os arquivos de repositórios não-oficiais, como indica o passo 5 do tutorial descrito em 1, na bibliografia. É importante, mas não é essencial, que o sistema esteja atualizado.

O WINE deve ser instalado, caso ainda não o tenha em uso. Há utilitários disponíveis em cada distribuição para prover a configuração mais adequada do WINE, inclusive complementando programas requeridos pelo Windows automaticamente. No meu caso, usei o QTWine e o script WineTricks para instalar arquivos básicos do Windows. Quanto mais completa a sua instalação do WINE, mais chances de rodar um programa nativo do Windows via WINE.

Não entrarei em detalhes de como configurei o WINE nem como o QTWine funciona, fica apenas o registro. Procure seguir os passos presentes em qualquer tutorial desse software.

Instalar o driver da placa de vídeo

O driver da placa de vídeo deve ser condizente com a plataforma do sistema, ou seja, versão de 64 bits. Além disso, deve dar suporte ao CUDA 3.0, o que ocorre nos drivers da versão 256.35 ou superior.

No terminal, como root:

emerge nvidia-drivers

Instalar o CUDA Toolkit

O CUDA Toolkit DEVE ser da versão 3.0 e em 32 bits. Trata-se de uma questão de compatibilidade entre o WINE e o CUDA Wrapper.

Na primeira tentativa de configurar o GPU3 optei por instalar automaticamente o CUDA Toolkit usando o Portage (gerenciador de aplicativos do Gentoo). Além dos arquivos não serem instalados no mesmo diretório padrão da instalação, como descrito nos dois tutoriais, o Portage baixou e instalou a versão de 64 bits.

Procurei contornar a situação apontando o caminho correto do CUDA no arquivo /etc/ld.so.conf.d/cuda.conf, mas mesmo assim o processo empacava no passo 13 do tutorial descrito em 1, na bibliografia, quando fazemos a verificação do que foi configurado até o momento. Até este ponto eu usava apenas a fonte 1 e o cristianogro postou o link para a fonte 2. Com o Wiki percebi que o problema era com o CUDA Toolkit em 64 bits.

Verifiquei dentre os arquivos baixados qual era o nome do pacote que o Portage tinha usado:

ls /var/www/localhost/htdocs/distfiles/*cuda*

cudatoolkit_3.0_linux_64_rhel5.3.run

Era portanto a versão de 64 bits do CUDA Toolkit 3.0, a mesma usada pelo Red Hat 5.3. Fui então a um espelho do Gentoo e busquei pelo arquivo de 32 bits e o baixei manualmente:
Por fim o instalei manualmente, também (como root):
chmod +x cudatoolkit_3.0_linux_32_rhel5.3.run

sh cudatoolkit_3.0_linux_32_rhel5.3.run

Basta seguir os padrões de instalação e pronto.

OBS.: /var/www/localhost/htdocs/, para os mais familiarizados com o Linux, significa o diretório padrão em que o Apache localiza os arquivos que compartilha com clientes. Eu criei uma pasta neste diretório chamada distfiles e apontei as configurações do sistema para que todos os arquivos baixados para instalação no micro fossem colocados lá para que, usando um caminho web, todos os computadores daqui de casa pudessem localizar arquivos já baixados nos micros da rede interna antes de solicitarem externamente aos servidores Gentoo. Isso economiza tempo na hora de instalar alguma coisa nova que já tenha sido instalada em um outro micro, portanto não é necessário que você crie essa pasta... você pode usar a que bem entender.

O próximo passo consiste em copiar as DLL's do CUDA Wrapper para o diretório system32 da instalação do Windows fake que o Wine cria no diretório do usuário (agora com usuário padrão, sem o root).

Os dois arquivos serão responsáveis pelo trabalho de leitura das instruções da WU e repassá-las à placa de vídeo e depois receber os resultados do processamento. É necessário utilizar estes arquivos devido a natureza do FahCore e dos demais arquivos do CUDA disponíveis: um é programa nativo do Windows e os arquivos CUDA são para Linux. Além disso tem a questão do software de 32 e 64 bits já abordada.

Sabendo desses detalhes fica mais compreensível o próximo passo: criar links simbólicos apontando para os CUDA Wrappers (usuário padrão).

ln -s cudart.dll.so cudart32_30_14.dll

ln -s cudart.dll.so cudart.dll

ln -s cudart.dll.so nvcuda.dll

O sistema enxergará os arquivos cudart.dll, nvcuda.dll, cudart32_30_14.dll e o próprio cudart.dll.so, mas na realidade todas as chamadas para quaisquer um deles serão encaminhadas para cudart.dll.so.
ln -s cufft.dll.so cufft32_30_14.dll

ln -s cufft.dll.so cufft.dll

Aqui também serão enxergados os arquivos cufft32_30_14.dll e cufft.dll, mas todas as chamadas endereçadas a estes arquivos serão encaminhadas a cufft.dll.so.

Agora é o momento de ensinar o sistema onde estão instalados os arquivos de CUDA. Edite o arquivo /etc/ld.so.conf e adicione na última linha o caminho para os arquivos de CUDA (como root):

nano -w /etc/ld.so.conf

/usr/local/cuda/lib

Depois digite os seguintes comandos:

OBS.: volte ao diretório onde estão cudart.dll.so e cufft.dll.so.

cd /home/josemarcio/.wine/drive_c/windows/system32

ldconfig

chmod +x cudart.dll.so

chmod +x cufft.dll.so

Confira se está tudo funcionando perfeitamente:
ldd cufft32_30_14.dll

ldd cudart32_30_14.dll

O resultado normal é o que segue:

linux-gate.so.1 => (0xffffe000)

libcudart.so.3 => /usr/local/cuda/lib/libcudart.so.3 (0xf765e000)

libwine.so.1 => /usr/lib32/libwine.so.1 (0xf751b000)

libm.so.6 => /lib32/libm.so.6 (0xf74f1000)

libc.so.6 => /lib32/libc.so.6 (0xf7377000)

libdl.so.2 => /lib32/libdl.so.2 (0xf7371000)

libpthread.so.0 => /lib32/libpthread.so.0 (0xf7356000)

librt.so.1 => /lib32/librt.so.1 (0xf734c000)

libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/32/libstdc++.so.6 (0xf725e000)

libgcc_s.so.1 => /lib32/libgcc_s.so.1 (0xf7242000)

/lib/ld-linux.so.2 (0xf76f9000)

Tudo ok, então crie o arquivo /etc/ld.so.conf.d/cuda.conf e adicione a linha que segue para que as configurações sejam mantidas ao reiniciar o micro ou atualizar variáveis de ambiente (mantido root).
nano -w /etc/ld.so.conf.d/cuda.conf

/usr/local/cuda/lib

Atualize variáveis de ambiente, rode o comando a seguir:
env-update

Crie um diretório para abrigar os arquivos do Cliente GPU3. Eu escolhi criar o diretório GPU3 na pasta do usuário, em /home. Fazer o download do GPU3 no diretório criado (voltar ao usuário padrão).

mkdir /home/josemarcio/GPU3

cd /home/josemarcio/GPU3

wget http://www.stanford.edu/~friedrim/[email protected]_console_6.41

mv Folding\@home.exe_console_6.41 Folding\@home.exe

Permitir execução do arquivo [email protected].

chmod +x Folding\@home.exe
Criar links simbólicos apontando para a localização dos arquivos cudart32_30_14.dll e cufft32_30_14.dll.
ln -s /home/josemarcio/.wine/drive_c/windows/system32/cudart32_30_14.dll cudart32_30_14.dll

ln -s /home/josemarcio/.wine/driver_c/windows/system32/cufft32_30_14.dll cufft32_30_14.dll

E agora o momento tão esperado:
nice -n 19 wine Folding\@home.exe -forcegpu nvidia_fermi
Troubleshooting

Resolva seus problemas

Se algo como está descrito abaixo surgir no seu terminal, alguma coisa deu errado. Verifique os passos anteriores para determinar se você pulou algum trecho da configuração ou errou algum comando.

Core_i7 system32 # ldd cudart32_30_14.dll

linux-gate.so.1 => (0xffffe000)

libcudart.so.3 => not found

libwine.so.1 => /usr/lib32/libwine.so.1 (0xf75ed000)

libm.so.6 => /lib32/libm.so.6 (0xf75c3000)

libc.so.6 => /lib32/libc.so.6 (0xf7449000)

libdl.so.2 => /lib32/libdl.so.2 (0xf7443000)

/lib/ld-linux.so.2 (0xf77cb000)

Observe que o prompt está parado na pasta /home/josemarcio/.wine/drive_c/windows/system32 e esta pasta deve conter os links simbólicos cudart32_30_14.dll e cufft32_30_14.dll. Se você já incluiu esses links e os demais descritos no tutorial e mesmo assim surgiu o erro descrito abaixo...

[08:43:28] + Working ...

fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.você90.CRT" (9.0.21022.8)

err:module:import_dll Library cudart32_30_14.dll (which is needed by L"Z:\\home\\josemarcio\\GPU3\\FahCore_15.exe") not found

err:module:import_dll Library cufft32_30_14.dll (which is needed by L"Z:\\home\\josemarcio\\GPU3\\FahCore_15.exe") not found

err:module:LdrInitializeThunk Main exe initialization for L"Z:\\home\\josemarcio\\GPU3\\FahCore_15.exe" failed, status c0000135

[08:43:32] CoreStatus = C0000135 (-1073741515)

[08:43:32] Client-core communications error: ERROR 0xc0000135

[08:43:32] This is a sign of more serious problems, shutting down.

Application tried to create a window, but no driver could be loaded.

Make sure that your X server is running and that $DISPLAY is set correctly.

err:systray:initialize_systray Could not create tray window

Application tried to create a window, but no driver could be loaded.

Make sure that your X server is running and that $DISPLAY is set correctly.

então você provavelmente esqueceu de criar os links simbólicos descritos na etapa correspondente do tutorial, criados dentro da pasta do GPU3.

BIBLIOGRAFIA

1) NVIDIA GPU3 Linux/Wine Headless Install Guide

- Explica passo-a-passo como preparar o sistema para receber a instalação do cliente GPU3 no Linux. A distribuição utilizada é o Ubuntu Linux 9.04, mas os comandos em versões mais recentes do Ubuntu são os mesmos.

2) Folding@Home GPU3 Windows Client on Linux Wiki

- Tem o mesmo conteúdo da fonte listada acima, mas com algumas observações muito pertinentes, as quais se tornam essenciais ao término do processo.

3) Guide for GPU3 Beta Client {Windows & Linux}

- Neste link podemos encontrar dados referentes à instalação e configuração do cliente GPU3 no Windows (suporte oficial) e no Linux (suporte extra-oficial). O guia é bem completo e muito bem sistematizado: é possível localizar situações diversas e como agir em cada uma delas, inclusive com links onde são disponibilizadas mais informações. Separa as seções de cada tipo de configuração por textos com cores diferentes, o que facilita a identificação do conteúdo que é procurado especificamente.

Agradecimentos

Agradeço a pronta disponibilidade a todos os colegas que responderam as minhas dúvidas quando iniciei a pesquisa sobre esse assunto, especialmente de Eriberto Torres, Evandro e cristianogro.

Alterações anteriores:

16/11/2012 às 09:30 H Motivo: Correção de link de download do CUDA Toolkit 3.0

Link para o comentário
Compartilhar em outros sites

então o zeca deveria incluir esse apt-get install no tutorial dele para que funcione com outras distribuições, certo?

Só complementado, o comando emerge é do gerenciador de pacotes do Gentoo, assim como o apt-get é o gerenciador de pacotes do Debian e derivados. Não vejo necessidade de ele incluir isto, pois existem infinitas distribuições Linux e suas derivadas, cada uma com um gerenciador de pacotes de pacotes, vai de cada um saber qual a sua e qual o comando, nada que uma pesquisada rápida não resolva.

Aproveitando o embalo, Zeca o PPD no Windows e no Linux foram semelhantes? Teve alguma perca?

Link para o comentário
Compartilhar em outros sites

O comando emerge é exclusivo do gentoo' date=' então quem usa outra distro vai ter problemas com este comando.[/quote']

Ainda não adicionei a bibliografia... quando eu colocar as fontes ficarão disponíveis links para, pelo menos, a distribuição Ubuntu, que é compatível com Debian e outras tantas.

O que vale no tutorial são os conceitos. Vou dar uma revisada e o que não tiver ficado claro vou alterando.

Link para o comentário
Compartilhar em outros sites

Só complementado, o comando emerge é do gerenciador de pacotes do Gentoo, assim como o apt-get é o gerenciador de pacotes do Debian e derivados. Não vejo necessidade de ele incluir isto, pois existem infinitas distribuições Linux e suas derivadas, cada uma com um gerenciador de pacotes de pacotes, vai de cada um saber qual a sua e qual o comando, nada que uma pesquisada rápida não resolva.

Aproveitando o embalo, Zeca o PPD no Windows e no Linux foram semelhantes? Teve alguma perca?

Mesmo PPD, veja esses dados postados no tópico "Pontuação/Rendimento de CPUs e GPUs": http://forum.clubedohardware.com.br/showpost.php?p=5421221&postcount=1503

Além de verificar o rendimento do cliente GPU3 e compará-lo rodando no Windows e no Linux, verifiquei o seu impacto no rendimento do SMP, visto que o cliente utiliza-se de processamento da CPU para que dados sejam enviados e recebidos da GPU continuamente.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
  • 6 meses depois...
  • Membro VIP

Aqui deu esse brema:

Launch directory: Z:\home\evandro\GPU3

Executable: Z:\home\evandro\GPU3\[email protected]

Arguments: -forcegpu nvidia_g90

[13:34:15] - Ask before connecting: No

[13:34:15] - User name: Xita (Team 148894)

[13:34:15] - User ID: 628925286CC945F4

[13:34:15] - Machine ID: 2

[13:34:15]

[13:34:15] Gpu type not recognized.

[13:34:15] Gpu species not recognized.

[13:34:15] Loaded queue successfully.

[13:34:15]

[13:34:15] + Processing work unit

[13:34:15] Core required: FahCore_11.exe

[13:34:15] Core found.

[13:34:15] Working on queue slot 01 [October 24 13:34:15 UTC]

[13:34:15] + Working ...

err:module:import_dll Library nvcuda.dll (which is needed by L"Z:\\home\\evandro\\GPU3\\FahCore_11.exe") not found

err:module:import_dll Library cudart.dll (which is needed by L"Z:\\home\\evandro\\GPU3\\FahCore_11.exe") not found

err:module:LdrInitializeThunk Main exe initialization for L"Z:\\home\\evandro\\GPU3\\FahCore_11.exe" failed, status c0000135

[13:34:19] CoreStatus = C0000135 (-1073741515)

[13:34:19] Client-core communications error: ERROR 0xc0000135

[13:34:19] This is a sign of more serious problems, shutting down.

Aí deu aviso de erro grave e fechou, o cliente 7 não pega as WUs nativamente.

Onde errei, foi nos links ?

Usando Mint 12.

Link para o comentário
Compartilhar em outros sites

Evandro, pelo que vi tá dando o erro CoreStatus = C0000135 (-1073741515) pra você, olhando no site do link parece problema de alguma DLL em local errado ou faltando ou algum problema de link: http://fahwiki.net/index.php/CoreStatus_codes

Esse link pode ajudar também: http://foldingforum.org/viewtopic.php?f=59&t=16003

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Evandro, pelo que vi tá dando o erro CoreStatus = C0000135 (-1073741515) pra você, olhando no site do link parece problema de alguma DLL em local errado ou faltando ou algum problema de link: http://fahwiki.net/index.php/CoreStatus_codes

Esse link pode ajudar também: http://foldingforum.org/viewtopic.php?f=59&t=16003

É isso mesmo, vi agora que o link está quebrado, mas não consigo criá-lo sem ele ficar quebrado..

Aqui dá certo: sudo ldd cufft32_30_14.dll

linux-gate.so.1 =>  (0xf7788000)
libcufft.so.3 => /usr/local/cuda/lib/libcufft.so.3 (0xf6b4d000)
libwine.so.1 => /usr/lib/i386-linux-gnu/libwine.so.1 (0xf6a0b000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf69de000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf6834000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf682f000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf6814000)
libcudart.so.3 => /usr/local/cuda/lib/libcudart.so.3 (0xf67d3000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf66ed000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf66cf000)
/lib/ld-linux.so.2 (0xf7789000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf66c6000)

O dll está lá no lugar mas o link não o enxerga.. nem criando como root. :(

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ok, voltei pra máquina hoje e onde que fica o arquivo no /usr/local ?

Na pasta do CUDA ? Em qual subpasta ?

O tar que você fala é o do F@H ? Eu baixei, descompactei e exterminei os .dll dele como mandam os guias, mas não tanto no osso, esse negócio de linux hardcore eu dispenso. :D

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
Aqui deu esse brema:

Aí deu aviso de erro grave e fechou, o cliente 7 não pega as WUs nativamente.

Onde errei, foi nos links ?

Usando Mint 12.

O "brema" foi o seguinte:

err:module:import_dll Library nvcuda.dll (which is needed by L"Z:\\home\\evandro\\GPU3\\FahCore_11.exe") not found

err:module:import_dll Library cudart.dll (which is needed by L"Z:\\home\\evandro\\GPU3\\FahCore_11.exe") not found

Observe no tutorial que eu rodei a linha de comando para receber o FahCore_15.exe, que é para as placas de vídeo da arquitetura Fermi, que é o meu caso. Você tem uma placa de vídeo de arquitetura diferente, pelo que percebi pelo comando do GPU3, então veio o FahCore_11.exe. Tudo certo até aqui, mas no tutorial faltou indicar a criação dos links simbólicos para nvcuda.dll e cudart.dll. Sua instalação deve estar ok para uma placa de vídeo Fermi, mas não para a G90 (-forcegpu nvidia_g90)

A solução seria o seguinte:

cd /home/evandro/GPU3

sudo ln -s /home/evandro/.wine/drive_c/windows/system32/cudart32_30_14.dll cudart.dll

sudo ln -s /home/evandro/.wine/drive_c/windows/system32/cudart32_30_14.dll nvcuda.dll

sudo ln -s /home/evandro/.wine/driver_c/windows/system32/cufft32_30_14.dll cufft.dll

Atenção para a mudança de diretório para a pasta do GPU3. Outro ponto a considerar é que devem ser criados os links simbólicos com o root.
Link para o comentário
Compartilhar em outros sites

  • Gabriel Torres alterou o título para Tutorial - Instalação do GPU3 no Linux (Gentoo) - Folding@Home GPU nVidia

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!