为什么在使用 5 个 CPU 而不是 12 个 CPU 时,我的 python 脚本运行得更快?

Mat*_*hew 0 linux cpu performance python

我在具有 12 个 CPU 的计算机上运行 TensorFlow/Keras 机器学习 python 脚本。

当我执行: taskset -c cpu_list main.py在我的 Ubuntu 终端中,我发现脚本的最佳 CPU 数量是 5。

差异相当显着,从 12 个 CPU 更改为 5 个时,时间减少了约 200%。

此外,1 个 CPU 的运行时间与 12 个相似。

我很困惑为什么会这样,为什么不使用所有 12 个提供最快的运行时间,因为它会有更多的 CPU 可用于计算?

Mok*_*bai 6

您有 12 个线程,而不是 12 个完整内核

https://ark.intel.com/content/www/us/en/ark/products/64594/intel-xeon-processor-e5-2620-15m-cache-2-00-ghz-7-20-gt- s-intel-qpi.html

在此处输入图片说明

因此,超过分配的 6 个 CPU,您将跨线程共享内核。如果任务仅使用核心功能的特定子集,那么您可能看不到任何性能优势,因为任务将有效地等待彼此完成其工作。这称为超线程,当任务具有多种浮点和整数计算的混合时效果最佳。

满载的 CPU 也将处于热极限,因此Turbo Boost不会那么高,您可能会因此而降低性能。

通过完全加载所有 6/12 内核,您还可能使您的系统没有足够的时间来执行其他任务,例如从磁盘加载或保存数据,您可能会在将数据复制到内存或从内存复制数据以及许多其他事情时遇到带宽限制。

如果您不完全了解您正在执行的任务以及它如何探测系统的限制,那么仅仅在问题上投入更多 CPU 不一定会有所帮助。内存或 CPU-GPU 链接的带宽对于“普通”计算机任务来说可能是巨大的,但对于神经学习任务等其他任务来说完全不够用。

我们将这些任务转移到 GPU 的一个原因是它们的大量小而快速的内核,但与通用 CPU 相比,它们大幅增加的带宽也是一个经常被低估的关键因素。现代 GPU 的内存带宽为 256GB/s,您的 CPU 为 42GB/s。

因此,超过 5 个内核时,您可能会遇到许多限制。

很多时候你会看到人们在不知道瓶颈在哪里的情况下花钱购买机器的“疯狂野兽”,在这个过程中,他们最终得到的机器有一些他们本可以避免的非常具体和令人担忧的限制同时节省了很多钱。至强处理器在很多情况下可能会有所帮助,但在很多情况下,它们的大量内核和由此产生的较低时钟速度实际上可能会更糟。