Karol Herbst has been one of the independent Nouveau developers who in recent months has been doing a lot of work on advancing re-clocking support for this reverse-engineered driver. Previously he managed his experimental patches in a Git repository where the Nouveau DRM driver was standalone, but now he's established a new setup with the complete kernel source tree. This way you don't need to worry about any breakage against a particular kernel version on your system nor with any other issues pertaining to building the standalone DRM driver: just build it as you would any other kernel spin.
Karol explained some of the work in his Git branch, in an email to Phoronix, outlined below. I'll be trying out Karol's latest Nouveau code once I'm back in the office.
git clone https://github.com/karolherbst/linux.git
git checkout nouveau_4.5_reclocking
and then whatever kernel config you are using.
After booting with that kernel (don't forget to enable nouveau and debugfs), you should get two important files inside /sys/kernel/debug/dri/0/:
1. pstate (this you know already)
2. boost (0: base clock, 1: boost clock, 2: unlimited, same usage as pstate, just echo whatever you want in it and it will limit the highest clock used at the higher pstates)
The boost file can be used to limit the max clock on the gpu and defaults to 1 for now. Currently nouveau doesn't check if the GPU actually draws to much power, so this won't be default until nouveau does that.
the base and boost clocks are usually those which the gpu are advertised with. I know somebody with a 780 Ti where 0 and 2 were stable, but 1 crashed after some minutes with high load. So you might want to play with that a bit if you are up to. 0 and 1 are pretty save, with 2 you want to have a strong enough PSU installed in the machine, because this will draw a lot of power, especially for your 780 Ti (you can check with sensors, because with high end GPUs we now export the power consumption as long as there are power sensors on the GPU).
Also the reclocking bits are not well tested for GM10X cards, because it just uses the Kepler code. With a bit luck, there is no difference and everything just works.
Usually I got pretty good feedback out of this and I am pretty sure that it will work on most cards (>=90%)