RetroArch [Official Site], the frontend for a number of emulators will gain an interesting feature to help improve input latency in the next version.
The feature, they're calling Run-Ahead will run core logic one or more frames ahead and then load the state back to reduce input lag. You can even do a "Two-Instance mode" which will essentially load multiple instances of a core (they call emulators and games cores), which apparently helps with some games having a buzzing sound as some cores don't leave audio emulation in a clean state. You can see an example of the difference in this tweet, which has a comparison between a real NES and RetroArch using Run-Ahead. You can also see a little more info in a reddit post here.
They say it's quite resource intensive, so you will need a rather powerful CPU. Their testing of Super Mario World using Snes9x on a Core i7 7700k would normally give 1500fps, but once they enabled Run-Ahead with 2 frames, it drops right down to 440fps. The higher you set it, the more it will drop of course.
Why are they doing this? Some retro games actually come with "built-in 2/3 frames of latency", so removing it makes it feel a lot better of course. Pretty interesting stuff, emulation is a difficult job and this shows why when they work around issues like this.
It's due in the 1.7.2 release and it will work across Linux, Mac, Windows and Android builds. You can see more information about it here.
Thanks for the tip, Mahendra!