Hello, Parrot!
Seems you're missing a link (a
species one?!):
http://www.anandtech.com/printarticle.aspx?i=2507
The Mitosis project relies on both hardware and software (compiler) support to work. First, on the software side, blocks of code that have very few inputs and outputs are detected and considered for use as a separate thread. The entry and exit points of the current working thread are marked, and the portion of the thread that would be split off is separated. The new thread is then fed the appropriate input data that it needs to begin its execution.
With the single thread now split into two threads, they are both sent to the multi-core processor and executed in parallel. At the end of the execution of the thread, its result is checked to make sure that the data is still valid, and if so, the result is committed and all is well.
If the result is invalid the thread must be thrown away, but since we're talking about a single threaded application to begin with, there is no wasted performance, only wasted power as the core this thread was running on would have been idle had it not been for the speculative thread generation.The inclusion of a global register file and a register versioning table to keep track of which cores have the latest and most correct register values is necessary. You also need some additional logic to help validate the outcome of these threads.
The end result of all of this is pretty promising,
especially for single threaded applications that would otherwise get no benefit from being run on a multi-core CPU.