Performance issue with ARM64 windows Python release binaries
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 36k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Bug report
Bug description:
Hi Team,
I have an X-Elite laptop with an ARM64-based SoC, and I’ve been running Python workloads on it. However, I’ve noticed that Python seems to perform slower on Windows for ARM devices. To investigate, I used pybench, which provides a solid set of test cases for performance benchmarking. i have also taken intel x64 Lunarlake 258V device which has similar geekbench performance like X-Elite to see the performance delta.
Pybench : https://share.gtd-gmbh.de/d/7e9368c6350a4894bf8f/files/?p=%2FWorklets%2FPyBench%2Fpybench-for-3.10.tar.gz&dl=1
I collected the following results:
| Environment | Total Time (ms) |
|---|---|
| Windows on ARM64 | 802 |
| Windows on x64 | 507 |
| WSL2 (Linux on windows ARM64) | 515 |
To further analyze, I tested multiple Python versions and observed that earlier ARM64 Windows releases performed better than the latest one:
Python Version Comparison
| Version | Windows ARM64 (ms) | Windows x64 (ms) |
|---|---|---|
| 3.11.0 | 763 | 575 |
| 3.11.3 | 589 | Not tested |
| 3.11.6 | 590 | Not tested |
| 3.11.9 | 568 | Not tested |
| 3.12.0 | 666 | 545 |
| 3.12.5 | 688 | Not tested |
| 3.12.6 | 700 | Not tested |
| 3.12.7 | 802 | Not tested |
| 3.12.10 | 802 | 507 |
It’s clear that x64 performance has improved with each release, while ARM64 performance has been inconsistent, with a noticeable regression in the latest version.
I also cloned the Python 3.12.10 source and compiled it on the ARM64 Windows device using different compilers. I found that using clang-cl (19.1.2) with computed gotos enabled yielded significantly better performance than the official release:
Compiled vs. Released (Python 3.12.10)
| version | ARM64 (Release) | ARM64 (Compiled) |
|---|---|---|
| Python v3.12.10 (ms) | 802 | 628 |
Here i have question:
Can anybody please share the compilation steps (which compiler and flags) used to compile release ARM64 Windows binaries? If it is MSVC, is there any specific reason for not using clang-cl? Based on my experiment with pybench, I am seeing good results with clang-cl. Are there any other test cases we are running with release binaries where clang is not performing better?
Analysis:
I have tried to collect ETL logs in Windows and profile the test with Profile Explorer. The actual bottleneck I am seeing is in the compiler interpreter. The function python312.dll!_PyEval_EvalFrameDefault is the bottleneck.
CPython versions tested on:
CPython main branch, 3.12
Operating systems tested on:
Windows
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Báo cáo không nêu tệp, bài kiểm thử hoặc điểm vào nào của CPython. Hãy bắt đầu bằng cách tái hiện phép so sánh pybench được cung cấp trên Windows ARM64, Windows x64, WSL2 và các phiên bản Python được liệt kê; công việc được xem là hoàn tất khi đã xác định và ghi lại hoặc khắc phục nguồn gốc của hồi quy trên ARM64 Windows.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- operating-systems, performance
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 28/100