Tentando decodificar o arquivo mp3 na GPU NVIDIA Tesla K20c no RHEL 6.6

1

Estou tentando usar o mpg123 para reproduzir um arquivo mp3, mas estou com dificuldades para fazer isso em uma GPU.

Ao fazer muita pesquisa, o comando mais próximo que encontrei para minha exigência foi:

mplayer -vo vdpau and -vc ffh264vdpau, ffmpeg12vdpau, ffmwmv3vdpau, ffvc1vdpau -ao alsa filename.mp4

Mas depois de pesquisar alguns desses comandos, percebi que eles são voltados para a decodificação de vídeo.

Eu tentei executar esse comando adaptando-o para o mpg123 da seguinte maneira (só para ver qual resposta eu obteria):

mpg123 -vo vdpau and -vc ffh264vdpau, ffmpeg12vdpau, ffmwmv3vdpau, ffvc1vdpau -ao alsa /root/Downloads/Traintoleave.mp3

O seguinte é a saída que recebi:

High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.23.8; written and copyright by Michael Hipp and others
    free software (LGPL) without any warranty but with best wishes
Decoder: x86-64 (AVX)
Trying output module: vdpau, device: <nil>
[src/libout123/legacy_module.c:40] error: Unable to open requested module 'vdpau'.
[src/libout123/legacy_module.c:42] error: The only available statically compiled module is 'alsa'.
[src/libout123/libout123.c:432] error: Found no driver out of [vdpau] working with device <default>.
main: [src/mpg123.c:333] error: out123 error 3: failure loading driver module

Eu ainda não entendo como posso usar o mpg123 para fazer o arquivo de áudio rodar na minha GPU NVIDIA e monitorar seu tempo de execução.

Qualquer ajuda ou conselho será muito apreciado.

EDITAR: Eu executei o seguinte comando no terminal:

sudo aplay -L

e obteve a seguinte saída:

default
    Default
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC280 Analog
    Front speakers
surround40:CARD=PCH,DEV=0
    HDA Intel PCH, ALC280 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
    HDA Intel PCH, ALC280 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
    HDA Intel PCH, ALC280 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
    HDA Intel PCH, ALC280 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
    HDA Intel PCH, ALC280 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
hdmi:CARD=NVidia,DEV=0
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
    HDA NVidia, HDMI 1
    HDMI Audio Output

No entanto, esta é apenas uma informação para aplay e não mpg123. Eu encontrei de outra fonte que o aplay é usado para reproduzir apenas arquivos wav.

Graças a outra pergunta do stackoverflow, consegui acompanhar com êxito os IDs do meu dispositivo. Eu corri o comando sudo aplay -l e recebi a seguinte saída:

**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC280 Analog [ALC280 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Eu usei esta informação para reproduzir um arquivo mp3 usando mpg123 digitando o seguinte comando:

mpg123 -D hw:1,3 sample.mp3

Isso me deu a seguinte saída:

High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.23.8; written and copyright by Michael Hipp and others
    free software (LGPL) without any warranty but with best wishes
Invalid shared memory segment size
Invalid shared memory segment size


Terminal control enabled, press 'h' for listing of keys and functions.

Playing MPEG stream 1 of 1: sample.mp3 ...
Invalid shared memory segment size

MPEG 1.0 L III cbr128 44100 stereo
Invalid shared memory segment size
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured

[0:06] Decoding of sample.mp3 finished.

Não sei se esse arquivo de áudio foi reproduzido na GPU ou em outro processador. Como posso confirmar que este arquivo foi reproduzido na GPU?

EDITAR:

O VLC pode ser usado para decodificar áudio usando o poder da GPU? Eu tenho a idéia deste link, mas não tenho certeza disso: link

    
por a_sid 27.11.2016 / 05:55

1 resposta

0

Eu não estou ciente de nenhuma implementação publicamente disponível de um decodificador de MP3 em execução em uma GPU, certamente não em mpg123 , e certamente não usando vdpau (que é para decodificação de vídeo).

Provavelmente não é muito fácil fazer a decodificação de MP3 em paralelo, o que seria necessário para que ela seja executada com eficiência em uma GPU.

Um pouco de googling encontra, por exemplo, este artigo , que parece usar uma implementação de custem CUDA e relatou economia de energia em comparação para executá-lo em uma CPU. (Texto completo disponível apenas mediante solicitação, então não sei sobre desempenho).

Observe que qualquer medida que você fizer dependerá muito da qualidade da implementação, tanto para o caso da CPU quanto da GPU.

    
por 27.11.2016 / 12:07