FredrikLundh: The main culprit seems to be try/except. We see the same slowdown both on Intel (Windows XP, Linux) and on PowerPC, using both stock builds and local builds.

To compare, use

$ python2.4 pybench.py -f out
$ python2.5 pybench.py -c out

Here's what I get (Windows XP, Core Duo, using Tools/pybench from a Python 2.5 checkout):

Tests:                              per run    per oper.    diff *)
------------------------------------------------------------------------
          BuiltinFunctionCalls:      47.58 ms    0.37 us    -4.28%
           BuiltinMethodLookup:      74.67 ms    0.14 us    +2.53%
                 CompareFloats:      44.79 ms    0.10 us    +5.84%
         CompareFloatsIntegers:      70.10 ms    0.16 us    +0.20%
               CompareIntegers:      63.11 ms    0.07 us    +9.38%
        CompareInternedStrings:      43.49 ms    0.09 us    +6.39%
                  CompareLongs:      48.60 ms    0.11 us    +5.73%
                CompareStrings:      69.44 ms    0.14 us    +5.53%
                CompareUnicode:      66.14 ms    0.18 us    +3.92%
                 ConcatStrings:      88.52 ms    0.59 us   -18.14%
                 ConcatUnicode:     154.99 ms    1.03 us    +3.34%
               CreateInstances:      62.09 ms    1.48 us    +0.56%
       CreateStringsWithConcat:      32.13 ms    0.16 us    +7.85%
       CreateUnicodeWithConcat:      85.84 ms    0.43 us    -0.90%
                  DictCreation:      43.10 ms    0.29 us    +3.89%
             DictWithFloatKeys:     181.50 ms    0.30 us   +12.21%
           DictWithIntegerKeys:      59.95 ms    0.10 us    +7.29%
            DictWithStringKeys:      56.88 ms    0.09 us    +7.98%
                      ForLoops:      41.83 ms    4.18 us    +9.51%
                    IfThenElse:      59.35 ms    0.09 us    +6.87%
                   ListSlicing:      44.07 ms   12.59 us    -1.41%
                NestedForLoops:      31.04 ms    0.09 us    +6.93%
          NormalClassAttribute:      68.99 ms    0.11 us    +6.40%
       NormalInstanceAttribute:      65.71 ms    0.11 us    +5.73%
           PythonFunctionCalls:      80.78 ms    0.49 us    +8.59%
             PythonMethodCalls:      60.44 ms    0.81 us    +3.67%
                     Recursion:      51.86 ms    4.15 us    +3.97%
                  SecondImport:      33.63 ms    1.35 us   +16.05%
           SecondPackageImport:      35.59 ms    1.42 us   +14.56%
         SecondSubmoduleImport:      45.99 ms    1.84 us   +15.60%
       SimpleComplexArithmetic:      35.58 ms    0.16 us   -10.05%
        SimpleDictManipulation:      40.81 ms    0.14 us    +3.95%
         SimpleFloatArithmetic:      53.77 ms    0.10 us    +0.09%
      SimpleIntFloatArithmetic:      56.69 ms    0.09 us   +15.45%
       SimpleIntegerArithmetic:      56.54 ms    0.09 us   +15.52%
        SimpleListManipulation:      37.67 ms    0.14 us   +13.57%
          SimpleLongArithmetic:      31.53 ms    0.19 us    +7.92%
                    SmallLists:      73.81 ms    0.29 us    +3.72%
                   SmallTuples:      68.88 ms    0.29 us    +2.89%
         SpecialClassAttribute:      67.81 ms    0.11 us    +3.75%
      SpecialInstanceAttribute:     113.39 ms    0.19 us    +3.49%
                StringMappings:     303.42 ms    2.41 us    +0.53%
              StringPredicates:      87.84 ms    0.31 us    +1.66%
                 StringSlicing:      61.11 ms    0.35 us    +7.70%
                     TryExcept:      76.13 ms    0.05 us   +14.34%
                TryRaiseExcept:      64.91 ms    4.33 us   +65.58%
                  TupleSlicing:      68.11 ms    0.65 us    +3.28%
               UnicodeMappings:      70.37 ms    3.91 us    +1.85%
             UnicodePredicates:      58.85 ms    0.26 us    +3.02%
             UnicodeProperties:      81.38 ms    0.41 us    +1.87%
                UnicodeSlicing:      77.97 ms    0.45 us    +0.23%
------------------------------------------------------------------------
            Average round time:    3843.92 ms               +5.07%

Here's what SeanReifschneider gets comparing 2.4.3 to 2.5a2 on a Fedora Core 5 system running on a Dual Xeon 3.2:

Tests:                              per run    per oper.    diff *)
------------------------------------------------------------------------
          BuiltinFunctionCalls:      41.81 ms    0.33 us    -2.43%
           BuiltinMethodLookup:      91.88 ms    0.18 us   -13.07%
                 CompareFloats:      49.91 ms    0.11 us    -5.19%
         CompareFloatsIntegers:      63.44 ms    0.14 us   -11.46%
               CompareIntegers:      52.81 ms    0.06 us   -18.00%
        CompareInternedStrings:      44.85 ms    0.09 us    -8.47%
                  CompareLongs:      53.50 ms    0.12 us    +3.69%
                CompareStrings:      71.35 ms    0.14 us    -9.69%
                CompareUnicode:      55.72 ms    0.15 us    -7.21%
                 ConcatStrings:      82.08 ms    0.55 us    -6.36%
                 ConcatUnicode:     121.84 ms    0.81 us    -3.76%
               CreateInstances:      68.49 ms    1.63 us    +2.84%
       CreateStringsWithConcat:      29.01 ms    0.15 us    -8.33%
       CreateUnicodeWithConcat:      76.91 ms    0.38 us   -11.24%
                  DictCreation:      47.75 ms    0.32 us   -14.34%
             DictWithFloatKeys:     135.52 ms    0.23 us    -9.04%
           DictWithIntegerKeys:      57.26 ms    0.10 us   -13.23%
            DictWithStringKeys:      62.15 ms    0.10 us   -15.96%
                      ForLoops:      45.67 ms    4.57 us   -31.84%
                    IfThenElse:      53.73 ms    0.08 us    -6.22%
                   ListSlicing:      42.65 ms   12.18 us    +1.78%
                NestedForLoops:      35.36 ms    0.10 us   -26.33%
          NormalClassAttribute:      67.79 ms    0.11 us   -10.22%
       NormalInstanceAttribute:      61.76 ms    0.10 us   -12.40%
           PythonFunctionCalls:      87.77 ms    0.53 us    -1.05%
             PythonMethodCalls:      68.47 ms    0.91 us    +2.42%
                     Recursion:      60.93 ms    4.87 us    -2.75%
                  SecondImport:      38.83 ms    1.55 us    +8.18%
           SecondPackageImport:      39.83 ms    1.59 us    +2.38%
         SecondSubmoduleImport:      46.89 ms    1.88 us    +6.82%
       SimpleComplexArithmetic:      32.82 ms    0.15 us   -28.42%
        SimpleDictManipulation:      44.08 ms    0.15 us    -7.59%
         SimpleFloatArithmetic:      62.23 ms    0.11 us   -19.66%
      SimpleIntFloatArithmetic:      56.77 ms    0.09 us    -9.10%
       SimpleIntegerArithmetic:      56.55 ms    0.09 us   -10.59%
        SimpleListManipulation:      40.31 ms    0.15 us    -0.96%
          SimpleLongArithmetic:      43.67 ms    0.26 us   +25.68%
                    SmallLists:      63.76 ms    0.25 us    -2.36%
                   SmallTuples:      69.34 ms    0.29 us    -1.65%
         SpecialClassAttribute:      68.18 ms    0.11 us   -10.87%
      SpecialInstanceAttribute:     109.69 ms    0.18 us    -6.68%
                StringMappings:      68.51 ms    0.54 us    -2.83%
              StringPredicates:      69.00 ms    0.25 us    -0.93%
                 StringSlicing:      53.54 ms    0.31 us    -3.35%
                     TryExcept:      54.63 ms    0.04 us    -0.66%
                TryRaiseExcept:      64.79 ms    4.32 us   +67.21%
                  TupleSlicing:      76.69 ms    0.73 us    +2.60%
               UnicodeMappings:      60.11 ms    3.34 us    +1.12%
             UnicodePredicates:      65.36 ms    0.29 us    +0.01%
             UnicodeProperties:      71.37 ms    0.36 us    +2.61%
                UnicodeSlicing:      75.52 ms    0.43 us    -5.89%
------------------------------------------------------------------------
            Average round time:    3555.70 ms               -9.29%

Here is a test result, 100 passes, on a FC5 system running on a Pentium M 1.8 laptop:

Tests:                              per run    per oper.    diff *)
------------------------------------------------------------------------
          BuiltinFunctionCalls:      43.54 ms    0.34 us    +0.69%
           BuiltinMethodLookup:      88.30 ms    0.17 us    +0.18%
                 CompareFloats:      52.62 ms    0.12 us    -2.39%
         CompareFloatsIntegers:      75.50 ms    0.17 us    -1.37%
               CompareIntegers:      83.05 ms    0.09 us    -3.10%
        CompareInternedStrings:      59.15 ms    0.12 us    -2.81%
                  CompareLongs:      58.83 ms    0.13 us    -0.93%
                CompareStrings:      87.54 ms    0.18 us    -3.40%
                CompareUnicode:      73.50 ms    0.20 us    -2.14%
                 ConcatStrings:      96.64 ms    0.64 us    +2.06%
                 ConcatUnicode:     142.22 ms    0.95 us    -0.52%
               CreateInstances:      69.58 ms    1.66 us    +1.47%
       CreateStringsWithConcat:      41.00 ms    0.20 us    -1.49%
       CreateUnicodeWithConcat:      88.92 ms    0.44 us    +0.67%
                  DictCreation:      54.08 ms    0.36 us    -2.47%
             DictWithFloatKeys:     160.19 ms    0.27 us    -1.63%
           DictWithIntegerKeys:      77.66 ms    0.13 us    -2.55%
            DictWithStringKeys:      75.78 ms    0.13 us    -3.58%
                      ForLoops:      56.91 ms    5.69 us    -4.59%
                    IfThenElse:      75.40 ms    0.11 us    +2.69%
                   ListSlicing:      35.32 ms   10.09 us    +5.15%
                NestedForLoops:      40.57 ms    0.12 us    -0.23%
          NormalClassAttribute:      83.87 ms    0.14 us    -2.12%
       NormalInstanceAttribute:      78.37 ms    0.13 us    -0.90%
           PythonFunctionCalls:      87.62 ms    0.53 us    +7.32%
             PythonMethodCalls:      67.41 ms    0.90 us    +4.96%
                     Recursion:      57.98 ms    4.64 us   +14.10%
                  SecondImport:      39.56 ms    1.58 us    +8.29%
           SecondPackageImport:      40.86 ms    1.63 us    +4.11%
         SecondSubmoduleImport:      49.53 ms    1.98 us    +3.31%
       SimpleComplexArithmetic:      41.83 ms    0.19 us   -11.53%
        SimpleDictManipulation:      49.75 ms    0.17 us    -2.89%
         SimpleFloatArithmetic:      70.28 ms    0.13 us    +2.43%
      SimpleIntFloatArithmetic:      72.95 ms    0.11 us    -0.38%
       SimpleIntegerArithmetic:      72.91 ms    0.11 us    -0.41%
        SimpleListManipulation:      44.63 ms    0.17 us    +3.13%
          SimpleLongArithmetic:      39.69 ms    0.24 us    +0.40%
                    SmallLists:      66.57 ms    0.26 us    +0.70%
                   SmallTuples:      72.00 ms    0.30 us    -1.55%
         SpecialClassAttribute:      83.38 ms    0.14 us    -1.04%
      SpecialInstanceAttribute:     135.28 ms    0.23 us    +1.88%
                StringMappings:      80.21 ms    0.64 us    -0.61%
              StringPredicates:      73.78 ms    0.26 us    -0.99%
                 StringSlicing:      58.81 ms    0.34 us    -4.23%
                     TryExcept:      89.54 ms    0.06 us    -2.44%
                TryRaiseExcept:      67.26 ms    4.48 us   +51.57%
                  TupleSlicing:      68.09 ms    0.65 us    +1.16%
               UnicodeMappings:      69.74 ms    3.87 us    -1.10%
             UnicodePredicates:      64.22 ms    0.29 us    -0.38%
             UnicodeProperties:      73.78 ms    0.37 us    +1.02%
                UnicodeSlicing:      78.28 ms    0.45 us    -1.74%
------------------------------------------------------------------------
            Average round time:    4000.30 ms               +0.26%

NeedForSpeed/Goals/Slowdown (last edited 2008-11-15 14:00:03 by localhost)

Unable to edit the page? See the FrontPage for instructions.