Predication is a compiling technique used in the Itanium that optimizes or removes branching code by working it so that much of the code runs in parallel. By designing software and compilers to rework branches into parallel code with fewer or no branches, and by running this code on a "wide" processor that can process this code in parallel, which the Itanium is intended to be able to do, the number of cycles it takes to complete a task drops.
What predication does is minimize the time it takes to run if-then-else situation and uses processor width to run both the 'then' and 'else' in parallel. When the 'if' branch is determined, the incorrect branch's result is discarded. By removing branches and making code more parallel, predication reduces the number of cycles it takes to complete a task while making better use of a wide processor.
Jerry Huck of HP gave a great metaphor for of what predication is in a presentation he gave back in 1997 at the Microprocessor Forum. Here is a reworking of his example:
Imagine you walk into a bank. You will make either a deposit or withdrawal. The teller may predict you will make a withdrawal as they know you usually do, so they fill out the withdrawal form as you get in line. If you get to the front and make a withdrawal, all is well, but if you are there to make a deposit, the teller then has to fill out the deposit slip and the time it takes to complete the transaction increases.
With predication, the teller is ambidextrous and, when you get in line, they fill out both a withdrawal and deposit slip, so that when you get to the front, no matter what task you intend on doing, the process will run without a hitch.
In the metaphor, predication is the teller's knowledge that they should fill out both the deposit and withdrawal forms before they know exactly what you want. The teller's ambidexterity, the ability to fill out both forms at once, is akin to the ability of an EPIC processor to run instructions in parallel. Predication removes or lessens the penalty of if-then and allows the if-then-else process to run with as few steps as possible.
Another side benefit of predication is that, by removing branches, there are less branch mispredicts. Branch mispredicts necessitate that the pipeline be flushed, a very cycle expensive procedure, so by lessening the number of branches, predication can greatly reduce wasted processor time.
Of course, for predication to be useful, it must run on a processor that can do these instructions in parallel, which is exactly what the Itanium does with its parallel execution coreā¦