What is IA-64?
    IA-64 is a new instruction set architecture. It is not a newly designed RISC or CISC ISA, it is actually a new type of ISA. It strives to meet some of the real problems inherent today in the microprocessor market. There are two things that slow down computers significantly that IA-64 seeks to address: branch delays and memory latency.

    IA-64 seeks to exploit instruction level parallelism to the highest degree. Intel and HP have called their method of exploiting this parallelism in IA-64 EPIC (Explicitly Parallel Instruction Computing). EPIC simulates parallelism by having the compiler find what instructions can be executed in parallel and "explicitly" package them for the CPU.

    The compiler will create 128-bit packages that contain three instructions. Before the bundle of instructions there will be a template field that will tell the CPU which instructions in the bundle and the following bundle can be executed in parallel. This eliminates the need for the CPU to try and figure out which instructions are parallelizeable, the compiler will tell it explicitly in the template field.

    The following illustration is courtesy of BYTE magazine, and shows more explicitly the IA-64 instruction format.


    IA-64 takes a unique approach to reducing the consequences of branch delays. It uses what is commonly known as predication. The compiler can append a predicate to any instruction it chooses. The compiler will append predicates to instructions that depend on the outcome of a branch in order to help reduce branch penalties.

    A predicate is a tag that allows a program to execute instructions on a conditional basis, the value of the predicate. The value of the predicate in turn depends on the outcome of a conditional statement.

    The compiler assigns predicates to the instructions along both sides of a branch it finds. The CPU will execute instructions along both paths until the CPU has computed the proper branch path. The predicate of the proper path will be set to true, and the predicates of the wrong path will be set to false. The CPU can then write back the results of the instructions whose predicates were true, and discard the others.

    The following illustration is courtesy of BYTE magazine, and explains predication pictorally.


    Memory latency occurs because CPU processing speed is significantly faster than the speed of fetching data from memory. IA-64 suggests a new way to eliminate some memory latency problems, speculative loading.

    Speculative loading can be understood very easily. The compiler tries to load data long before it is used so that when it is needed it is very close in fast memory. This includes loading data before the branch in which it occurs, known as hoisting. One of the aspects of IA-64 speculative loading that is vitally important is that if data is not able to be accessed early, IA-64 does not report an exception right away. It checks to see if the data is able to be accessed immediately before it is used, and if so does not report the exception. If it is still unavailable, then the exception is reported.

    The following illustration is courtesy of BYTE magazine, and explains speculative loading.


    What is different about the hardware design that will be used in conjunction with the new instruction set?

    What else is so important about IA-64?

    What are some Advantages and Disadvantages of IA-64?
    Read on, and you will find out all that you ever wanted to know.