为什么我的 CPU 在执行大型视频转换/渲染任务时没有得到充分利用?

为什么我的 CPU 在执行大型视频转换/渲染任务时没有得到充分利用?

我买了一个 24 核处理器 (AMD Ryzen Threadripper 2970WX),用于处理 CPU 密集型工作负载,例如转换大型媒体文件和渲染视频效果。但它通常只使用总容量的 35-55%,即使在执行数小时的大型多核作业时也是如此,例如:

  • 使用 Premiere Pro 渲染视频效果(启用或未启用图形加速)
  • 使用 Adob​​e Media Encoder 导出大文件(启用或未启用图形加速)
  • 使用 Handbrake 转换大型视频文件

下面是使用 Handbrake.exe 转换大型视频文件时从 Process Explorer 和 Core Temp 截取的屏幕截图。通过将鼠标悬停在各个核心直方图上,我可以看到 Handbrake.exe 是每一个核心,但似乎限制在 33-34% 左右的使用率(也就是说,几分钟前 Handbrake 的每个核心的使用率似乎增加到 40%,所以并不完全一致)。

使用 Adob​​e Media Encoder 或 Premiere Pro 执行大型渲染工作时也是如此。Process Explorer 看起来差不多。

我的 CPU 是否未得到充分利用?如果是,我该怎么做才能解除限制?或者这是否与 Process Explorer 呈现信息的方式有关,而实际上我正在使用全部容量?我对 CPU 了解不多,我只是想确保物有所值!

我考虑过是否可能是热节流,但核心温度(第二张屏幕截图)显示温度徘徊在 40°C 左右,对我来说这个温度似乎并不高。

Microsoft Process Explorer 的屏幕截图,显示 24 个核心的当前 CPU 使用率,平均使用率为 48%

应用程序“Core Temp”的屏幕截图,显示 CPU 温度为 40 摄氏度


更新:我刚刚发现Cinebench,然后运行它,它立即以 100% 的使用率将所有 24 个内核最大化(并且 CPU 温度达到 64°C)。我想这排除了热节流。那么为什么 Handbrake 和 Adob​​e Media Encoder(我需要快速运行的主要应用程序)似乎受到限制了呢?

答案1

我不太清楚问题是什么,但这是我的一点看法,不适合发表在评论中。也许有人可以利用它。

首先,视频处理工作负载最好在 GPU 上处理。强大的 CPU 很好,但好的 GPU 更好。它更适合这项工作。参见这个答案了解详情。购买功能强大的 CPU 可能是一个昂贵的死路。不过,您已经购买了它,而且可能出于某种原因,它更适合您的工作流程,所以就是这样。

其次,第二代 Threadripper 并不理想,因为它由两个 NUMA 域组成。这意味着它基本上是两个 CPU 粘在一起形成一个封装,并配置为显示为单个 CPU。这种方法有一个潜在的问题:每个内部 CPU 都有自己的 NUMA 域,它们无法访问彼此的缓存。当工作负载移动到另一个 CPU 的核心时,第一个 CPU 的相关缓存必须移动到另一个 CPU 或刷新到 RAM(我不确定这究竟是如何工作的)。这会增加延迟并浪费本可用于计算的时间。有些程序是 NUMA 感知的,这意味着它们将管理其工作负载以避免这种内存混洗,但您的软件可能不会考虑到这一点。如果我没记错的话,这个问题在第三代 Threadrippers 中得到了修复。

答案2

我不完全同意 @gronostaj 的观点。好的 GPU 有利于视频渲染、游戏等。但根据我的经验,软件(CPU)转码通常比硬件(GPU)转码更出色,也更灵活。有人在 GPU 上使用 SVT-AV1 吗?我不知道第二代线程撕裂者的 numa 节点,所以谢谢你的信息。

您未指定编码器。以下信息适用于 10 位编码的 x265。如果对 AV1 感兴趣,请仅使用 svt-av1 编码器,因为它的设计并行性远高于参考 AOM 编码器。

考虑到 numa 和屏幕上的 HandBrake,也许可以尝试并行选项https://x265.readthedocs.io/en/master/cli.html#performance-options

具体来说,在高级选项框中尝试:

池:pmode

这将在所有节点上启用工作池。如果单独使用池不合适,请尝试

池=24:pmode:wpp

相关内容