You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多进程下相同任务的CPU核心执行耗时差异原因咨询

多进程相同计算任务耗时差异显著的原因分析

问题背景

我在一台拥有12个CPU核心的Ubuntu机器上运行Python 3.7.5代码,预留2个核心用于系统开销,使用10个核心同时执行完全相同的阶乘计算任务。结果显示所有核心几乎同时启动,但相同计算的完成耗时差异显著,预期是多进程下相同计算任务的耗时相近,请问导致该现象的原因是什么?

测试代码

from multiprocessing import Pool, cpu_count
from datetime import datetime

def stress_test(args):
    cpu, value = args
    start_time = datetime.now()
    print(f'cpu starts: {cpu}')
    for i in range(value):
        value = value * i
    print(f"cpu: {cpu} time: {datetime.now() - start_time}")

if __name__ == '__main__':
    start_time = datetime.now()
    cpu_count = cpu_count() - 2
    with Pool(cpu_count) as mp_pool:
        mp_pool.map(stress_test, [(cpu, int(2e8)) for cpu in range(cpu_count)])
    print(f"total: {datetime.now() - start_time}")

原因分析

  • CPU硬件层面的差异:现代CPU核心并非完全同质化。部分CPU采用大小核架构,即使是同类型核心,制造工艺的微小偏差也会带来基础性能差异;此外,核心的散热条件、供电优先级不同,会导致实际运行频率波动,直接影响计算速度。
  • 系统调度的干扰:即便预留了2个核心,系统后台仍有各类服务、守护进程在运行,这些进程可能临时抢占计算核心的时间片。不同计算进程遇到的调度干扰频率和时长不同,计算被打断的次数存在差异,最终体现为耗时差距。
  • 内存访问的竞争与缓存差异:阶乘计算会生成超大整数,这类数据的存储、读写会占用大量内存带宽。多进程同时访问内存时会产生竞争,不同进程的内存访问延迟不一致;同时,各进程的缓存命中情况有差异,缓存命中率高的进程计算速度会更快。
  • 进程资源分配的微小延迟:虽然日志显示所有进程几乎同时启动,但实际的CPU绑定、内存页分配等操作存在微小时间差。随着计算任务推进,这些初始延迟会被累积放大,最终导致耗时差异显著。
  • Python大整数运算的隐式差异:当计算数值超过普通整数范围后,Python会自动切换到大整数实现。不同进程的大整数在内存中的布局、分配的内存块位置不同,会导致运算效率出现差异。

内容的提问来源于stack exchange,提问作者J.L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:05:04