nv50/ir: improve instruction pipelining on gm107
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 16 Dec 2016 13:28:14 +0000 (14:28 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 12 Jan 2017 14:21:54 +0000 (15:21 +0100)
commitf519c47f7d47d88ecf3b5e8f28fdffaa12f684d3
tree9e90c49fbe8b42c24d2358433c72e20dd67cef48
parent1b3b4196f08bf825d031cdf6bfcbc7dd3ccf3172
nv50/ir: improve instruction pipelining on gm107

This makes use of scheduling control codes which are very useful
for improving the instruction pipelining.

This patch will increase performance on Maxwell GPUs by, at least,
x1.5 up to x3.5 for some benchmarks.

Although this has been fairly well tested, I would not be suprised
if someone hit a corner case somewhere. That way, the scheduler
is enabled by default but it can be deactivated by using
NV50_PROG_SCHED=0.

Thanks to Scott Gray for the reverse engineering work available from
https://github.com/NervanaSystems/maxas/wiki/Control-Codes.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Acked-by: Pierre Moreau <pierre.morrow@free.fr>
Tested-by: Alexandre Courbot <acourbot@nvidia.com>
Tested-by: Jan Vesely <jan.vesely@rutgers.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_target_gm107.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_target_gm107.h