Message286320
Digging history, duplicated code is introduced here. (1997-01-17)
https://github.com/python/cpython/commit/99304174680d4c724476dad300ae7fc638842bf0#diff-2131209d0deb0e50c93a88ec6c7b0d52
/* Optimizations based on observations by Jyrki Alakuijala
(paraphrased):
- This routine is very heavily used, so should be AFAP
(As Fast As Possible).
- Most of the time, the first try is a hit or a definite
miss; so postpone the calculation of incr until we know the
first try was a miss.
- Write the loop twice, so we can move the test for
freeslot==NULL out of the loop.
- Write the loop using pointer increments and comparisons
rather than using an integer loop index.
Note that it behooves the compiler to calculate the values
of incr*sizeof(*ep) outside the loops and use this in the
increment of ep. I've reduced the number of register
variables to the two most obvious candidates.
At the time, there was a single lookdict function, and three tries.
* The comment said the first try was for skipping `inc` calculation.
While `inc` had been removed already, I think this implies skipping
freeslot==NULL test.
* After first try, there are two loop for skipping freeslot==NULL test
until first dummy found. This optimization looks gone.
As I said above, lookdict_unicode_nodummy and lookdict_split only search
from table without dummies.
And lookdict_unicode() and lookdict() are not so important lookmapping() was in 1997,
duplicated code only for skipping one freeslot==NULL doesn't make sense.
One possible optimization is removing freeslot completely. because:
* freeslot is used only when inserting. finding is more important.
* insertdict() can find dummy quickly, only looking dk_indices.
But before trying optimization, I suggest to remove duplicated code first.
Macro bench doesn't show significant difference at least. |
|
Date |
User |
Action |
Args |
2017-01-26 16:24:27 | methane | set | recipients:
+ methane, rhettinger, xiang.zhang |
2017-01-26 16:24:26 | methane | set | messageid: <1485447866.97.0.916579743079.issue29304@psf.upfronthosting.co.za> |
2017-01-26 16:24:26 | methane | link | issue29304 messages |
2017-01-26 16:24:26 | methane | create | |
|