CALL_FUNCTION_EX argument passing routine can be improved for vectorcalls
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 36k
- Merge trung bình
- 1 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 558
Mô tả
While working on https://github.com/python/cpython/issues/95126, I noticed that CALL_FUNCTION_EX for vectorcall Python functions is extremely wasteful. These are its steps:
CALL_FUNCTION_EXcallsdo_call_corewith aargstuple andkwargsdict.- Eventually it's detected that the function supports vectorcall, and it calls
_PyVectorcall_Call. This calls_PyStack_UnpackDict, which unpacks theargstuple andkwargsdict into a C array. - This C array is passed to the vectorcall function. Eventually calling
_PyEval_Vector. _PyEval_Vectorcalls_PyEvalFramePushAndInit, which sees that there's complex args, and recreates the tuple and args dict ininitialize_localsfrom the C array.- Frame is pushed and evaluated, then popped. End.
We shouldn't even be converting the arguments to a C array just to vectorcall. We should instead directly transfer ownership of args tuple and kwds dict because that would be significantly faster in this case (and save us the tuple and dict recreation dance).
CC @markshannon and @brandtbucher .
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
Theo dõi luồng đối số qua do_call_core, _PyVectorcall_Call, _PyStack_UnpackDict, _PyEval_Vector, _PyEvalFramePushAndInit và initialize_locals. Trước tiên, hãy hiểu cách CALL_FUNCTION_EX đến được các hàm Python vectorcall và quyền sở hữu được xử lý như thế nào tại mỗi ranh giới. Công việc được xem là hoàn tất khi đường đi tránh được mảng C trung gian và việc tạo lại tuple/dict, đồng thời vẫn bảo toàn quyền sở hữu đối số chính xác và hành vi đúng.
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
- compilers
- Loại issue
- Tái cấu trúc
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100