python / python/cpython

Tier 2 optimizer: refactor to reuse constant symbols

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

@Fidget-Spinner đang làm issue này rồi.

Từ ngày 11/6/2024.

performance type-feature
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ả

Feature or enhancement

Proposal:

Right now the optimizer loses information across constant values. Say for example

def test_propagate_constants_sources(self):
    def thing(unused):
        x = 0
        for _ in range(100):
            x = 1
            y = Foo.attr + Foo.attr
            # Type information of `Foo_attr` is not propagated to here.
            z = Foo.attr + Foo.attr
        return x
    
    class Foo:
        attr = 1

    res, ex = self._run_with_optimizer(thing, 1)
    opnames = list(iter_opnames(ex))
    self.assertIsNotNone(ex)
    guard_type_version_count = opnames.count("_GUARD_BOTH_INT")
    # Test fails, because we insert 2 type guards instead of 1 (ie type information is not propagated, and guards are repeated)
    self.assertEqual(guard_type_version_count, 1)

After we promote Foo.attr to constants, we don't keep source information, so we don't keep track that the first Foo.attr is the same as the subsequent ones. Then LOAD_CONST_INLINE loads a brand new constant symbol each time, with no information.

https://github.com/python/cpython/blob/main/Python/optimizer_bytecodes.c#L422

A possible solution would be to keep some sort of ID for all constant promotions around.

Has this already been discussed elsewhere?

No response given

Links to previous discussion of this feature:

No response

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.

Đánh giá

Issue này chưa được đánh giá.

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.