Hi,

PFA patch series which improves sched1 spilling. This all started with
SPEC2017 507.Cactu dynamic icounts on RISC-V being double than those of
aarch64 (~2.6 trillion vs. ~1.4 trillion). Robin/Jeff hinted that the
issue could be sched1 which it turned out to be.

Essentially there are 2 fixes

  - Patch 1/4 improves the main list schedular outcomes by not
    watering down negative pressure change to zero. It implements
    a target hook, which is seperately enabled in patch 2/4 for RISC-V.

  - Patch 3/4 improves model schedule to not increase register
    pressure in certain cases.

  - Patch 4/4 is just a debug hack which I would like any testers to
    apply as that helpe dme a lot during development of patch 3/4.

More details can be found in individual patches.

Results on RISC-V hardware BPI-F3 (perf stat instructions/cycles) and
on aarch64 (I could only get QEMU dynamic icounts).

RISC-V BPI-F3 (-Ofast -march=rv64gcv_zba_zbb_zbs)

  baseline  | 7,631,707,552,979      cycles:u                         #    
1.600 GHz
            | 2,630,225,489,010      instructions:u                   #    0.34 
 insn per cycle
            |
  all       | 6,736,337,207,427      cycles:u           (12% faster)  #    
1.600 GHz
  patches   | 2,078,712,047,604      instructions:u     (21% fewer)   #    0.31 
 insn per cycle

aarch64 (-Ofast -march=armv9-a+sve2) + implement 
TARGET_SCHED_PRESSURE_PREFER_NARROW=true

  baseline  | 1,382,403,783,566
            |
  all       | 1,113,896,471,282                         (19.4% fewer)
  patches   |

As a follow up to discussions at Cauldron last month, I'm CC'ing some of
the aarch64 and power folks to test this on real hardware and get the
results (please don't forget to add equivalent of patch 2/4 for your
respective backends, i.e.

+#undef  TARGET_SCHED_PRESSURE_PREFER_NARROW
+#define TARGET_SCHED_PRESSURE_PREFER_NARROW hook_bool_void_true

Thx,
-Vineet

Vineet Gupta (4):
  sched1: hookize pressure scheduling spilling agressiveness
  RISC-V: Implement TARGET_SCHED_PRESSURE_PREFER_NARROW [PR/114729]
  sched1: model: only promote true dependecies in predecessor promotion
  sched1: model: ICE on infinite loops in predecessor promotion (Not for
    Merge)

 gcc/config/riscv/riscv.cc                     |   3 +
 gcc/doc/tm.texi                               |  11 ++
 gcc/doc/tm.texi.in                            |   2 +
 gcc/haifa-sched.cc                            | 109 ++++++++++++++----
 gcc/sched-rgn.cc                              |  14 ++-
 gcc/target.def                                |  13 +++
 gcc/testsuite/gcc.target/riscv/riscv.exp      |   2 +
 .../gcc.target/riscv/sched1-spills/hang1.c    |  32 +++++
 .../gcc.target/riscv/sched1-spills/hang5.c    |  60 ++++++++++
 .../gcc.target/riscv/sched1-spills/spill1.cpp |  31 +++++
 .../gcc.target/riscv/sched1-spills/spill2.cpp |  37 ++++++
 11 files changed, 289 insertions(+), 25 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/hang1.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/hang5.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/spill1.cpp
 create mode 100644 gcc/testsuite/gcc.target/riscv/sched1-spills/spill2.cpp

--
2.43.0

Reply via email to