为什么 Python 只使用 4% CPU?
Why does Python use only 4% CPU?
我有一个 Python 脚本,它计算一个非常大的文本中每个 k 长子字符串的出现次数。在存储子字符串并删除重复数据后,它是这样做的:
counts = {}
for s in all_substrings:
counts[s] = full_text.count(s)
我惊讶地发现这个脚本平均只使用 4% CPU。我有一个 4 核 8 线程 CPU,但没有一个核的使用率超过个位数。我原以为脚本会使用一个核心的 100%,因为它不执行 IO。
为什么它使用这么少的计算能力,我该如何改进?
您的代码段可能是内存带宽受限程序。你在那个循环中几乎没有计算。然而,大多数 cpu 监控程序报告 100% 只访问内存的程序。我也很纳闷
如果你想看到更多正在发生的事情,我建议你玩优秀的perf tool in linux。
您可以从查看页面错误开始
# Sample page faults with stack traces, until Ctrl-C:
perf record -e page-faults -ag
我是戴尔 XPS 15 中 BD PROCHOT bug 的受害者,它不断将 CPU 限制为 800 Mhz。使用 ThrottleStop 禁用 BD PROCHOT 解决了这个问题,我的脚本现在使用了 100% 的 CPU 核心。
我有一个 Python 脚本,它计算一个非常大的文本中每个 k 长子字符串的出现次数。在存储子字符串并删除重复数据后,它是这样做的:
counts = {}
for s in all_substrings:
counts[s] = full_text.count(s)
我惊讶地发现这个脚本平均只使用 4% CPU。我有一个 4 核 8 线程 CPU,但没有一个核的使用率超过个位数。我原以为脚本会使用一个核心的 100%,因为它不执行 IO。
为什么它使用这么少的计算能力,我该如何改进?
您的代码段可能是内存带宽受限程序。你在那个循环中几乎没有计算。然而,大多数 cpu 监控程序报告 100% 只访问内存的程序。我也很纳闷
如果你想看到更多正在发生的事情,我建议你玩优秀的perf tool in linux。
您可以从查看页面错误开始
# Sample page faults with stack traces, until Ctrl-C:
perf record -e page-faults -ag
我是戴尔 XPS 15 中 BD PROCHOT bug 的受害者,它不断将 CPU 限制为 800 Mhz。使用 ThrottleStop 禁用 BD PROCHOT 解决了这个问题,我的脚本现在使用了 100% 的 CPU 核心。