predication execution, branch prediction Below is a paragraph from a book.


  In an ordinary superscalar processor, we would use branch prediction to guess which of the given instructions is to be executed, and go down that path. If the processor guesses wrong, the pipeline must be flushed.
  
  Predication execute all of instructions and once the values of the predicate registers are known, commit only the results of the valid instructions. Thus we make use of additional parallel execution units to avoid the delays due to pipeline flushing.


So each predication and branch prediction has disadvantage each.
For predication, we have to WAIT until the values of the predicate registers are known. 
For branch prediction, if prediction is wrong, the pipeline must be flushed which will cause a DELAY. 
Seems like both predication and branch prediction needs delay..
But to me.. prediction has a chance to avoid delays when prediction is correct leading to conclusion that prediction is better..Predication always needs waiting.

So how do I tell which one is better??
Under what circumstance should I use predication and branch prediction?

Thank you in advance.
The quote from the book doesn't describe how predicated instructions work today. It says that predicated instructions are "executed but only committed if the condition is true". But that would be exactly what branch prediction does, and would lead to exactly the same problems. 

Instead, a predicated instruction is implemented as an ordinary instruction which just has one more input. It is always executed and always committed, just the effect of the instruction depends on a condition flag. That means all the mechanism to accelerate execution, out of order execution etc. can be used.