python / python/cpython

Smaller objects for the free-threading build using smaller integer types for refcount

Đang mở
#153,202 14 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

3.16 interpreter-core performance topic-free-threading
Ngôn ngữ chính
Python
Star
77.2k
Fork
35.9k
Chỉ số merge pull request
Chỉ số pull request đang chờ

Mô tả

The literature on reference counting for JVM and other GCs show that very few reference counts get to more than 7. This matches up with our stats that should the ratio of refcount ops to object allocations is about 6/7 to 1.

With that in mind, it would make sense to make the C ints used to represent refcounts smaller.
Instead of:

    uint32_t ob_ref_local;      // local reference count
    Py_ssize_t ob_ref_shared;   // shared (atomic) reference count

we can use:

    uint8_t ob_ref_local;      // local reference count
    uint32_t ob_ref_shared;   // shared (atomic) reference count

using 5 bytes instead of 12.

If ob_ref_local would overflow, we can atomically move some of that count into ob_ref_shared.

if (++op->ob_ref_local == 0) {
    atomic_add(&op->ob_ref_shared, 128);
    op->ob_ref_local = 128;
}

ob_ref_shared can use the same approach to saturation and immortality that the default build currently does.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Không có tệp hoặc bài kiểm thử nào được nêu tên. Hãy bắt đầu với các định nghĩa và nơi sử dụng ob_ref_local và ob_ref_shared trong bản build free-threading, sau đó lần theo hiện tượng tràn bộ đếm tham chiếu, các cập nhật nguyên tử, trạng thái bão hòa và hành vi bất tử. Công việc được hoàn thành khi layout nhỏ hơn hoạt động mà không thay đổi tính đúng đắn của việc đếm tham chiếu hoặc hành vi tràn đã nêu.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
c, python
Lĩnh vực
performance
Loại issue
Tái cấu trúc
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.