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.

Nenhum comentário:

Postar um comentário