为何Polars在Intel CPU上比AMD CPU运行更快?附实测对比
问题分析:Polars在不同CPU平台的性能差异
测试环境与代码
两台测试机器配置:
- Intel i7 13700KF,64GB内存,SSD存储,Python 3.11 + Polars 0.20.5
- AMD Ryzen 9 3970X,64GB内存,SSD存储,同款软件版本
测试数据构建代码:
df = pl.DataFrame({ "name": ["a"+str(i) for i in range(1000000)], "age": [i for i in range(1000000)] })
性能测试代码:
%%timeit df.with_columns([ pl.col("name") + "test", pl.col("age").rolling_mean(20) ])
测试结果:
- Intel平台:
12.9 ms ± 20.8 µs per loop - AMD平台:
24.8 ms ± 270 µs per loop
额外观察:少量Polars运算场景下Apple M3 Max性能不及i7 13700KF,但20-30次with_columns这类批量运算时,M3 Max反超。
性能差异的核心原因
1. Intel vs AMD的性能差距
- 指令集与针对性优化:Polars基于Rust开发,底层计算逻辑对Intel的AVX-512指令集有更好适配。Ryzen 9 3970X属于Zen 2架构,不支持AVX-512,仅支持AVX2,在字符串拼接、滚动均值这类依赖SIMD加速的操作中,Intel平台能获得更明显的性能提升。
- 缓存与NUMA架构影响:i7 13700KF采用单CCD设计,L1/L2缓存延迟更低,无跨NUMA节点的内存访问开销;而3970X是多CCD架构,跨节点内存访问存在额外延迟,Polars当前的内存调度逻辑未针对多NUMA节点做深度优化,进一步放大了差距。
- 任务并行度适配:测试中的操作并行度有限,无法充分利用3970X的32核多线程优势,反而i7 13700KF的单线程性能+大小核调度对轻量计算的适配更占优。
2. Apple M3 Max vs Intel i7 13700KF的性能反转
- 小场景:单线程启动优势:少量运算时,x86架构的单线程启动开销更低,Polars对x86的单线程优化更成熟,M3 Max的ARM架构在小任务的指令调度、缓存预热阶段存在一定开销,导致性能落后。
- 大场景:并行与内存架构优势:当运算量提升到20-30次
with_columns时,任务并行度被充分激活。M3 Max的统一内存架构消除了NUMA延迟,14核的多线程能力加上NEON指令集的持续高效运算,配合Polars对ARM平台的批量任务优化,逐渐抵消x86的单线程优势,最终实现反超。
内容的提问来源于stack exchange,提问作者Hakase
相关产品推荐
相关产品推荐

