IA-64 ("Intel Architecture 64-Bit"), ist eine 64-Bit-Architektur und Befehlssatz von Intel für die Prozessorgenerationen Itanium und Itanium 2. Die IA-64 unterstützt hardwaremäßig auch die IA-32 auf dem Stand des Pentium III. Da dies nur Beiwerk ist, reicht der Prozessor nicht an die Leistung der erhältlichen IA-32 CPUs heran. Weiterhin sind Itanium Prozessoren mit der IA-32 nur bedingt kompatibel, da zum Beispiel Paging über die IA-64 Architektur läuft und ein Versuch das CR3 (Page Directory Base Register) mit einem Wert zu laden von dieser abgefangen wird.
Das Design basiert auf einem Konzept mit dem Namen Explicitly Parallel Instruction Computing (EPIC), das dem althergebrachten VLIW (Very Long Instruction Word) ähnelt, jedoch eine Reihe von Verbesserungen enthält. Bei EPIC werden die Prozessorbefehle, die keine Abhängigkeiten haben und daher parallel ausgeführt werden können, anhand vordefinierter Muster in Instruction Groups aufgeteilt und so an den Prozessor weitergegeben, der dann anhand seiner eigenen Fähigkeiten entscheiden kann, wie viele der theoretisch möglichen Instruktionsgruppen tatsächlich parallel ausgeführt werden. Die Idee dahinter ist, dass bereits der Compiler feststellt, wie viel Parallelität möglich ist, und dies entsprechend im Programmcode festhält, und der Prozessor die Pipelines später optimal auslasten kann, je nachdem, wie viele Anweisungen er tatsächlich parallel ausführen kann.
Die Architektur versucht, die Wartezeiten auf dem Speicher zu verringern, indem für jeden Datentyp eine große Zahl Register auf dem Prozessor vorhanden ist. So gibt es 128 64-Bit-Register für ganzzahlige Berechnungen, 128 82-Bit-Register speziell für Gleitkomma-Daten und 64 1-Bit-Vorhersageregister, über die die Befehle bedingt ausgeführt werden. Dies erlaubt, mehr Informationen in den Registern zu halten, anstatt jedes mal den langsamen Weg über Cache oder Arbeitsspeicher zu beschreiten, wenn Daten benötigt werden.
Für das Ausführen von IA-32 Software nutzt der Prozessor einen Teil der IA-64 Register als IA-32 Register. Außerdem gibt es im IA-32 einen Sprungbefehl, mit dem in den IA-64 Modus (zurück)gewechselt wird. Nutzt man diesen auf einem IA-32 Prozessor, so erfolgt dort ein Invalid Opcode Interrupt.
Die Architektur verfügt weiterhin über einen großen Befehlssatz mit teilweise hoher Komplexität. So gibt es unter anderem besondere Prozessorbefehle für Multimedia- und aufwendige Gleitkomma-Operationen.
In der Software werden bei einem Funktionsaufruf die aktuellen Registerinhalte auf den Stack geschrieben und nach Ablauf der Funktion wieder zurückgeholt. Dies verursacht Wartezeiten und bremst den Programmfluss aus. Das IA-64-Design reduziert diese Latenz, indem diese Stack-Operationen auf den Registern selbst ausgeführt werden. Die sogenannte Register Stack Engine (RSE) behandelt die Fälle, in denen die Register und der Speicher synchronisiert werden müssen.