IA-64 ( arquitectura Intel Itanium ) es la arquitectura de conjunto de instrucciones (ISA) de la discontinuada familia Itanium de microprocesadores Intel de 64 bits . La especificación ISA básica se originó en Hewlett-Packard (HP) y fue implementada posteriormente por Intel en colaboración con HP. El primer procesador Itanium, con nombre en código Merced , fue lanzado en 2001.
La arquitectura de Itanium se basa en un paralelismo explícito a nivel de instrucciones , en el que el compilador decide qué instrucciones ejecutar en paralelo. Esto contrasta con las arquitecturas superescalares , que dependen del procesador para gestionar las dependencias de las instrucciones en tiempo de ejecución. En todos los modelos de Itanium, hasta Tukwila incluido , los núcleos ejecutan hasta seis instrucciones por ciclo .
En 2008, Itanium fue la cuarta arquitectura de microprocesador más implementada para sistemas de clase empresarial , detrás de x86-64 , Power ISA y SPARC . [1]
En 2019, Intel anunció la discontinuación de las últimas CPU compatibles con la arquitectura IA-64.
En 1989, HP comenzó a preocuparse por el hecho de que las arquitecturas de computación con conjunto de instrucciones reducido (RISC) se estaban acercando a un límite de procesamiento de una instrucción por ciclo . Tanto los investigadores de Intel como los de HP habían estado explorando opciones de arquitectura informática para futuros diseños y comenzaron a investigar por separado un nuevo concepto conocido como palabra de instrucción muy larga (VLIW) [2] que surgió de una investigación realizada por la Universidad de Yale a principios de los años 1980. [3]
VLIW es un concepto de arquitectura informática (como RISC y CISC ) en el que una única palabra de instrucción contiene múltiples instrucciones codificadas en una palabra de instrucción muy larga para facilitar que el procesador ejecute múltiples instrucciones en cada ciclo de reloj. Las implementaciones típicas de VLIW dependen en gran medida de compiladores sofisticados para determinar en el momento de la compilación qué instrucciones se pueden ejecutar al mismo tiempo y la programación adecuada de estas instrucciones para su ejecución, y también para ayudar a predecir la dirección de las operaciones de bifurcación. El valor de este enfoque es realizar un trabajo más útil en menos ciclos de reloj y simplificar los requisitos de hardware de programación de instrucciones del procesador y predicción de bifurcaciones, con una penalización en el aumento de la complejidad, el costo y el consumo de energía del procesador a cambio de una ejecución más rápida.
Durante ese tiempo, HP había comenzado a creer que ya no era rentable para las empresas de sistemas empresariales individuales como la propia HP desarrollar microprocesadores propietarios. Intel también había estado investigando varias opciones arquitectónicas para ir más allá de la ISA x86 y abordar los requisitos de servidores empresariales de alta gama y computación de alto rendimiento (HPC).
En 1994, Intel y HP se asociaron para desarrollar el ISA IA-64, utilizando una variación de los conceptos de diseño VLIW que Intel denominó explícitamente computación de instrucciones paralelas (EPIC). El objetivo de Intel era aprovechar la experiencia que HP había desarrollado en sus primeros trabajos de VLIW junto con la suya propia para desarrollar una línea de productos de gran volumen destinada a los sistemas de alta gama antes mencionados que pudieran venderse a todos los fabricantes de equipos originales (OEM), mientras que HP deseaba poder comprar procesadores listos para usar fabricados con la tecnología de fabricación en volumen y de proceso contemporánea de Intel que fueran mejores que sus procesadores PA-RISC.
Intel tomó la iniciativa en el proceso de diseño y comercialización, mientras que HP contribuyó a la definición de ISA, la microarquitectura Merced/Itanium y Itanium 2. El año objetivo original para entregar el primer producto de la familia Itanium, Merced, era 1998. [2]
Los esfuerzos de marketing de productos y de participación de Intel en la industria fueron sustanciales y lograron éxitos de diseño con la mayoría de los OEM de servidores empresariales, incluidos los basados en procesadores RISC en ese momento. Los analistas de la industria predijeron que IA-64 dominaría en servidores, estaciones de trabajo y computadoras de escritorio de alta gama, y eventualmente suplantaría tanto a las arquitecturas RISC como a las CISC para todas las aplicaciones de propósito general. [4] [5] Compaq y Silicon Graphics decidieron abandonar el desarrollo posterior de las arquitecturas Alpha y MIPS respectivamente a favor de migrar a IA-64. [6]
En 1997, era evidente que la arquitectura IA-64 y el compilador eran mucho más difíciles de implementar de lo que se pensaba originalmente, y la entrega de Itanium comenzó a retrasarse. [7] Dado que Itanium fue el primer procesador EPIC de la historia, el esfuerzo de desarrollo se topó con más problemas imprevistos de los que el equipo estaba acostumbrado. Además, el concepto EPIC dependía de capacidades del compilador que nunca se habían implementado antes, por lo que se necesitaba más investigación. [8]
Varios grupos desarrollaron sistemas operativos para la arquitectura, incluyendo Microsoft Windows , Unix y sistemas similares a Unix como Linux , HP-UX , FreeBSD , Solaris , [9] [10] [11] Tru64 UNIX , [6] y Monterey/64 [12] (los últimos tres fueron cancelados antes de llegar al mercado). En 1999, Intel lideró la formación de un consorcio de la industria de código abierto para portar Linux a IA-64 al que llamaron "Trillium" (y luego renombraron "Trillian" debido a un problema de marca registrada), que fue liderado por Intel e incluyó a Caldera Systems , CERN , Cygnus Solutions , Hewlett-Packard, IBM, Red Hat , SGI , SuSE , TurboLinux y VA Linux Systems . Como resultado, se entregó un Linux IA-64 funcional antes de lo previsto y fue el primer sistema operativo en ejecutarse en los nuevos procesadores Itanium.
Intel anunció el nombre oficial del procesador, Itanium , el 4 de octubre de 1999. [13] En cuestión de horas, el nombre Itanic había sido acuñado en un grupo de noticias de Usenet como un juego de palabras con el nombre Titanic , el transatlántico "insumergible" que se hundió en su viaje inaugural en 1912. [14]
Al día siguiente, el 5 de octubre de 1999, AMD anunció sus planes de ampliar el conjunto de instrucciones x86 de Intel para incluir un modo de 64 bits totalmente compatible con versiones anteriores, revelando además la nueva arquitectura x86 de 64 bits de AMD, en la que la compañía ya había trabajado, que se incorporaría al próximo microprocesador de octava generación de AMD, cuyo nombre en código era SledgeHammer . [15] AMD también señaló que una divulgación completa de las especificaciones de la arquitectura y más detalles estarían disponibles en agosto de 2000. [16]
Como AMD nunca fue invitado a contribuir con la arquitectura IA-64 y cualquier tipo de licencia parecía poco probable, la extensión de la arquitectura AMD64 de AMD se posicionó desde el principio como una forma evolutiva de agregar capacidades informáticas de 64 bits a la arquitectura x86 existente, mientras que todavía era compatible con el código x86 de 32 bits heredado , a diferencia del enfoque de Intel de crear una arquitectura de 64 bits completamente nueva y completamente incompatible con x86 con IA-64.
En enero de 2019, Intel anunció que Kittson dejaría de fabricarse, con una fecha límite de pedido para enero de 2020 y una fecha límite de envío para julio de 2021. [17] [18] En noviembre de 2023, se eliminó la compatibilidad con IA-64 del kernel de Linux y desde entonces se mantiene fuera del árbol. [19] [20] [21]
Intel ha documentado ampliamente el conjunto de instrucciones Itanium [22] y la prensa técnica ha proporcionado descripciones generales. [4] [7]
La arquitectura ha cambiado de nombre varias veces a lo largo de su historia. HP la llamó originalmente PA-WideWord . Intel la llamó más tarde IA-64 , luego Itanium Processor Architecture (IPA), [23] antes de decidirse por Intel Itanium Architecture , pero todavía se la conoce ampliamente como IA-64 .
Se trata de una arquitectura explícitamente paralela rica en registros de 64 bits. La palabra de datos base es de 64 bits, direccionable por bytes. El espacio de direcciones lógicas es de 264 bytes. La arquitectura implementa la predicción , la especulación y la predicción de bifurcaciones . Utiliza ventanas de registros de tamaño variable para el paso de parámetros. El mismo mecanismo también se utiliza para permitir la ejecución paralela de bucles. La especulación, la predicción, la predicación y el cambio de nombre están bajo el control del compilador: cada palabra de instrucción incluye bits adicionales para esto. Este enfoque es la característica distintiva de la arquitectura.
La arquitectura implementa una gran cantidad de registros: [24] [25] [26]
gr0
fr0
fr1
pr0
br0
br.call
bsp
apunta a la segunda pila, que es donde el hardware volcará automáticamente los registros cuando la ventana de registros se complete.Cada palabra de instrucción de 128 bits se denomina paquete y contiene tres ranuras , cada una de las cuales contiene una instrucción de 41 bits , más una plantilla de 5 bits que indica qué tipo de instrucción hay en cada ranura. Esos tipos son unidad M (instrucciones de memoria), unidad I (ALU entera, ALU entera no ALU o instrucciones extendidas inmediatas largas), unidad F (instrucciones de punto flotante) o unidad B (instrucciones extendidas de ramificación o ramificación larga). La plantilla también codifica paradas que indican que existe una dependencia de datos entre los datos anteriores y posteriores a la parada. Todas las instrucciones entre un par de paradas constituyen un grupo de instrucciones , independientemente de su agrupación, y deben estar libres de muchos tipos de dependencias de datos; este conocimiento permite al procesador ejecutar instrucciones en paralelo sin tener que realizar su propio análisis de datos complicado, ya que ese análisis ya se realizó cuando se escribieron las instrucciones.
Dentro de cada ranura, todas las instrucciones, excepto unas pocas, tienen predicados, lo que especifica un registro de predicado, cuyo valor (verdadero o falso) determinará si se ejecuta la instrucción. Las instrucciones predicadas que siempre deben ejecutarse tienen como predicado , que siempre se lee como verdadero.pr0
El lenguaje ensamblador IA-64 y el formato de instrucciones se diseñaron deliberadamente para que los escribieran principalmente compiladores, no humanos. Las instrucciones deben agruparse en paquetes de tres, lo que garantiza que las tres instrucciones coincidan con una plantilla permitida. Las instrucciones deben emitir paradas entre ciertos tipos de dependencias de datos, y las paradas también se pueden utilizar solo en lugares limitados según las plantillas permitidas.
El mecanismo de búsqueda puede leer hasta dos paquetes por ciclo de reloj desde la caché L1 hacia la tubería. Cuando el compilador puede aprovechar esto al máximo, el procesador puede ejecutar seis instrucciones por ciclo de reloj. El procesador tiene treinta unidades de ejecución funcionales en once grupos. Cada unidad puede ejecutar un subconjunto particular del conjunto de instrucciones , y cada unidad se ejecuta a una velocidad de una instrucción por ciclo a menos que la ejecución se detenga esperando datos. Si bien no todas las unidades de un grupo ejecutan subconjuntos idénticos del conjunto de instrucciones, las instrucciones comunes se pueden ejecutar en varias unidades.
Los grupos de unidades de ejecución incluyen:
Idealmente, el compilador puede agrupar las instrucciones en conjuntos de seis que se pueden ejecutar al mismo tiempo. Dado que las unidades de punto flotante implementan una operación de multiplicación-acumulación , una sola instrucción de punto flotante puede realizar el trabajo de dos instrucciones cuando la aplicación requiere una multiplicación seguida de una suma: esto es muy común en el procesamiento científico. Cuando ocurre, el procesador puede ejecutar cuatro FLOP por ciclo. Por ejemplo, el Itanium de 800 MHz tenía una calificación teórica de 3,2 GFLOPS y el Itanium 2 más rápido, a 1,67 GHz, tenía una calificación de 6,67 GFLOPS.
En la práctica, el procesador puede estar a menudo infrautilizado, y no todas las ranuras están ocupadas con instrucciones útiles debido, por ejemplo, a dependencias de datos o limitaciones en las plantillas de paquetes disponibles. El código más denso posible requiere 42,6 bits por instrucción, en comparación con los 32 bits por instrucción de los procesadores RISC tradicionales de la época, y las operaciones fallidas debido a ranuras desperdiciadas reducen aún más la densidad del código. No es práctico generar de forma óptima instrucciones adicionales para cargas especulativas y sugerencias para ramas y caché, porque un compilador no puede predecir el contenido de los diferentes niveles de caché en un sistema que ejecuta múltiples procesos y recibe interrupciones.
Desde 2002 hasta 2006, los procesadores Itanium 2 compartían una jerarquía de caché común. Tenían 16 KB de caché de instrucciones de nivel 1 y 16 KB de caché de datos de nivel 1. La caché L2 estaba unificada (tanto de instrucciones como de datos) y tiene 256 KB. La caché de nivel 3 también estaba unificada y variaba en tamaño desde 1,5 MB hasta 24 MB. La caché L2 de 256 KB contiene lógica suficiente para manejar operaciones de semáforo sin perturbar la unidad lógica aritmética (ALU) principal.
Se accede a la memoria principal a través de un bus a un chipset externo . El bus Itanium 2 se llamó inicialmente bus McKinley, pero ahora se lo suele llamar bus Itanium. La velocidad del bus ha aumentado de forma constante con los nuevos lanzamientos de procesadores. El bus transfiere 2×128 bits por ciclo de reloj, por lo que el bus McKinley de 200 MHz transfirió 6,4 GB/s y el bus Montecito de 533 MHz transfiere 17,056 GB/s [28]
Los procesadores Itanium lanzados antes de 2006 tenían soporte de hardware para la arquitectura IA-32 para permitir la compatibilidad con aplicaciones de servidor heredadas, pero el rendimiento para el código IA-32 era mucho peor que el del código nativo y también peor que el rendimiento de los procesadores x86 contemporáneos. En 2005, Intel desarrolló IA-32 Execution Layer (IA-32 EL), un emulador de software que proporciona un mejor rendimiento. Con Montecito, Intel eliminó el soporte de hardware para el código IA-32.
En 2006, con el lanzamiento de Montecito , Intel realizó una serie de mejoras en la arquitectura básica del procesador, entre ellas: [29]
Mantenimiento y desarrollo del sistema operativo Linux para la arquitectura Intel Itanium (IA-64)