At work I talked to some guys who worked on this concept in in the 90ties. Their IRC comments are not enthusiastic.

I didn't find anything specific about AMD's solution, but from the Intel paper this will be very limited. The problem is that you can execute a single thread in parallel only as long as the additional branches do not "commit", aka write to memory. You can only allow one thread to write to memory after you can prove from the other threads that this thread actually had a right to execute to this point.

The whole point about this speculative execution is that you execute code that you do not know yet whether it is actually what the program wants to execute. If it turns out that this thread had no business going there you just disgard the results it computed. But that's the catch, it means you can speculatively execute one thread only as long as it doesn't commit to memory. Every speculative thread that tries to write into memory must be stopped until it can be proven that this speculative thread was actually real.

In addition, there is severe cache synchronization overhead as prove threads commit and modify memory that unproven threads use. These threads will be on different cores in different L1 and L2 caches (most likely the L2 cache is disabled entirely on cores executing speculative threads).

But the code has not been written with caches in mind. If you have good multithreaded code then people are careful to keep the data that the different threads use on different cache lines, to keep the locks a cache line away from the data they protect etc. If you try to execute a program in parallel that was not meant to be parallel it will not have any of that.