Mostrando postagens com marcador driver nvidia. Mostrar todas as postagens
Mostrando postagens com marcador driver nvidia. Mostrar todas as postagens

quinta-feira, 25 de outubro de 2012

Timeout para kernel CUDA que leva muito tempo para executar

Certo, antes de qualquer coisa, este é um post que deve ser usado com muito cuidado, pois ele pode ocasionar que sua tela "congele" se usado indiscriminadamente, pois nele vamos desabilitar a função do X que impede processos do display de rodarem por um tempo muio longo (longo eu quero dizer mais que alguns segundos).

Explicando o contexto no qual necessitei disto, você notará que é um caso bastante específico onde eu tenho certeza que a chance do meu processo travar era mínima.

Eu estou realizando testes de processamento  de propósito geral na placa gráfica como parte do meu TCC. Então, obviamente como eu desejo testar o limite da placa gráfica meus testes podem levar vários segundos.

Porém os drivers gráficos quando utilizados como displays (isto é, você tem um monitor ligado na placa gráfica) não permite que processos levem mais que alguns poucos segundos para serem executados e simplesmente mata os processos que ultrapassarem o limite definido.

Isto é realmente desejável quando você está rodando uma interface gráfica com o usuário e evitar que aquele programa que travou "congele" toda sua máquina e sua única solução seja desligar a força e religa-la.

Porém eu necessito rodar meus testes em uma NVIDIA GeForce GT520M, que possui a tecnologia Optimus (conforme detalhado no post anterior) e exige que em Linux seja utilizado o bumblebee para utilizar a placa gráfica. E o bumblebee depende de uma sessão do X para funcionar.

Então meus testes mais pesados falhavam pois o driver da NVIDIA os matava antes de seu fim.

O mais aconselhado para este caso é iniciar uma sessão sem o X ou utilizar duas placas gráficas diferentes. A primeira é inviável pois dependo do X para usar o bumblebee e a segunda não é possível para o meu notebook.

Por sorte a NVIDIA, provavelmente após ouvir muitas reclamações, disponibilizou uma opção de configuração do X para seus drivers, que desabilita esta funcionalidade e deve ser utilizada como último recurso, como é o meu caso. Confira na integra em: http://nvidia.custhelp.com/app/answers/detail/a_id/3029/~/using-cuda-and-x

Então basta abrir seu arquivo de configuração do X, no caso do bumblebee /etc/bumblebee/xorg.conf.nvidia, e adicionar a seguinte opção dentro do escopo de device:

Option "Interactive" "false"

Se você não estiver utilizando o bumblebee, reinicie sua máquina e pronto! Depois de fazer o que pretende, não se esqueça de reverter esta modificação. E lembrando mais uma vez isto é um último recurso quando nenhuma das outras opções é viável.

sexta-feira, 17 de agosto de 2012

Ubuntu 12.04 + NVIDIA 304.37 + Bumblebee

Os drivers da NVIDIA que os  repositórios oficiais do Ubuntu oferecem são conhecidamente desatualizados por uma questão de um minimo de estabilidade que devem ter antes de serem oficialmente suportados. Hoje o driver oferecido oficialmente é 0 295, mas a NVIDIA já lançou o 304.

Mas quem quer os últimos drivers para linux tem uma opção simples que funciona em 90% dos casos:  um repositório mantido pelos desenvoldores do Xorg com o que há de mais recente.

Para utilizá-lo, em um terminal, faça:

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update

Isso já será o bastante para que você possa atualizar seu driver.

Agora, usuários de notebook sofrem com o optimus, que teoricamente deveria usar a GPU onboard, deixando a offboard desligada para economizar energia, para tarefas simples e, quando fosse necessária aceleração gráfica , ligar a offboard.
Acontece que a NVIDIA não oferece suporte a esta tecnologia no Linux. Ou seja, quem usa GPUs com Optimus está 100% do tempo rodando na placa onboard quando no Linux.
Para suprir esta falha, a comunidade de software livre mantém o projeto Bumblebee, que lhe permite usar sua GPU com optimus no Linux, embora não de forma automatizada. Ou seja, é possível usar a GPU, mas é preciso preceder seu comando por um segungo. Algo da forma:

optirun <comando>

Para instalar o Bumblebee é bastante simples também. Em um terminal faça:

sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia

Por fim reinicie o computador.

Agora você se lembra que no inicio eu mencionei que os drivers mais novos nem sempre estão 100%. Bem, o Bumblebee com o driver 304.37 da NVIDIA não se deram muito bem. Se você está nesta situação deve receber um erro do tipo:

[ERROR]Cannot access secondary GPU - error: Could not load GPU driver
[ERROR]Aborting because fallback start is disabled.

Por sorte o pessoal do Bumblebee já conseguiu contornar. Para isso será preciso fazer as seguintes edições no arquivo /etc/bumblebee/bumblebee.conf :

Module=nvidia -> Module=nvidia-current
KernelDriver=nvidia-current -> KernelDriver=nvidia
Driver= -> Driver=nvidia
Com a "seta" (->) eu quero dizer o antes e o depois.

Fontes:
http://bumblebee-project.org/install.html
https://github.com/Bumblebee-Project/Bumblebee/issues/232