Skip to content
  • Ömer Sinan Ağacan's avatar
    Cross-module LambdaFormInfo passing · 96eb36f9
    Ömer Sinan Ağacan authored
    
    
    - Store LambdaFormInfos of exported Ids in interface files
    - Use them in importing modules
    
    This is for optimization purposes: if we know LambdaFormInfo of imported
    Ids we can generate more efficient calling code, see `getCallMethod`.
    
    Exporting (putting them in interface files or in ModDetails) and
    importing (reading them from interface files) are both optional. We
    don't assume known LambdaFormInfos anywhere and do not change how we
    call Ids with unknown LambdaFormInfos.
    
    Runtime, allocation, and residency numbers when building
    Cabal-the-library (commit 0d4ee7ba3).
    
    (Log and .hp files are in the MR: !2842)
    
    Runtime:
    
    |     | GHC HEAD | This patch | Diff           |
    |-----|----------|------------|----------------|
    | -O0 |  0:35.70 |    0:34.75 | -0.95s, -2.66% |
    | -O1 |  2:25.21 |    2:25.16 | -0.05s, -0.03% |
    | -O2 |  2:52.89 |    2:51.25 | -1.63s, -0.9%  |
    
    Allocations:
    
    |     | GHC HEAD        | This patch      | Diff                 |
    |-----|-----------------|-----------------|----------------------|
    | -O0 |  54,872,673,008 |  54,917,849,488 | +45,176,480, +0.08%  |
    | -O1 | 227,080,315,016 | 227,584,483,224 | +504,168,208, +0.22% |
    | -O2 | 266,085,969,832 | 266,710,115,472 | +624,145,640, +0.23% |
    
    Max. residency:
    
    NOTE: Residency is measured with extra runtime args: `-i0 -h` which effectively
    turn all GCs into major GCs, and do GC more often.
    
    |     | GHC HEAD                   | This patch                   | Diff                 |
    |-----|----------------------------|------------------------------|----------------------|
    | -O0 | 416,350,080 (894 samples)  | 417,733,152 (892 samples)    | +1,383,072, +0.33%   |
    | -O1 | 928,484,840 (2101 samples) | 945,624,664 (2098 samples)   | +17,139,824, +1.84%  |
    | -O2 | 991,311,896 (2548 samples) | 1,010,647,088 (2536 samples) | +19,335,192, +1.95%  |
    
    NoFib results:
    
    --------------------------------------------------------------------------------
            Program           Size    Allocs    Instrs     Reads    Writes
    --------------------------------------------------------------------------------
                 CS           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                CSD           0.0%      0.0%      0.0%     +0.0%     +0.0%
                 FS           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                  S           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                 VS           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                VSD           0.0%      0.0%     +0.0%     +0.0%     +0.1%
                VSM           0.0%      0.0%     +0.0%     +0.0%     +0.0%
               anna           0.0%      0.0%     -0.3%     -0.8%     -0.0%
               ansi           0.0%      0.0%     -0.0%     -0.0%      0.0%
               atom           0.0%      0.0%     -0.0%     -0.0%      0.0%
             awards           0.0%      0.0%     -0.1%     -0.3%      0.0%
             banner           0.0%      0.0%     -0.0%     -0.0%     -0.0%
         bernouilli           0.0%      0.0%     -0.0%     -0.0%     -0.0%
       binary-trees           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              boyer           0.0%      0.0%     -0.0%     -0.0%      0.0%
             boyer2           0.0%      0.0%     -0.0%     -0.0%      0.0%
               bspt           0.0%      0.0%     -0.0%     -0.2%      0.0%
          cacheprof           0.0%      0.0%     -0.1%     -0.4%     +0.0%
           calendar           0.0%      0.0%     -0.0%     -0.0%      0.0%
           cichelli           0.0%      0.0%     -0.9%     -2.4%      0.0%
            circsim           0.0%      0.0%     -0.0%     -0.0%      0.0%
           clausify           0.0%      0.0%     -0.1%     -0.3%      0.0%
      comp_lab_zift           0.0%      0.0%     -0.0%     -0.0%     +0.0%
           compress           0.0%      0.0%     -0.0%     -0.0%     -0.0%
          compress2           0.0%      0.0%     -0.0%     -0.0%      0.0%
        constraints           0.0%      0.0%     -0.1%     -0.2%     -0.0%
       cryptarithm1           0.0%      0.0%     -0.0%     -0.0%      0.0%
       cryptarithm2           0.0%      0.0%     -1.4%     -4.1%     -0.0%
                cse           0.0%      0.0%     -0.0%     -0.0%     -0.0%
       digits-of-e1           0.0%      0.0%     -0.0%     -0.0%     -0.0%
       digits-of-e2           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             dom-lt           0.0%      0.0%     -0.1%     -0.2%      0.0%
              eliza           0.0%      0.0%     -0.5%     -1.5%      0.0%
              event           0.0%      0.0%     -0.0%     -0.0%     -0.0%
        exact-reals           0.0%      0.0%     -0.1%     -0.3%     +0.0%
             exp3_8           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             expert           0.0%      0.0%     -0.3%     -1.0%     -0.0%
     fannkuch-redux           0.0%      0.0%     +0.0%     +0.0%     +0.0%
              fasta           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                fem           0.0%      0.0%     -0.0%     -0.0%      0.0%
                fft           0.0%      0.0%     -0.0%     -0.0%      0.0%
               fft2           0.0%      0.0%     -0.0%     -0.0%      0.0%
           fibheaps           0.0%      0.0%     -0.0%     -0.0%     +0.0%
               fish           0.0%      0.0%      0.0%     -0.0%     +0.0%
              fluid           0.0%      0.0%     -0.4%     -1.2%     +0.0%
             fulsom           0.0%      0.0%     -0.0%     -0.0%      0.0%
             gamteb           0.0%      0.0%     -0.1%     -0.3%      0.0%
                gcd           0.0%      0.0%     -0.0%     -0.0%      0.0%
        gen_regexps           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             genfft           0.0%      0.0%     -0.0%     -0.0%      0.0%
                 gg           0.0%      0.0%     -0.0%     -0.0%     +0.0%
               grep           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             hidden           0.0%      0.0%     -0.1%     -0.4%     -0.0%
                hpg           0.0%      0.0%     -0.2%     -0.5%     +0.0%
                ida           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              infer           0.0%      0.0%     -0.3%     -0.8%     -0.0%
            integer           0.0%      0.0%     -0.0%     -0.0%     +0.0%
          integrate           0.0%      0.0%     -0.0%     -0.0%      0.0%
       k-nucleotide           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              kahan           0.0%      0.0%     -0.0%     -0.0%     +0.0%
            knights           0.0%      0.0%     -2.2%     -5.4%      0.0%
             lambda           0.0%      0.0%     -0.6%     -1.8%      0.0%
         last-piece           0.0%      0.0%     -0.0%     -0.0%      0.0%
               lcss           0.0%      0.0%     -0.0%     -0.1%      0.0%
               life           0.0%      0.0%     -0.0%     -0.1%      0.0%
               lift           0.0%      0.0%     -0.2%     -0.6%     +0.0%
             linear           0.0%      0.0%     -0.0%     -0.0%     -0.0%
          listcompr           0.0%      0.0%     -0.0%     -0.0%      0.0%
           listcopy           0.0%      0.0%     -0.0%     -0.0%      0.0%
           maillist           0.0%      0.0%     -0.1%     -0.3%     +0.0%
             mandel           0.0%      0.0%     -0.0%     -0.0%      0.0%
            mandel2           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               mate          +0.0%      0.0%     -0.0%     -0.0%     -0.0%
            minimax           0.0%      0.0%     -0.2%     -1.0%      0.0%
            mkhprog           0.0%      0.0%     -0.1%     -0.2%     -0.0%
         multiplier           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             n-body           0.0%      0.0%     -0.0%     -0.0%     +0.0%
           nucleic2           0.0%      0.0%     -0.1%     -0.2%      0.0%
               para           0.0%      0.0%     -0.0%     -0.0%     -0.0%
          paraffins           0.0%      0.0%     -0.0%     -0.0%      0.0%
             parser           0.0%      0.0%     -0.2%     -0.7%      0.0%
            parstof           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                pic           0.0%      0.0%     -0.0%     -0.0%      0.0%
           pidigits           0.0%      0.0%     +0.0%     +0.0%     +0.0%
              power           0.0%      0.0%     -0.2%     -0.6%     +0.0%
             pretty           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             primes           0.0%      0.0%     -0.0%     -0.0%      0.0%
          primetest           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             prolog           0.0%      0.0%     -0.3%     -1.1%      0.0%
             puzzle           0.0%      0.0%     -0.0%     -0.0%      0.0%
             queens           0.0%      0.0%     -0.0%     -0.0%     +0.0%
            reptile           0.0%      0.0%     -0.0%     -0.0%      0.0%
    reverse-complem           0.0%      0.0%     -0.0%     -0.0%     +0.0%
            rewrite           0.0%      0.0%     -0.7%     -2.5%     -0.0%
               rfib           0.0%      0.0%     -0.0%     -0.0%      0.0%
                rsa           0.0%      0.0%     -0.0%     -0.0%      0.0%
                scc           0.0%      0.0%     -0.1%     -0.2%     -0.0%
              sched           0.0%      0.0%     -0.0%     -0.0%     -0.0%
                scs           0.0%      0.0%     -1.0%     -2.6%     +0.0%
             simple           0.0%      0.0%     +0.0%     -0.0%     +0.0%
              solid           0.0%      0.0%     -0.0%     -0.0%      0.0%
            sorting           0.0%      0.0%     -0.6%     -1.6%      0.0%
      spectral-norm           0.0%      0.0%     +0.0%      0.0%     +0.0%
             sphere           0.0%      0.0%     -0.0%     -0.0%     -0.0%
             symalg           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                tak           0.0%      0.0%     -0.0%     -0.0%      0.0%
          transform           0.0%      0.0%     -0.0%     -0.0%      0.0%
           treejoin           0.0%      0.0%     -0.0%     -0.0%      0.0%
          typecheck           0.0%      0.0%     -0.0%     -0.0%     +0.0%
            veritas          +0.0%      0.0%     -0.2%     -0.4%     +0.0%
               wang           0.0%      0.0%     -0.0%     -0.0%      0.0%
          wave4main           0.0%      0.0%     -0.0%     -0.0%     -0.0%
       wheel-sieve1           0.0%      0.0%     -0.0%     -0.0%     -0.0%
       wheel-sieve2           0.0%      0.0%     -0.0%     -0.0%     +0.0%
               x2n1           0.0%      0.0%     -0.0%     -0.0%     -0.0%
    --------------------------------------------------------------------------------
                Min           0.0%      0.0%     -2.2%     -5.4%     -0.0%
                Max          +0.0%      0.0%     +0.0%     +0.0%     +0.1%
     Geometric Mean          -0.0%     -0.0%     -0.1%     -0.3%     +0.0%
    
    Metric increases micro benchmarks tracked in #17686:
    
    Metric Increase:
        T12150
        T12234
        T12425
        T13035
        T5837
        T6048
    
    Co-authored-by: default avatarAndreas Klebinger <klebinger.andreas@gmx.at>
    96eb36f9