Changes between Version 20 and Version 21 of Frisby2013Q1


Ignore:
Timestamp:
Feb 23, 2013 11:18:01 PM (3 years 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