我将 GTX960 升级为 Grid M40 以加速 FFMPEG 编码。我在 CentOS 7 上使用旧 GTX960 时一切正常,结果令我印象深刻,因此购买了 M40。正如您所见,操作系统似乎可以很好地识别该卡:
[root@localhost]~# nvidia-smi
Mon Nov 14 17:59:15 2016
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48 Driver Version: 367.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GRID M40 Off | 0000:44:00.0 Off | N/A |
| 60% 60C P0 17W / 53W | 0MiB / 4041MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GRID M40 Off | 0000:45:00.0 Off | N/A |
| 59% 59C P0 17W / 53W | 0MiB / 4041MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 GRID M40 Off | 0000:46:00.0 Off | N/A |
| 40% 41C P0 16W / 53W | 0MiB / 4041MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 GRID M40 Off | 0000:47:00.0 Off | N/A |
| 0% 49C P0 10W / 53W | 0MiB / 4041MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
我可以运行一些 Nvidia 示例应用程序:
[root@localhost]~/NVIDIA_CUDA-8.0_Samples/1_Utilities/bandwidthTest# ./bandwidthTest
[CUDA Bandwidth Test] - Starting...
Running on...
Device 0: GRID M40
Quick Mode
Host to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 6286.3
Device to Host Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 6441.0
Device to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 64577.1
Result = PASS
但是当我尝试运行 ffmpeg 时,出现此错误:
[hevc_nvenc @ 0x290e500] No NVENC capable devices found
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_nvenc))
Stream #0:1 -> #0:1 (copy)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
我尝试卸载 nvidia 驱动程序和 cuda 并重新安装它们,甚至重新编译了 ffmpeg,但错误仍未消失。为了好玩,我还尝试了 Nvidia Quadro K2200,结果相同。有什么想法吗?
答案1
我想我已经找到答案了。我在这里看到Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_nvenc))
你试图从原生 h.264 输入转换为 h.265 (hevc) 输出。我不认为 GM107(你的 M40 基于的早期 Maxwell 芯片,其中有四个成员)支持H.265编码根据该兼容性列表,您应该能够通过尝试从 h.264 到 MPEG-4 的转码来验证这一点 - 如果它有效,那么您就知道可能没有其他问题,只是您没有合适的硬件来完成这项工作。
根据相同的兼容性列表,您的 GTX 960 及其最新 Maxwell 芯片 (GM206) 将能够很好地支持 h.265。