[Python-Dev] Tagged integers

James Y Knight foom at fuhm.net
Thu Jul 15 00:46:43 CEST 2004


On Jul 14, 2004, at 12:28 PM, Jeff Epler wrote:
> I tried this back in 2002.
> http://mail.python.org/pipermail/python-dev/2002-August/027685.html

Interesting that I somehow missed that in my search. I had thought 
surely someone must've tried it already. Ah well. :) But, I'm glad I 
did it, because I do have somewhat different results.

1) No segfaults or other weird behavior (all tests pass)
2) With tagged integers does actually benchmark faster than without 
(although, not by all that much).

The version of the patch I sent earlier was indeed slightly slower at 
pystone than standard python. However, I have made a few changes that 
have since made it faster, instead:
1) made Py_tagged_types a const array.
2) removed inlining of creation of small ints for PyInt_FromLong. Turns 
out that makes it go slower not faster.

Anyhow, current result is a 3% overall speedup of pystone. 35791 
pystones/second (standard python 2.3.3), vs. 36900 pystones/second 
(tagged integers).

I also tried running pybench -w 5. Here's the results, compared to 
standard python 2.3.3. Overall speedup of 7.19%. I must admit I find 
these results quite puzzling, as I certainly didn't expect it to affect 
list slicing that much. Also, that Compare* are so much slower seems 
strange as well. Perhaps there's something that can be done about that.


Tests:                              per run    per oper.    diff *)
------------------------------------------------------------------------
           BuiltinFunctionCalls:     227.75 ms    0.45 us    -3.72%
            BuiltinMethodLookup:     386.30 ms    0.18 us    +3.33%
                  CompareFloats:     283.50 ms    0.16 us   +57.46%
          CompareFloatsIntegers:     343.35 ms    0.19 us    -1.07%
                CompareIntegers:     261.90 ms    0.07 us    -0.44%
         CompareInternedStrings:     210.10 ms    0.11 us   +19.68%
                   CompareLongs:     244.45 ms    0.14 us   +30.65%
                 CompareStrings:     338.05 ms    0.17 us   +11.73%
                 CompareUnicode:     265.35 ms    0.18 us   +17.70%
                  ConcatStrings:     456.20 ms    0.76 us    -3.31%
                  ConcatUnicode:     564.00 ms    0.94 us    -2.92%
                CreateInstances:     300.30 ms    1.79 us    -2.52%
        CreateStringsWithConcat:     178.35 ms    0.22 us    +4.54%
        CreateUnicodeWithConcat:     559.35 ms    0.70 us    +3.84%
                   DictCreation:     230.50 ms    0.38 us   -12.02%
              DictWithFloatKeys:     504.20 ms    0.21 us    -5.86%
            DictWithIntegerKeys:     225.10 ms    0.09 us   -22.82%
             DictWithStringKeys:     247.20 ms    0.10 us    -7.98%
                       ForLoops:     183.85 ms    4.60 us   -18.97%
                     IfThenElse:     211.60 ms    0.08 us    -2.78%
                    ListSlicing:      81.70 ms    5.84 us   -60.64%
                 NestedForLoops:     141.95 ms    0.09 us   -12.38%
           NormalClassAttribute:     296.05 ms    0.12 us    -4.25%
        NormalInstanceAttribute:     266.15 ms    0.11 us   -10.51%
            PythonFunctionCalls:     336.45 ms    0.51 us   -10.05%
              PythonMethodCalls:     277.80 ms    0.93 us    -1.35%
                      Recursion:     233.50 ms    4.67 us   -18.99%
                   SecondImport:     191.85 ms    1.92 us    +4.44%
            SecondPackageImport:     205.75 ms    2.06 us    +3.03%
          SecondSubmoduleImport:     255.75 ms    2.56 us    +3.67%
        SimpleComplexArithmetic:     206.70 ms    0.23 us    +4.21%
         SimpleDictManipulation:     172.50 ms    0.14 us   -14.22%
          SimpleFloatArithmetic:     296.15 ms    0.13 us    +8.32%
       SimpleIntFloatArithmetic:     183.85 ms    0.07 us   -33.65%
        SimpleIntegerArithmetic:     182.00 ms    0.07 us   -32.62%
         SimpleListManipulation:     217.50 ms    0.20 us   -10.12%
           SimpleLongArithmetic:     161.70 ms    0.25 us    +6.73%
                     SmallLists:     562.85 ms    0.55 us   +13.40%
                    SmallTuples:     468.30 ms    0.49 us   +15.70%
          SpecialClassAttribute:     289.00 ms    0.12 us    -5.97%
       SpecialInstanceAttribute:     460.00 ms    0.19 us    -1.33%
                 StringMappings:     319.10 ms    0.63 us    -0.17%
               StringPredicates:     297.50 ms    0.27 us    -0.77%
                  StringSlicing:     270.00 ms    0.39 us    -1.93%
                      TryExcept:     203.20 ms    0.03 us    +0.15%
                 TryRaiseExcept:     217.40 ms    3.62 us   -28.71%
                   TupleSlicing:     223.55 ms    0.53 us   -42.15%
                UnicodeMappings:     250.10 ms    3.47 us    +0.44%
              UnicodePredicates:     257.60 ms    0.29 us    +2.79%
              UnicodeProperties:     398.55 ms    0.50 us    +6.69%
                 UnicodeSlicing:     395.95 ms    0.57 us    +1.71%
------------------------------------------------------------------------
             Average round time:   15663.00 ms               -7.19%


For comparison, here's the results from standard python:
Tests:                              per run    per oper.   overhead
------------------------------------------------------------------------
           BuiltinFunctionCalls:     236.55 ms    0.46 us    0.50 ms
            BuiltinMethodLookup:     373.85 ms    0.18 us    1.00 ms
                  CompareFloats:     180.05 ms    0.10 us    1.00 ms
          CompareFloatsIntegers:     347.05 ms    0.19 us    1.00 ms
                CompareIntegers:     263.05 ms    0.07 us    2.00 ms
         CompareInternedStrings:     175.55 ms    0.09 us    3.50 ms
                   CompareLongs:     187.10 ms    0.10 us    1.00 ms
                 CompareStrings:     302.55 ms    0.15 us    3.50 ms
                 CompareUnicode:     225.45 ms    0.15 us    2.50 ms
                  ConcatStrings:     471.80 ms    0.79 us    1.00 ms
                  ConcatUnicode:     580.95 ms    0.97 us    1.00 ms
                CreateInstances:     308.05 ms    1.83 us    1.00 ms
        CreateStringsWithConcat:     170.60 ms    0.21 us    1.00 ms
        CreateUnicodeWithConcat:     538.65 ms    0.67 us    1.00 ms
                   DictCreation:     262.00 ms    0.44 us    1.00 ms
              DictWithFloatKeys:     535.60 ms    0.22 us    3.50 ms
            DictWithIntegerKeys:     291.65 ms    0.12 us    3.50 ms
             DictWithStringKeys:     268.65 ms    0.11 us    3.00 ms
                       ForLoops:     226.90 ms    5.67 us    0.50 ms
                     IfThenElse:     217.65 ms    0.08 us    2.50 ms
                    ListSlicing:     207.55 ms   14.83 us    0.50 ms
                 NestedForLoops:     162.00 ms    0.11 us    0.00 ms
           NormalClassAttribute:     309.20 ms    0.13 us    1.50 ms
        NormalInstanceAttribute:     297.40 ms    0.12 us    1.50 ms
            PythonFunctionCalls:     374.05 ms    0.57 us    1.00 ms
              PythonMethodCalls:     281.60 ms    0.94 us    0.50 ms
                      Recursion:     288.25 ms    5.77 us    0.50 ms
                   SecondImport:     183.70 ms    1.84 us    0.50 ms
            SecondPackageImport:     199.70 ms    2.00 us    0.50 ms
          SecondSubmoduleImport:     246.70 ms    2.47 us    0.50 ms
        SimpleComplexArithmetic:     198.35 ms    0.23 us    1.00 ms
         SimpleDictManipulation:     201.10 ms    0.17 us    0.50 ms
          SimpleFloatArithmetic:     273.40 ms    0.12 us    2.00 ms
       SimpleIntFloatArithmetic:     277.10 ms    0.10 us    2.00 ms
        SimpleIntegerArithmetic:     270.10 ms    0.10 us    2.00 ms
         SimpleListManipulation:     242.00 ms    0.22 us    1.00 ms
           SimpleLongArithmetic:     151.50 ms    0.23 us    0.50 ms
                     SmallLists:     496.35 ms    0.49 us    2.50 ms
                    SmallTuples:     404.75 ms    0.42 us    1.50 ms
          SpecialClassAttribute:     307.35 ms    0.13 us    2.00 ms
       SpecialInstanceAttribute:     466.20 ms    0.19 us    2.00 ms
                 StringMappings:     319.65 ms    0.63 us    1.50 ms
               StringPredicates:     299.80 ms    0.27 us    5.00 ms
                  StringSlicing:     275.30 ms    0.39 us    1.50 ms
                      TryExcept:     202.90 ms    0.03 us    3.00 ms
                 TryRaiseExcept:     304.95 ms    5.08 us    1.00 ms
                   TupleSlicing:     386.40 ms    0.92 us    0.50 ms
                UnicodeMappings:     249.00 ms    3.46 us    1.00 ms
              UnicodePredicates:     250.60 ms    0.28 us    6.50 ms
              UnicodeProperties:     373.55 ms    0.47 us    6.50 ms
                 UnicodeSlicing:     389.30 ms    0.56 us    2.00 ms
------------------------------------------------------------------------
             Average round time:   16876.00 ms

James




More information about the Python-Dev mailing list