With more registers the compiler can be more aggressive when optimizing code. Unrolling loops eliminates many branch delays, and with more registers at its disposal, the compiler can unroll loops many more times while still being able to leave global variables in registers.

    Are there disadvantages to having more registers?
    Well, registers are very expensive, so adding many more registers will increase the cost of an IA-64 chip. The compiler will also have to be designed to take advantage of this new, increased amount of registers and put them to best use.

    Since the compiler explicitly tells the CPU in the template field at the beginning of a bundle of instructions which instructions can execute in parallel, the CPU does not have to analyze the instruction stream at run time to find parallelism.

    What is the bigget disadvantage of IA-64 instruction bundling?
    The compiler must do much more work to determine which instructions are parallelizeable, requiring a much more sophisticated compiler.

    What are some of the advantages of shifting some of the instruction ordering responsibilities to the compiler?
    The compiler can do many of the execution optimizations ahead of time, taking the burden off of the CPU. The CPU can then execute instructions quicker because it does not have to waste time figuring out how to order instructions for optimal execution. Two of IA-64's biggest breakthroughs, speculation and predication, are only possible if the compiler is responsible for more optimizations.

    IA-64 compilers will be required to do much more work than current compilers, so compile-time for programs will probably increase significantly. IA-64 instructions are also longer than RISC instructions, so code size will increase. Because compilers will have to be so much smarter, it is likely that the first IA-64 compilers will not be able to take full advantage of the ISA. It will take several years before good, optimizing IA-64 compilers will be available.

    What are advantages of predication?
    Predication effectively reduces branch penalties. When a branch is found, the CPU starts executing the code for every possible branch outcome. At the machine level there really is no branch, there is just one unbroken stream of code that the compiler has rearranged in the most parallel order. This increases execution time and eliminates the possiblility of mispredicting a branch. It also reduces code fragmentation because the compiler can merge small basic blocks into larger blocks that a branch won't chop up. This in turn gives the compiler more freedom to rearrange instructions for parallel execution.

    Are there disadvantages to predication?
    Predication cannot remove every branch in any given piece of code. In fact, it is only able to remove approximately half of all branches. If a branch cannot be predicated, the IA-64 processor will behave like other processors, trying to predict which path the branch will take. The other down side to predication is that the CPU always executes instructions that it is going to throw away.

    The IA-64 architecture guarantees compatibility across machines that have different numbers of functional units, or different latencies of functional units. What are the advantages to this "backwards compatibility?"
    Software compiled to run on one processor will be able to run on the next implementation of the processor without recompilation. This means a great deal to businesses who invest a lot of money in software as well as hardware. When they want to upgrade their old IA-64 chip to a new one they will still be able to use software that they used on their old machines. This is different than the backwards compatitbility of the x86 chips however. The backwards compatitbility built into the IA-64 chip allows designers of new IA-64 chips to add more registers and/or functional units and speed up or slow down latencies as they wish to make the chip faster. This change in hardware will not affect the function of software designed for older chips because of the inherent "backwards compatibility" built into the IA-64 architecture. What this means for businesses is that they will be able to buy significantly faster hardware without affecting the ability to run their old software.

    Although newer IA-64 processors will be able to run software that was designed for older IA-64 chips, the software might not run at top speeds until it is recompiled for that specific chip. This is due to the fact that compilers will have to do more work optimizing the instruction stream for the CPU, and the compiler will have to know more about the CPU it targets. Different IA-64 implementations will be optimized slightly differently by the compiler. So, when IA-64 becomes the norm, software companies may have to ship multiple binaries to get the best performance on a broad base of IA-64 systems.

    So, what are the realities behind the adoption of IA-64?
    Read on, and you will find out all that you ever wanted to know.