[llvm-dev] Enabling Loop Distribution Pass as default in the pipeline of new pass manager
Jingu Kang via llvm-dev
llvm-dev at lists.llvm.org
Fri Jun 18 05:13:28 PDT 2021
I appreciate your replies. I have seen below performance data.
For AArch64, the performance data from llvm-test-suite is as below.
Metric: exec_time
Program results_base results_loop_dist diff
test-suite...ications/JM/lencod/lencod.test 3.95 4.29 8.8%
test-suite...emCmp<5, GreaterThanZero, Mid> 1456.09 1574.29 8.1%
test-suite...st:BM_BAND_LIN_EQ_LAMBDA/44217 22.83 24.50 7.3%
test-suite....test:BM_BAND_LIN_EQ_RAW/44217 23.00 24.17 5.1%
test-suite...st:BM_INT_PREDICT_LAMBDA/44217 589.54 616.70 4.6%
test-suite...t:BENCHMARK_asin_novec_double_ 330.25 342.17 3.6%
test-suite...ow-dbl/GlobalDataFlow-dbl.test 2.58 2.67 3.3%
test-suite...da.test:BM_PIC_2D_LAMBDA/44217 781.30 806.36 3.2%
test-suite...est:BM_ENERGY_CALC_LAMBDA/5001 63.02 64.93 3.0%
test-suite...gebra/kernels/syr2k/syr2k.test 6.53 6.73 3.0%
test-suite...t/StatementReordering-flt.test 2.33 2.40 2.8%
test-suite...sCRaw.test:BM_PIC_2D_RAW/44217 789.90 810.05 2.6%
test-suite...s/gramschmidt/gramschmidt.test 1.44 1.48 2.5%
test-suite...Raw.test:BM_HYDRO_1D_RAW/44217 38.42 39.37 2.5%
test-suite....test:BM_INT_PREDICT_RAW/44217 597.73 612.34 2.4%
Geomean difference -0.0%
results_base results_loop_dist diff
count 584.000000 584.000000 584.000000
mean 2761.681991 2759.451499 -0.000020
std 30145.555650 30124.858004 0.011093
min 0.608782 0.608729 -0.116286
25% 3.125425 3.106625 -0.000461
50% 130.212207 130.582658 0.000004
75% 602.708659 612.931769 0.000438
max 511340.880000 511059.980000 0.087630
For AArch64, the performance data from SPEC benchmark is as below.
SPEC2006
Benchmark Improvement(%)
400.perlbench -1.786911228
401.bzip2 -3.174199894
403.gcc 0.717990522
429.mcf 2.053027806
445.gobmk 0.775388165
456.hmmer 43.39308377
458.sjeng 0.133933093
462.libquantum 4.647923489
464.h264ref -0.059568786
471.omnetpp 1.352515266
473.astar 0.362752409
483.xalancbmk 0.746580249
SPEC2017
Benchmark Improvement(%)
500.perlbench_r 0.415424516
502.gcc_r -0.112915812
505.mcf_r 0.238633706
520.omnetpp_r 0.114830748
523.xalancbmk_r 0.460107636
525.x264_r -0.401915964
531.deepsjeng_r 0.010064227
541.leela_r 0.394797504
557.xz_r 0.111781366
Thanks
JinGu Kang
> -----Original Message-----
> From: Michael Kruse <llvmdev at meinersbur.de>
> Sent: 17 June 2021 19:13
> To: Jingu Kang <Jingu.Kang at arm.com>
> Cc: llvm-dev at lists.llvm.org
> Subject: Re: [llvm-dev] Enabling Loop Distribution Pass as default in the pipeline
> of new pass manager
>
> The LoopDistribute pass doesn't do anything unless it sees
> llvm.loop.distribute.enable (`#pragma clang loop distribute(enable)`) because it
> does not have a profitability heuristic. It cannot say whether loop distribution is
> good for performance or not. What makes it improve hmmer is that the
> distributed loops can be vectoried.
> However, LoopDistribute is located before the vectorizer and cannot say in
> advance whether a distributed loop will be vectorized or not.
> If not, then it potentially only increased loop overhead.
>
> To make -enable-loop-distribute on by default would mean that we could
> consider loop distribution to be usually beneficial without causing major
> regressions. We need a lot more data to support that conclusion.
>
> Alternatively, we could consider loop-distribution a canonicalization.
> A later LoopFuse would do the profitability heuristic to re-fuse loops again if
> loop distribution did not gain anything.
>
> Michael
More information about the llvm-dev
mailing list