Skip to content
  • Ömer Sinan Ağacan's avatar
    Cross-module LambdaFormInfo passing · 7a737e89
    Ömer Sinan Ağacan authored and Marge Bot's avatar Marge Bot committed
    
    
    - 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)
    
    |     | GHC HEAD | This patch | Diff           |
    |-----|----------|------------|----------------|
    | -O0 |  0:35.89 |    0:34.10 | -1.78s, -4.98% |
    | -O1 |  2:24.01 |    2:23.62 | -0.39s, -0.27% |
    | -O2 |  2:52.23 |    2:51.35 | -0.88s, -0.51% |
    
    |     | GHC HEAD        | This patch      | Diff                       |
    |-----|-----------------|-----------------|----------------------------|
    | -O0 |  54,843,608,416 |  54,878,769,544 |  +35,161,128 bytes, +0.06% |
    | -O1 | 227,136,076,400 | 227,569,045,168 | +432,968,768 bytes, +0.19% |
    | -O2 | 266,147,063,296 | 266,749,643,440 | +602,580,144 bytes, +0.22% |
    
    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 | 410,284,000 (910 samples)  | 411,745,008 (906 samples)    | +1,461,008 bytes, +0.35%   |
    | -O1 | 928,580,856 (2109 samples) | 943,506,552 (2103 samples)   | +14,925,696 bytes, +1.60%  |
    | -O2 | 993,951,352 (2549 samples) | 1,010,156,328 (2545 samples) | +16,204,9760 bytes, +1.63% |
    
    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
        T9233
    
    Co-authored-by: default avatarAndreas Klebinger <klebinger.andreas@gmx.at>
    7a737e89