尝试在 RHEL 6.6 上的 NVIDIA Tesla K20c GPU 上解码 mp3 文件

尝试在 RHEL 6.6 上的 NVIDIA Tesla K20c GPU 上解码 mp3 文件

我正在尝试使用 mpg123 播放 mp3 文件,但在 GPU 上很难做到这一点。

经过大量研究,我发现最接近我的要求的命令是:

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

但在谷歌搜索其中一些命令后,我意识到这些命令适用于视频解码。

我尝试通过以下方式将其调整为 mpg123 来运行此命令(只是为了看看我会得到什么响应):

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

以下是我得到的输出:

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

我仍然不明白如何使用 mpg123 使音频文件在我的 NVIDIA GPU 上运行并监视其执行时间。

任何帮助或建议将不胜感激。

编辑:我在终端上执行了以下命令:

sudo aplay -L

并得到以下输出:

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

不过,这只是 aplay 的信息,而不是 mpg123 的信息。我从另一个来源发现aplay仅用于播放wav文件。

感谢另一个 stackoverflow 问题,我能够成功跟踪我的设备 ID。我运行该命令sudo aplay -l并得到以下输出:

**** 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

我使用此信息通过键入以下命令来使用 mpg123 播放 mp3 文件:

mpg123 -D hw:1,3 sample.mp3

这给了我以下输出:

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.

我不知道这个音频文件是在 GPU 还是其他处理器上播放的。如何确认这个文件是在GPU上播放的?

编辑:

VLC 能否利用 GPU 能力解码音频?我从这个链接中得到了这个想法,但我并不确定:https://askubuntu.com/questions/240386/how-do-i-enable-hardware-accelerated-video-in-vlc-with-intel-hd-4000-gpu

答案1

我不知道任何公开可用的在 GPU 上运行的 MP3 解码器的实现,当然不是在 中mpg123,当然也不是使用 vdpau(用于视频解码)。

并行 MP3 解码可能不太容易,而这对于使其在 GPU 上高效运行是必要的。

例如,一些谷歌搜索发现本文,它似乎使用了自定义 CUDA 实现,并报告与在 CPU 上运行相比可以节省电量。 (全文仅根据要求提供,所以我不知道性能)。

请注意,您所做的任何测量都将在很大程度上取决于 CPU 和 GPU 情况下的实现质量。

相关内容