O aplicativo Opencl não reconhece a GPU até que o usuário se conecte fisicamente (e não remotamente) à máquina

5

Eu corro algumas aplicações opencl em 2x AMD Radeon HD 7870 em uma máquina rodando o Ubuntu 13.10.

Eu ligo a máquina e o lightdm tem o prompt de login. Desde que eu não posso fisicamente estar presente para fazer o login na máquina toda vez que eu ligar o ciclo. Eu quero solucionar o motivo pelo qual o Opencl não detecta a GPU após um ciclo de energia na máquina.

Sem fazer login no lightdm, se eu fizer ssh na máquina e iniciar os trabalhos opencl. Opencl não "vê" a GPU.

Somente se eu fizer login na máquina fisicamente presente e efetuando login no lightdm, o shell remoto "verá" a GPU.

Eu não sei muito sobre o openCL para fornecer mais informações, mas isso parece ser algo sobre como o ubuntu inicializa. O que faz o login no console lightdm .. faça o estado do driver gráfico.

Existe alguma maneira de "carregar" o driver para que o OpenCL o veja.

Estranhamente o lsmod mostra "fglrx" carregado e em uso quando o Opencl não consegue "ver" a GPU.

#

Estado sem loggin no lightdm e como reportado por uma sessão do ssh

#
   hari@hjubuntu:~$ ~/oepncl-program

    Available device list:
    Type: CPU, 'Intel(R) Core(TM)2 Quad  CPU   Q9450  @ 2.66GHz'


hari@hjubuntu:~$ lsmod
    Module                  Size  Used by
    pci_stub               12622  1 
    vboxpci                23194  0 
    vboxnetadp             25670  0 
    vboxnetflt             27613  0 
    vboxdrv               320455  3 vboxnetadp,vboxnetflt,vboxpci
    cuse                   13274  3 
    dm_crypt               22832  0 
    kvm_intel             138567  0 
    kvm                   431754  1 kvm_intel
    gpio_ich               13476  0 
    ppdev                  17671  0 
    snd_usb_audio         149162  2 
    bnep                   19704  2 
    snd_usbmidi_lib        25070  1 snd_usb_audio
    rfcomm                 69130  0 
    bluetooth             372041  10 bnep,rfcomm
    snd_hda_codec_hdmi     41154  2 
    microcode              23656  0 
    psmouse                97655  0 
    snd_hda_codec_realtek    56475  1 
    serio_raw              13413  0 
    snd_seq_midi           13324  0 
    snd_hda_intel          52267  7 
    snd_seq_midi_event     14899  1 snd_seq_midi
    snd_hda_codec         188738  3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel
    snd_rawmidi            30095  2 snd_usbmidi_lib,snd_seq_midi
    snd_hwdep              13602  2 snd_usb_audio,snd_hda_codec
    lpc_ich                21080  0 
    snd_pcm               102033  4 snd_usb_audio,snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
    snd_seq                61560  2 snd_seq_midi_event,snd_seq_midi
    snd_page_alloc         18710  2 snd_pcm,snd_hda_intel
    snd_seq_device         14497  3 snd_seq,snd_rawmidi,snd_seq_midi
    snd_timer              29433  2 snd_pcm,snd_seq
    fglrx                8815330  48 
    snd                    69141  31 snd_hda_codec_realtek,snd_usb_audio,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_usbmidi_lib,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_seq_midi
    it87                   43113  0 
    hwmon_vid              12783  1 it87
    parport_pc             32701  1 
    coretemp               13435  0 
    x38_edac               12898  0 
    soundcore              12680  1 snd
    lp                     17759  0 
    parport                42299  3 lp,ppdev,parport_pc
    binfmt_misc            17468  1 
    mac_hid                13205  0 
    amd_iommu_v2           19054  1 fglrx
    edac_core              62342  1 x38_edac
    vesafb                 13828  1 
    pata_acpi              13038  0 
    hid_generic            12548  0 
    usbhid                 53014  0 
    hid                   101762  2 hid_generic,usbhid
    firewire_ohci          40327  0 
    firewire_core          64534  1 firewire_ohci
    crc_itu_t              12707  1 firewire_core
    r8169                  67581  0 
    mii                    13934  1 r8169
    pata_jmicron           12758  0 
    ahci                   25819  0 
    libahci                32009  1 ahci
    floppy                 69370  0 

Depois que o usuário faz login e eu corro o mesmo programa.

#

Estado depois de entrar no lightdm e iniciar o ambiente de área de trabalho

#
hari@hjubuntu:~$ ~/opencl-program
Available device list:
Type: CPU, 'Intel(R) Core(TM)2 Quad  CPU   Q9450  @ 2.66GHz'
Type: GPU, 'Pitcairn'
Type: ACCELERATOR, 'Pitcairn'

Agora, se eu fizer um diff do lsmod O que eu obtenho é

hari@hjubuntu:~$ diff before_login after_login | grep fglrx
<     fglrx                8815330  48 
<     amd_iommu_v2           19054  1 fglrx
> fglrx                8815330  44 
> amd_iommu_v2           19054  1 fglrx

SO logging fez com que o driver fglrx fosse usado por "44". Como faço para imitar isso, então eu tenho que fazer o login quando alguém de energia remota roda esta máquina?.

edit: Estou tentando implementar o script abaixo e sempre obtenho um

"hari@hjubuntu:~$ xauth extract "$DISPLAY"
xauth: (argv):1:  bad "extract" command line"

O rótulo do ambiente $ DISPLAY está em branco

hari@hjubuntu:~$ echo $DISPLAY

xauth list dá

hjubuntu/unix:1  MIT-MAGIC-COOKIE-1  8562e9f6ac976f310d1425aa11e74184
hjubuntu:0  MIT-MAGIC-COOKIE-1  80f5f4c28e7e2d0fc9444b1862f5cbcb
hjubuntu:0  MIT-MAGIC-COOKIE-1  80f5f4c28e7e2d0fc9444b1862f5cbcb
hjubuntu/unix:13  MIT-MAGIC-COOKIE-1  142c11b5689f4bd2776e860b9d8719dd
hjubuntu/unix:14  MIT-MAGIC-COOKIE-1  08353f652f21b479a6da3a60282bce31
hjubuntu/unix:15  MIT-MAGIC-COOKIE-1  655d074dfb395f536283e70a9494428c
hjubuntu/unix:12  MIT-MAGIC-COOKIE-1  91387509c2dff960e295fdd0eb0ada52
hjubuntu/unix:11  MIT-MAGIC-COOKIE-1  914c7988660149b90eed958066ed2e71
hjubuntu/unix:10  MIT-MAGIC-COOKIE-1  0ab65dbaf838a08bd8c9141fb5da7c35

Imaginando como devo proceder.

    
por harijay 09.06.2014 / 02:44

3 respostas

4

Geralmente, alguns recursos do hardware não são inicializados até que sejam necessários - por exemplo, portas extras de exibição, etc., portanto, é provável que, neste caso, seja necessário executar algo que use o hardware relevante na placa para ativá-lo.

A maneira mais barata / simples de fazer isso é ativar o recurso de login automático (Configurações > Contas de usuário). Não importa de que conta você faz isso, então você pode até usar uma conta de convidado se estiver preocupado com a segurança.

Se isso não for suficiente (pode haver problemas de permissões), você pode compartilhar o xauthority. Basta adicionar algo assim ao final do seu script lightdm:

xauth extract /tmp/auth-file "$DISPLAY"
chmod 660 /tmp/auth-file
chgrp users /tmp/auth-file
cat > /tmp/gpuenable <<EOF
export COMPUTE=$DISPLAY
unset DISPLAY
export XAUTHORITY=/tmp/auth-file
EOF

então quando você logar remotamente, você só precisa executar /tmp/gpuenable antes de qualquer código OpenCL. Altere o nome do grupo "usuários" para qualquer grupo que você queira acessar.

P.S. isso não é específico do Ubuntu, ou mesmo específico do Linux, é que a maioria dos outros SOs tem a tela em execução o tempo todo.

    
por Nick Veitch 17.06.2014 / 10:32
1

Eu também encontrei este problema com um driver AMD e fglrx-update no Ubuntu 14.04. Eu poderia eventualmente usar o meu programa OpenCL depois de matar X.

sudo service lightdm stop
    
por Andre Miras 19.02.2016 / 23:07
0

Tente fazer login com encaminhamentos do Trusted X11:

ssh -Y user@machine
    
por user.dz 21.06.2014 / 20:03