Changes between Version 20 and Version 21 of Frisby2013Q1


Ignore:
Timestamp:
Feb 23, 2013 11:18:01 PM (14 months ago)
Author:
nfrisby
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Frisby2013Q1

    v20 v21  
    149149There might have been some potential benefits to run-time from thunk-growth versus in-thunk (with limit=8, 35 percentage points better on constraint, eg), but we're not confident in those measurements. 
    150150 
     151===== Revisited ===== 
     152 
     153The first one was actually already implemented, so we compared in-thunk-limit=10 with free-variables-limit=10. 
     154 
     155We avoid PAP creation, -flate-float-simpl, and do not abstract known calls. 
     156 
     157TODO try it with -fprotect-last-arg 
     158 
     159TODO try it with -flate-abstract-sat-var 
     160 
     161Binary sizes increase +5.5% with the first, and only +2.5 with the second. It's so consistent that it's probably in the base library. 
     162 
     163Allocation was within 0.1%, except for cacheprof (worse by 1%), but cacheprof is always wiggly. 
     164 
     165Elapsed time changes 
     166 
     167{{{ 
     168driver.sh x 15 
     169                              baseline       in-thunk=10      free-vars=10 
     170           atom                 3.66           -0.8%           -1.2% 
     171      cacheprof                 2.06           +5.4%           +2.4% 
     172  comp_lab_zift                 1.34           +2.3%           -0.1% 
     173         hidden                 1.97           +2.8%           +1.1% 
     174            hpg                 0.50           +4.0%           -9.2% 
     175            ida                 0.59           +6.2%           +2.8% 
     176      integrate                 0.66           -0.2%           -1.9% 
     177           life                 1.85           +3.3%           +2.3% 
     178     multiplier                 0.72           -0.2%           -2.8% 
     179           para                 1.64           +0.2%           -3.0% 
     180         primes                 0.45           -0.4%           -2.1% 
     181          solid                 0.91           -0.1%           -1.1% 
     182      transform                 1.86           -1.9%           -2.7% 
     183      typecheck                 0.70           +1.4%           -2.9% 
     184           wang                 0.89           -1.6%           -2.4% 
     185      wave4main                 1.18           +1.9%           +1.0% 
     186   wheel-sieve2                 1.37           +0.6%           -1.0% 
     187 
     188           anna                 0.44           -3.8%           +0.0% 
     189          boyer                 0.23           -0.6%           +2.0% 
     190   cryptarithm1                 2.35           -0.2%           +1.8% 
     191          power                 4.26           -1.4%           -0.3% 
     192         simple                 1.33           -2.7%           -1.7% 
     193       treejoin                 1.72           +1.0%           +2.4% 
     194 
     195TODO ~/nofib-logs/22-feb-2013/round2-it10-vs-lam10 
     196}}} 
     197 
    151198==== Preserving Fast Entries ==== 
    152199 
     
    261308 
    262309The let prevents the cases from being merged. Since LLF is so aggressive, it floats f when it otherwise wouldn't be, enabling the case merge. 
     310 
     311==== Lifting Recursive Lambdas ==== 
     312 
     313I arbitrarily went with flate-rec-lam-limit=10. 
     314 
     315We avoid creating PAPs and there is a -flate-float-simpl. 
     316 
     317TODO try it with no free-variable restriction on recursive lams 
     318 
     319TODO try it with -flate-protect-last-arg 
     320 
     321TODO try it with -flate-abstract-sat-var? 
     322 
     323Binary size increases another 1% to 1.5%. 
     324 
     325Allocation swings > 0.5% 
     326 
     327{{{ 
     328                           baseline          it10+norec     it10+rec10 
     329           anna             70678152           -0.0%           -1.3% 
     330           ansi               128632           -0.1%           -1.1% 
     331         awards               292416           -0.1%           -0.5% 
     332       calendar               838008           -0.0%           -0.9% 
     333        circsim           1326471120           -0.0%           -0.9% 
     334       clausify             34268616           -0.0%           -1.8% 
     335   cryptarithm1           2051852480           -0.0%           -2.4% 
     336         expert               373048           -0.0%           -1.0% 
     337          fluid              9308464           -0.0%           -6.3% 
     338         gamteb             59846096           -0.8%           -0.9% 
     339         hidden           1165309432           -0.0%           -1.2% 
     340          infer             29637224           -0.0%           -0.6% 
     341          kahan            405812520           -0.0%           +1.5% 
     342        knights              2258392           +0.3%           -0.3% 
     343        mandel2              8970176           -0.0%           -0.8% 
     344        mkhprog              3371224           -0.0%           -1.2% 
     345           para            500173128           -0.4%           -1.7% 
     346        reptile             16634048           -0.0%           -1.0% 
     347           rfib               115688           -0.0%           -1.2% 
     348            tak               110136           -0.1%           -3.5% 
     349      transform            738806200           -2.2%           -2.8% 
     350      typecheck            317783904           -0.0%           -2.5% 
     351           x2n1              2463160           -0.0%           -3.3% 
     352 
     353      cacheprof            476193896           +0.1%           +2.1% 
     354    constraints           2142833608           -0.0%           +0.9% 
     355   cryptarithm2             26560976           -0.0%          +22.4% 
     356            cse              1257128           -0.0%           +0.5% 
     357            fem             53059480           -0.0%           +1.0% 
     358       fibheaps             47494928           -0.5%           +7.5% 
     359           fish             19083736           -0.0%           +1.6% 
     360       nucleic2             98472096           -0.9%           +0.5% 
     361            rsa             17910680           -0.0%           +0.6% 
     362         simple            226413112           -0.3%          +23.5% 
     363         sphere             95134112           -0.0%           +4.3% 
     364}}} 
     365 
     366Run time changes 
     367 
     368{{{ 
     369x15 driver and reproduced with x15 local-driver 
     370 
     371        Program         log-baseline        log-it10  log-it10-rec10 
     372           anna                 0.44           -3.0%           -6.8%  good 
     373     bernouilli                 0.92           +0.1%           -1.7% 
     374    constraints                21.47           -0.0%           -1.5% 
     375  comp_lab_zift                 1.34           +1.7%           +0.3% 
     376       compress                 0.91           +1.9%           -0.5% 
     377      compress2                 1.97           -3.2%           -9.9%  excellent 
     378   cryptarithm1                 2.35           +0.3%           -3.9%  great 
     379            fft                 0.23           +0.0%           -2.9%  good 
     380         hidden                 1.95           +4.4%           -1.4%  -- reproduced-ish: it wiggled 
     381            hpg                 0.47           +3.5%           +0.4% 
     382            ida                 0.59           +5.7%           +3.1% 
     383          infer                 0.36           -1.7%           -6.2%  good 
     384        integer                 5.69           +0.8%           +0.0% 
     385          kahan                 0.85           -0.6%           -1.7% 
     386           lcss                 3.49           -0.7%           -1.4% 
     387           life                 1.85           +2.8%           -2.0% 
     388       listcopy                 0.44           +1.5%           -0.5% 
     389     multiplier                 0.71           -0.3%           -1.6% 
     390           para                 1.63           +0.7%           -2.4%  good 
     391      paraffins                 0.89           -0.9%           -3.3%  good 
     392      transform                 1.86           -2.4%           -4.5% 
     393       treejoin                 1.72           +1.1%           +0.2% 
     394      typecheck                 0.69           +1.0%           -0.2% 
     395           wang                 0.89           -1.3%           -3.2% 
     396 
     397          event                 1.02           -2.7%           -1.4% 
     398      listcompr                 0.40           -0.2%           +2.7% 
     399          power                 4.27           -1.6%           -0.2% 
     400         primes                 0.45           +0.0%           +2.8% 
     401            scs                 3.55           +2.6%           +3.2% 
     402         simple                 1.32           -2.5%          +28.3% 
     403   wheel-sieve1                 0.93           +0.6%           +1.9% 
     404 
     405}}} 
     406 
     407===== Analysis ===== 
     408 
     409  * cryptarithm2 - we're lifting the letrec out of a SAT-transformed function. In particular, the `>>=` for `[]` can no longer be specialized on the second argument; this has disastrous effects 
     410 
     411  * simple - similar to cryptarithm2, so I'm not digging in for now. 
     412 
     413  * compress2 - it10-rec10 is a big win, even though it has 165 SLOW_CALL_OTHER_ctr (previously 0). Using the baseline libraries for both variants, rec10 actually worsens by 1.1%. So it's in the libraries. Ticky shows an additional $wa15 in GHC.IO.Handle.Text. TODO 
     414 
     415TODO 
    263416 
    264417=== Miscellaneous Findings === 
     
    369522==== Measurements ==== 
    370523 
    371 Allocation 
     524Allocation; only good things happen with protect-last-arg, unfolding-ignore-RealWorld doesn't make much of a difference. 
    372525 
    373526{{{ 
     
    386539 
    387540{{{ 
     541                          baseline         baseline2     protect-no-ignore   protect-ignore 
     542 
    388543x5 
    389544 
     
    429584TODO: investigate 
    430585 
    431 TODO: see how this interacts with LLF 
     586===== Interaction with LLF ===== 
     587 
     588TODO try with -flate-float-abstract-sat? 
     589 
     590Baseline sizes tend to increase another 1% to 1.5%. 
     591 
     592Allocation changes > 0.5%: 
     593 
     594{{{ 
     595                           baseline             it10     it10-protect-ignore 
     596  comp_lab_zift            330889440           -0.0%           -5.0% 
     597         gamteb             59846096           -0.8%           -1.4% 
     598         hidden           1165309432           -0.0%           -0.7% 
     599       maillist             92431136           -0.2%           -0.8% 
     600         puzzle            165864160           -0.0%          -15.1% 
     601 
     602        rewrite             17800064           -0.0%           +3.1% 
     603}}} 
     604 
     605NB The rewrite bump is likely the same as in the non-LLF case: it happens because some recursive bindings end up in a different order for some reason and consequently some intermediate data structures don't get compiled away. 
     606 
     607Elapsed time changes: 
     608 
     609{{{ 
     610x15 driver and then reproduced with x15 local-driver  
     611 
     612                              baseline        baseline2        it10      it10-protect-ignore 
     613       cichelli                 0.34           +0.0%           -1.5%           -2.9% 
     614  comp_lab_zift                 1.34           +0.1%           +1.6%           -4.4% 
     615           life                 1.85           -1.1%           +3.0%           +0.3% 
     616           para                 1.64           -0.1%           +0.0%           -3.0% 
     617      paraffins                 0.89           -0.1%           -0.7%           -2.5% 
     618         puzzle                 0.49           -0.2%           +0.8%          -10.2% 
     619            scs                 3.56           +0.1%           +1.7%           -0.6% 
     620   wheel-sieve2                 1.37           +0.4%           -0.7%           -1.7% 
     621 
     622           anna                 0.44           +0.0%           -3.6%           +0.0%   -- reproduced at x50 
     623        circsim                 5.82           -0.2%           -1.7%           +0.5% 
     624   cryptarithm1                 2.36           -0.0%           +0.2%           +1.4% 
     625          event                 1.02           +0.0%           -3.2%           +0.0% 
     626         exp3_8                 1.88           -0.3%           +0.2%           +1.6% 
     627        integer                 5.69           -0.2%           +0.7%           +2.6% 
     628           lcss                 3.49           -0.3%           -1.1%           +0.6% 
     629      typecheck                 0.69           -0.4%           +0.7%           +3.0%   -- reproduced at x50 
     630}}} 
     631 
     632 * event - no Core diff 
     633 * integer - no Core diff 
     634 * typecheck - a few nested LNEs become top-level functions 
     635 
     636TODO: investigate the bad ones 
    432637 
    433638===== Continuation ===== 
     
    570775 
    571776TODO 
     777 
     778== Other Tasks == 
     779 
     780  * Johan pointed out regressions; look into them --- there might be some easy wins 
     781 
     782  * try making all dictionaries strict (simultaneously drop the newtype-single-method trick) 
     783 
     784  * late CSE; make lvlMFE very aggressive 
     785 
     786  * consider adding a void parameter to LNEs earlyish in the pipeline so they do not appear to share work