From: Francisco Jerez Date: Thu, 20 Apr 2017 18:42:27 +0000 (-0700) Subject: intel/fs: Take into account amount of data read in spilling cost heuristic. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=58324389be7bc7c5e10093b9cc0a8efa9b4c93a9;p=mesa.git intel/fs: Take into account amount of data read in spilling cost heuristic. Until now the spilling cost calculation was neglecting the amount of data read from the register during the spilling cost calculation. This caused it to make suboptimal decisions in some cases leading to higher memory bandwidth usage than necessary. Improves Unigine Heaven performance by ~4% on BDW, reversing an unintended FPS regression from my previous commit 147e71242ce539ff28e282f009c332818c35f5ac with n=12 and statistical significance 5%. In addition SynMark2 OglCSDof performance is improved by an additional ~5% on SKL, and a Kerbal Space Program apitrace around the Moho planet I can provide on request improves by ~20%. Cc: Reviewed-by: Plamena Manolova Reviewed-by: Jason Ekstrand --- diff --git a/src/intel/compiler/brw_fs_reg_allocate.cpp b/src/intel/compiler/brw_fs_reg_allocate.cpp index 2d4d46ef334..ec8e116cb38 100644 --- a/src/intel/compiler/brw_fs_reg_allocate.cpp +++ b/src/intel/compiler/brw_fs_reg_allocate.cpp @@ -822,7 +822,7 @@ fs_visitor::choose_spill_reg(struct ra_graph *g) foreach_block_and_inst(block, fs_inst, inst, cfg) { for (unsigned int i = 0; i < inst->sources; i++) { if (inst->src[i].file == VGRF) - spill_costs[inst->src[i].nr] += block_scale; + spill_costs[inst->src[i].nr] += regs_read(inst, i) * block_scale; } if (inst->dst.file == VGRF)