I have some doubts. For example, there is no software replacement for out-of-order execution: It is unknown before runtime in which cache level the required data will be or which values it will have (which changes the latency of a few instructions).
DSPs do that, Atari Jaguar, Sony PS2 and PS3 did, all the GPUs manually manage cache.
More than one task and you start a fight over resources, have to manage hierarchies, priorities, all the stuff that now happens automagically.