stringtranslate.com

SPARC

Un microprocesador Sun UltraSPARC II (1997)

SPARC ( Scalable Processor ARChitecture ) es una arquitectura de conjunto de instrucciones de computadora de conjunto de instrucciones reducido (RISC) desarrollada originalmente por Sun Microsystems . [1] [2] Su diseño estuvo fuertemente influenciado por el sistema experimental Berkeley RISC desarrollado a principios de la década de 1980. Desarrollado por primera vez en 1986 y lanzado en 1987, [3] [2] SPARC fue uno de los primeros sistemas RISC comerciales más exitosos, y su éxito condujo a la introducción de diseños RISC similares de muchos proveedores durante las décadas de 1980 y 1990.

La primera implementación de la arquitectura original de 32 bits (SPARC V7) se utilizó en los sistemas de servidores y estaciones de trabajo Sun-4 de Sun, en sustitución de sus anteriores sistemas Sun-3 basados ​​en la serie de procesadores Motorola 68000. SPARC V8 añadió una serie de mejoras que formaban parte de la serie de procesadores SuperSPARC lanzada en 1992. SPARC V9, lanzada en 1993, introdujo una arquitectura de 64 bits y se lanzó por primera vez en los procesadores UltraSPARC de Sun en 1995. Más tarde, los procesadores SPARC se utilizaron en servidores de multiprocesamiento simétrico (SMP) y de acceso a memoria no uniforme ( CC-NUMA ) producidos por Sun, Solbourne y Fujitsu , entre otros.

El diseño fue entregado al grupo comercial SPARC International en 1989, y desde entonces su arquitectura ha sido desarrollada por sus miembros. SPARC International también es responsable de licenciar y promover la arquitectura SPARC, administrar las marcas comerciales SPARC (incluida SPARC, de la que es propietario) y proporcionar pruebas de conformidad . SPARC International tenía como objetivo hacer crecer la arquitectura SPARC para crear un ecosistema más grande; SPARC ha sido licenciado a varios fabricantes, incluidos Atmel , Bipolar Integrated Technology , Cypress Semiconductor , Fujitsu , Matsushita y Texas Instruments . Debido a SPARC International, SPARC es completamente abierto, no propietario y libre de regalías.

A partir de 2024, los últimos procesadores SPARC comerciales de gama alta son el SPARC64 XII de Fujitsu (presentado en septiembre de 2017 para su servidor SPARC M12) y el SPARC M8 de Oracle presentado en septiembre de 2017 para sus servidores de gama alta.

El 1 de septiembre de 2017, después de una serie de despidos que comenzaron en Oracle Labs en noviembre de 2016, Oracle dio por finalizado el diseño de SPARC después de completar el M8. Gran parte del grupo de desarrollo de núcleos de procesadores en Austin, Texas, fue despedido, al igual que los equipos de Santa Clara, California, y Burlington, Massachusetts. [4] [5]

Fujitsu también descontinuará su producción de SPARC (ya ha pasado a producir sus propias CPU basadas en ARM ), después de dos versiones "mejoradas" del antiguo servidor SPARC M12 de Fujitsu en 2020-22 (anteriormente planeado para 2021) y nuevamente en 2026-27, fin de la venta en 2029, de servidores UNIX y un año después para su mainframe y fin del soporte en 2034 "para promover la modernización del cliente". [6]

Características

La arquitectura SPARC estuvo fuertemente influenciada por los diseños RISC anteriores, incluyendo el RISC I y II de la Universidad de California, Berkeley y el IBM 801. Estos diseños RISC originales eran minimalistas, incluían la menor cantidad posible de funciones o códigos de operación y apuntaban a ejecutar instrucciones a una velocidad de casi una instrucción por ciclo de reloj . Esto los hacía similares a la arquitectura MIPS en muchos aspectos, incluyendo la falta de instrucciones como multiplicar o dividir. Otra característica de SPARC influenciada por este movimiento RISC temprano es la ranura de retardo de bifurcación .

El procesador SPARC normalmente contiene hasta 160 registros de propósito general . Según la especificación "Oracle SPARC Architecture 2015", una "implementación puede contener de 72 a 640 registros de 64 bits de propósito general". [7] En cualquier punto, solo 32 de ellos son inmediatamente visibles para el software: 8 son un conjunto de registros globales (uno de los cuales, g0 , está cableado a cero, por lo que solo siete de ellos se pueden usar como registros) y los otros 24 son de la pila de registros. Estos 24 registros forman lo que se llama una ventana de registro , y en la llamada/retorno de función, esta ventana se mueve hacia arriba y hacia abajo en la pila de registros. Cada ventana tiene ocho registros locales y comparte ocho registros con cada una de las ventanas adyacentes. Los registros compartidos se utilizan para pasar parámetros de función y devolver valores, y los registros locales se utilizan para retener valores locales en las llamadas de función.

El término "escalable" en SPARC se debe a que la especificación SPARC permite que las implementaciones escalen desde procesadores integrados hasta procesadores de servidor de gran tamaño, todos ellos compartiendo el mismo conjunto de instrucciones básicas (sin privilegios). Uno de los parámetros arquitectónicos que pueden escalar es el número de ventanas de registro implementadas; la especificación permite que se implementen de tres a 32 ventanas, por lo que la implementación puede optar por implementar las 32 para proporcionar la máxima eficiencia de la pila de llamadas , o implementar solo tres para reducir el coste y la complejidad del diseño, o implementar una cantidad entre ellas. Otras arquitecturas que incluyen características de archivo de registro similares son Intel i960 , IA-64 y AMD 29000 .

La arquitectura ha pasado por varias revisiones. En la versión 8, se le agregó la funcionalidad de multiplicación y división de hardware. [8] [9] Se agregaron 64 bits (direccionamiento y datos) a la especificación SPARC de la versión 9 publicada en 1994. [10]

En la versión 8 de SPARC, el archivo de registros de punto flotante tiene 16 registros de doble precisión . Cada uno de ellos se puede utilizar como dos registros de precisión simple , lo que proporciona un total de 32 registros de precisión simple. Un par de registros de doble precisión de números pares e impares se puede utilizar como un registro de precisión cuádruple , lo que permite tener 8 registros de precisión cuádruple. La versión 9 de SPARC agregó 16 registros de doble precisión más (a los que también se puede acceder como 8 registros de precisión cuádruple), pero no se puede acceder a estos registros adicionales como registros de precisión simple. Ninguna CPU SPARC implementa operaciones de precisión cuádruple en hardware a partir de 2024. [11]

Las instrucciones de suma y resta etiquetadas realizan sumas y restas sobre valores, verificando que los dos bits inferiores de ambos operandos sean 0 e informando de un desbordamiento si no lo son. Esto puede resultar útil en la implementación del tiempo de ejecución para ML , Lisp y lenguajes similares que podrían usar un formato de entero etiquetado.

El orden de bytes de la arquitectura SPARC V8 de 32 bits es puramente big-endian. La arquitectura SPARC V9 de 64 bits utiliza instrucciones big-endian, pero puede acceder a los datos en orden de bytes big-endian o little-endian, elegidos ya sea en el nivel de instrucción de la aplicación ( cargar-almacenar ) o en el nivel de página de memoria (a través de una configuración MMU). Este último se utiliza a menudo para acceder a datos desde dispositivos inherentemente little-endian, como los de los buses PCI.

Historia

Se han producido tres revisiones importantes de la arquitectura. La primera versión publicada fue la SPARC versión 7 (V7) de 32 bits en 1986. La SPARC versión 8 (V8), una definición mejorada de la arquitectura SPARC, se publicó en 1990. Las principales diferencias entre la V7 y la V8 fueron la adición de instrucciones de multiplicación y división de números enteros y una actualización de la aritmética de punto flotante de "precisión extendida" de 80 bits a la aritmética de " precisión cuádruple " de 128 bits. La SPARC V8 sirvió como base para el estándar IEEE 1754-1994, un estándar IEEE para una arquitectura de microprocesador de 32 bits.

SPARC versión 9 , la arquitectura SPARC de 64 bits, fue lanzada por SPARC International en 1993. Fue desarrollada por el Comité de Arquitectura SPARC, compuesto por Amdahl Corporation , Fujitsu , ICL , LSI Logic , Matsushita , Philips , Ross Technology , Sun Microsystems y Texas Instruments . Las especificaciones más nuevas siempre cumplen con la especificación completa SPARC V9 Nivel 1.

En 2002, Fujitsu y Sun publicaron la especificación de programación conjunta SPARC 1 (JPS1), que describe las funciones de los procesadores que se implementaron de forma idéntica en las CPU de ambas empresas ("Commonality"). Las primeras CPU que se ajustaron a la JPS1 fueron la UltraSPARC III de Sun y la SPARC64 V de Fujitsu. Las funcionalidades que no están cubiertas por la JPS1 se documentan para cada procesador en los "Suplementos de implementación".

A finales de 2003, se lanzó JPS2 para admitir CPU multinúcleo. Las primeras CPU que se ajustaron a JPS2 fueron UltraSPARC IV de Sun y SPARC64 VI de Fujitsu.

A principios de 2006, Sun publicó una especificación de arquitectura extendida, UltraSPARC Architecture 2005. Esta incluye no sólo las partes no privilegiadas y la mayoría de las partes privilegiadas de SPARC V9, sino también todas las extensiones de arquitectura desarrolladas a través de las generaciones de procesadores de UltraSPARC III, IV y IV+, así como las extensiones CMT a partir de la implementación de UltraSPARC T1 :

En 2007, Sun publicó una especificación actualizada, UltraSPARC Architecture 2007 , a la que cumplía la implementación de UltraSPARC T2 .

En diciembre de 2007, Sun también puso a disposición el RTL del procesador UltraSPARC T2 a través del proyecto OpenSPARC . [12] También se publicó bajo la licencia pública general GNU v2. [13] OpenSPARC T2 tiene 8 núcleos, 16 pipelines con 64 subprocesos.

En agosto de 2012, Oracle Corporation puso a disposición una nueva especificación, Oracle SPARC Architecture 2011 , que además de la actualización general de la referencia, agrega las extensiones del conjunto de instrucciones VIS 3 y el modo hiperprivilegiado a la especificación de 2007. [14]

En octubre de 2015, Oracle lanzó SPARC M7, el primer procesador basado en la nueva especificación Oracle SPARC Architecture 2015. [7] [15] Esta revisión incluye extensiones del conjunto de instrucciones VIS 4 y cifrado asistido por hardware y memoria segura de silicio (SSM). [16]

La arquitectura SPARC ha proporcionado compatibilidad binaria de aplicaciones continua desde la primera implementación de SPARC V7 en 1987 hasta las implementaciones de la arquitectura Sun UltraSPARC.

Entre las diversas implementaciones de SPARC, SuperSPARC y UltraSPARC-I de Sun fueron muy populares y se utilizaron como sistemas de referencia para los tests de rendimiento SPEC CPU95 y CPU2000. El UltraSPARC-II de 296 MHz es el sistema de referencia para el test de rendimiento SPEC CPU2006.

Arquitectura

SPARC es una arquitectura de carga-almacenamiento (también conocida como arquitectura de registro-registro ); a excepción de las instrucciones de carga/almacenamiento utilizadas para acceder a la memoria , todas las instrucciones operan en los registros, de acuerdo con los principios de diseño RISC.

Un procesador SPARC incluye una unidad de enteros (IU) que realiza operaciones de carga, almacenamiento y aritmética de enteros. [17] : 9  [10] : 15–16  Puede incluir una unidad de punto flotante (FPU) que realiza operaciones de punto flotante [17] : 9  [10] : 15–16  y, para SPARC V8, puede incluir un coprocesador (CP) que realiza operaciones específicas del coprocesador; la arquitectura no especifica qué funciones realizaría un coprocesador, además de las operaciones de carga y almacenamiento. [17] : 9 

Registros

La arquitectura SPARC tiene un esquema de ventanas de registro superpuestas. En cualquier instante, 32 registros de propósito general son visibles. Una variable de puntero de ventana actual ( CWP ) en el hardware apunta al conjunto actual. El tamaño total del archivo de registros no es parte de la arquitectura, lo que permite agregar más registros a medida que la tecnología mejora, hasta un máximo de 32 ventanas en SPARC V7 y V8, ya que CWP es de 5 bits y es parte del registro PSR .

En SPARC V7 y V8, el CWP generalmente se reducirá con la instrucción SAVE (usada por la instrucción SAVE durante la llamada al procedimiento para abrir un nuevo marco de pila y cambiar la ventana de registro), o se incrementará con la instrucción RESTORE (regresando a la llamada antes de regresar del procedimiento). Los eventos de trampa ( interrupciones , excepciones o instrucciones TRAP) y las instrucciones RETT (que regresan de trampas) también cambian el CWP . Para SPARC V9, el registro CWP se reduce durante una instrucción RESTORE y se incrementa durante una instrucción SAVE. Esto es lo opuesto del comportamiento de PSR.CWP en SPARC V8. Este cambio no tiene efecto en las instrucciones no privilegiadas.

Los registros SPARC se muestran en la figura de arriba.

También hay un registro Y sin ventana, utilizado por las instrucciones de multiplicación por pasos, multiplicación de enteros y división de enteros. [17] : 32 

Un procesador SPARC V8 con una FPU incluye 32 registros de punto flotante de 32 bits, cada uno de los cuales puede contener un número de punto flotante IEEE 754 de precisión simple . Un par par-impar de registros de punto flotante puede contener un número de punto flotante IEEE 754 de precisión doble, y un grupo de cuatro registros de punto flotante alineados en cuádruple puede contener un número de punto flotante IEEE 754 de precisión cuádruple. [17] : 10 

Un procesador SPARC V9 con una FPU incluye: [10] : 36–40 

Los registros están organizados como un conjunto de 64 registros de 32 bits, donde los primeros 32 se utilizan como registros de punto flotante de 32 bits, los pares pares-impares de los 64 registros se utilizan como registros de punto flotante de 64 bits y los grupos alineados cuádruples de cuatro registros de punto flotante se utilizan como registros de punto flotante de 128 bits.

Los registros de punto flotante no tienen ventanas; todos son registros globales. [10] : 36–40 

Formatos de instrucciones

Todas las instrucciones SPARC ocupan una palabra completa de 32 bits y comienzan en un límite de palabra. Se utilizan cuatro formatos, que se distinguen por los dos primeros bits. Todas las instrucciones aritméticas y lógicas tienen 2 operandos de origen y 1 operando de destino. [18] RD es el "registro de destino", donde se deposita la salida de la operación. La mayoría de las instrucciones SPARC tienen al menos este registro, por lo que se coloca cerca del "frente" del formato de instrucción. RS1 y RS2 son los "registros de origen", que pueden estar presentes o no, o ser reemplazados por una constante.

Instrucciones

Cargas y almacenes

Las instrucciones de carga y almacenamiento tienen un formato de tres operandos, es decir, tienen dos operandos que representan valores para la dirección y un operando para el registro en el que se leerá o escribirá. La dirección se crea sumando los dos operandos de dirección para producir una dirección. El segundo operando de dirección puede ser una constante o un registro. Las instrucciones de carga toman el valor en la dirección y lo colocan en el registro especificado por el tercer operando, mientras que las instrucciones de almacenamiento toman el valor en el registro especificado por el primer operando y lo colocan en la dirección. Para que esto sea más obvio, el lenguaje ensamblador indica los operandos de dirección utilizando corchetes con un signo más que separa los operandos, en lugar de utilizar una lista separada por comas. Ejemplos: [18]

ld [%L1+%L2],%L3 !carga el valor de 32 bits en la dirección %L1+%L2 y coloca el valor en %L3ld [%L1+8],%L2 !carga el valor en %L1+8 en %L2ld [%L1],%L2 !como arriba, pero sin desplazamiento, que es lo mismo que +%G0st %L1,[%I2] !almacena el valor en %L1 en la ubicación almacenada en %I2st %G0,[%I1+8] !borra la memoria en %I1+8

Debido al uso generalizado de datos que no son de 32 bits, como datos integrales de 16 bits u 8 bits o bytes de 8 bits en cadenas, existen instrucciones que cargan y almacenan medias palabras de 16 bits y bytes de 8 bits, así como instrucciones que cargan palabras de 32 bits. Durante una carga, esas instrucciones leerán solo el byte o la media palabra en la ubicación indicada y luego llenarán el resto del registro de destino con ceros (carga sin signo) o con el valor del bit más alto del byte o la media palabra (carga con signo). Durante un almacenamiento, esas instrucciones descartan los bits superiores en el registro y almacenan solo los bits inferiores. También existen instrucciones para cargar valores de doble precisión utilizados para aritmética de punto flotante , leyendo o escribiendo ocho bytes del registro indicado y el "siguiente", por lo que si el destino de una carga es L1, se establecerán L1 y L2. La lista completa de instrucciones de carga y almacenamiento para los registros de propósito general en SPARC de 32 bits es LD, ST, LDUB(byte sin signo), LDSB(byte con signo), LDUH(media palabra sin signo), LDSH(media palabra con signo), LDD(carga doble), STB(almacenamiento de byte), STH(almacenamiento de media palabra), STD(almacenamiento doble). [18]

En SPARC V9, los registros son de 64 bits, y la LDinstrucción, renombrada LDUW, borra los 32 bits superiores del registro y carga el valor de 32 bits en los 32 bits inferiores, y la STinstrucción, renombrada STW, descarta los 32 bits superiores del registro y almacena solo los 32 bits inferiores. La nueva LDSWinstrucción establece los bits superiores del registro en el valor del bit superior de la palabra y carga el valor de 32 bits en los bits inferiores. La nueva LDXinstrucción carga un valor de 64 bits en el registro y la STXinstrucción almacena los 64 bits del registro.

Las instrucciones LDF, LDDF, y LDQFcargan un valor de precisión simple, precisión doble o precisión cuádruple desde la memoria a un registro de punto flotante; las instrucciones STF, STDF, y STQFalmacenan un registro de punto flotante de precisión simple, precisión doble o precisión cuádruple en la memoria.

La instrucción de barrera de memoria , MEMBAR, cumple dos propósitos interrelacionados: articula restricciones de orden entre referencias de memoria y facilita el control explícito sobre la finalización de las referencias de memoria. Por ejemplo, todos los efectos de los almacenamientos que aparecen antes de la instrucción MEMBAR deben hacerse visibles para todos los procesadores antes de que se pueda ejecutar cualquier carga posterior a MEMBAR. [19]

Operaciones de ALU

Las instrucciones aritméticas y lógicas también utilizan un formato de tres operandos, donde los dos primeros son los operandos y el último es la ubicación donde se almacena el resultado. El operando del medio puede ser un registro o una constante entera con signo de 13 bits; los otros operandos son registros. Cualquiera de los operandos de registro puede apuntar a G0; apuntar el resultado a G0 descarta los resultados, que pueden usarse para pruebas. Algunos ejemplos incluyen: [18]

¡suma %L1,%L2,%L3! suma los valores en %L1 y %L2 y coloca el resultado en %L3añadir %L1,1,%L1 !incrementar %L1¡Agrega %G0,%G0,%L4! Limpia cualquier valor en %L4

La lista de instrucciones matemáticas es ADD, SUB, AND, OR, XOR, y versiones negadas ANDN, ORN, y XNOR. Una peculiaridad del diseño de SPARC es que la mayoría de las instrucciones aritméticas vienen en pares, con una versión que establece los bits del código de condición NZVC en el registro de estado , y la otra no los establece, siendo el valor predeterminado no establecer los códigos. Esto es para que el compilador tenga una forma de mover las instrucciones cuando intente llenar los espacios de retardo. Si uno quiere que se establezcan los códigos de condición, esto se indica añadiendo cca la instrucción: [18]

subcc %L1,10,%G0 !compara %L1 con 10 e ignora el resultado, pero establece las banderas

add y sub también tienen otro modificador, X, que indica si la operación debe establecer el bit de acarreo:

addx %L1,100,%L1 !suma 100 al valor en %L1 y rastrea el acarreo

SPARC V7 no tiene instrucciones de multiplicación o división, pero sí tiene MULSCC, que realiza un paso de una multiplicación probando un bit y sumando condicionalmente el multiplicando al producto. Esto se debió a que MULSCCpuede completar más de un ciclo de reloj de acuerdo con la filosofía RISC. SPARC V8 agregó instrucciones UMUL(multiplicación sin signo), SMUL(multiplicación con signo), UDIV(división sin signo) y SDIV(división con signo), con versiones que no actualizan los códigos de condición y versiones que sí lo hacen. MULSCCy las instrucciones de multiplicación usan el registro Y para almacenar los 32 bits superiores del producto; las instrucciones de división lo usan para almacenar los 32 bits superiores del dividendo. La RDYinstrucción lee el valor del registro Y en un registro de propósito general; la WRYinstrucción escribe el valor de un registro de propósito general en el registro Y. [17] : 32  SPARC V9 agregó MULX, que multiplica dos valores de 64 bits y produce un resultado de 64 bits, SDIVX, que divide un dividendo con signo de 64 bits por un divisor con signo de 64 bits y produce un cociente con signo de 64 bits, y UDIVX, que divide un dividendo sin signo de 64 bits por un divisor sin signo de 64 bits y produce un cociente con signo de 64 bits; ninguna de esas instrucciones utiliza el registro Y. [10] : 199 

Derivación

Las ramificaciones condicionales prueban los códigos de condición en un registro de estado , como se ve en muchos conjuntos de instrucciones, como la arquitectura IBM System/360 y sus sucesores y la arquitectura x86 . Esto significa que una prueba y una ramificación se realizan normalmente con dos instrucciones; la primera es una instrucción ALU que establece los códigos de condición, seguida de una instrucción de ramificación que examina uno de esos indicadores. SPARC no tiene instrucciones de prueba especializadas; las pruebas se realizan utilizando instrucciones ALU normales con el destino establecido en %G0. Por ejemplo, para probar si un registro contiene el valor 10 y luego ramificarse al código que lo maneja, se haría lo siguiente:

subcc %L1,10,%G0 !resta 10 de %L1, estableciendo el indicador cero si %L1 es 10¡sea WASEQUAL! si el indicador cero está establecido, bifurca a la dirección marcada WASEQUAL

En una instrucción de bifurcación condicional, el campo icc o fcc especifica la condición que se está probando. El campo de desplazamiento de 22 bits es la dirección, relativa a la PC actual, del objetivo, en palabras, de modo que las bifurcaciones condicionales pueden avanzar o retroceder hasta 8 megabytes. El bit ANNUL (A) se utiliza para eliminar algunas ranuras de retardo. Si es 0 en una bifurcación condicional, la ranura de retardo se ejecuta de la manera habitual. Si es 1, la ranura de retardo solo se ejecuta si se toma la bifurcación. Si no se toma, se omite la instrucción que sigue a la bifurcación condicional.

Hay una amplia variedad de ramas condicionales: BA(rama siempre, esencialmente un jmp), BN(rama nunca), BE(igual a), BNE(no igual a), BL(menor que), BLE(menor o igual), BLEU(menor o igual, sin signo), BG(mayor), BGE(mayor o igual), BGU(mayor sin signo), BPOS(positivo), BNEG(negativo), BCC(acarreo limpio), ( BCSconjunto de acarreo BVClimpio), BVS(conjunto de desbordamiento). [17] : 119–120 

La FPU y el CP tienen conjuntos de códigos de condición separados de los códigos de condición enteros y entre sí; se definieron dos conjuntos adicionales de instrucciones de bifurcación para probar esos códigos de condición. Agregar una F al principio de la instrucción de bifurcación en la lista anterior realiza la prueba contra los códigos de condición de la FPU, [17] : 121–122  mientras que, en SPARC V8, agregar una C prueba los indicadores en el CP que de otra manera no estaría definido. [17] : 123–124 

La instrucción (saltar a subrutina) utiliza un desplazamiento de palabra relativo al contador de programa deCALL 30 bits . Como la dirección de destino especifica el comienzo de una palabra, no de un byte, 30 bits es todo lo que se necesita para alcanzar cualquier dirección en el espacio de direcciones de 4 gigabytes. [18] La instrucción CALL deposita la dirección de retorno en el registro R15, también conocido como registro de salida O7.

La JMPLinstrucción (saltar y enlazar) es una instrucción de tres operandos, con dos operandos que representan valores para la dirección de destino y un operando para un registro en el que se deposita la dirección de retorno. La dirección se crea sumando los dos operandos de dirección para producir una dirección de 32 bits. El segundo operando de dirección puede ser una constante o un registro.

Constantes grandes

Como el código de operación de la instrucción ocupa algunos bits de la palabra de instrucción de 32 bits, no hay forma de cargar una constante de 32 bits utilizando una sola instrucción. Esto es importante porque las direcciones se manipulan a través de registros y son de 32 bits. Para facilitar esto, la SETHIinstrucción de propósito especial copia su operando inmediato de 22 bits en los 22 bits de orden superior de cualquier registro especificado y establece cada uno de los 10 bits de orden inferior en 0. En el uso general, SETHI va seguido de una instrucción o con solo los 10 bits inferiores del valor establecido. Para facilitar esto, el ensamblador incluye las macros %hi(X)y %lo(X). Por ejemplo: [18]

sethi %hi(0x89ABCDEF),%L1 !establece los 22 bits superiores de L1o %L1,%lo(0x89ABCDEF),%L1 !establece los 10 bits inferiores de L1 mediante ORing

Las macros hi y lo se ejecutan en tiempo de ensamblaje, no en tiempo de ejecución, por lo que no afectan al rendimiento y, al mismo tiempo, dejan más claro que L1 se establece en un solo valor, no en dos valores no relacionados. Para que esto sea aún más fácil, el ensamblador también incluye una "instrucción sintética", , setque realiza estas dos operaciones en una sola línea:

establecer 0x89ABCDEF,%L1

Esto genera las dos instrucciones anteriores si el valor es mayor a 13 bits, de lo contrario emitirá una sola ldcon el valor. [18]

Instrucciones sintéticas

Como se señaló anteriormente, el ensamblador SPARC utiliza "instrucciones sintéticas" para facilitar las tareas de codificación habituales. Entre otros ejemplos, se incluyen los siguientes: [18]

Licenciatarios de arquitectura SPARC

Intel era el único productor del 80386 , lo que lo hacía muy caro y hacía que la industria desconfiara de las CPU de un solo proveedor . Cuando Sun anunció SPARC en 1987, la empresa afirmó que estaría disponible en múltiples fuentes. Fujitsu fue el primer proveedor de SPARC y Cypress Semiconductor fue el segundo licenciatario; a partir de febrero de 1989, sus CPU SPARC estaban disponibles, al igual que la FPU de Texas Instruments. [20] Las siguientes organizaciones han licenciado la arquitectura SPARC:

Implementaciones

Notas :

  1. ^ ab Subprocesos por núcleo × número de núcleos
  2. ^ Fujitsu, LSI Logic , Weitek, Texas Instruments, Cypress y Temic produjeron varias implementaciones de SPARC V7 . Un procesador SPARC V7 generalmente constaba de varios chips discretos, que normalmente comprendían una unidad entera (IU), una unidad de punto flotante (FPU), una unidad de gestión de memoria (MMU) y una memoria caché. Por el contrario, el TSC695 de Atmel (ahora Microchip Technology) es una implementación de SPARC V7 de un solo chip.
  3. ^ @ 167 MHz
  4. ^ @ 250 MHz
  5. ^ @ 400 MHz
  6. ^ @ 440 MHz
  7. ^ máx. a 500 MHz
  8. ^ @ 1200 MHz
  9. ^ excluyendo buses de E/S
  10. ^ nominal; especificación de 100 a 424 MHz dependiendo de las capacidades de RAM adjuntas

Compatibilidad con sistemas operativos

Las máquinas SPARC generalmente han utilizado SunOS , Solaris , JavaOS u OpenSolaris de Sun , incluidos los derivados illumos y OpenIndiana , pero también se han utilizado otros sistemas operativos , como NeXTSTEP , RTEMS , FreeBSD , OpenBSD , NetBSD y Linux .

En 1993, Intergraph anunció un puerto de Windows NT a la arquitectura SPARC, [47] pero luego fue cancelado.

En octubre de 2015, Oracle anunció una "plataforma de referencia Linux para SPARC". [48]

Implementaciones de código abierto

Existen varias implementaciones de código totalmente abierto de la arquitectura SPARC:

También existe un simulador de código totalmente abierto para la arquitectura SPARC:

Supercomputadoras

Para cargas HPC, Fujitsu construye procesadores SPARC64 fx especializados con un nuevo conjunto de extensiones de instrucciones, llamado HPC-ACE (High Performance Computing – Arithmetic Computational Extensions).

El ordenador K de Fujitsu ocupó el puesto número 1 en las listas TOP500 de junio de 2011 y noviembre de 2011. Combina 88.128 CPU SPARC64 VIIIfx , cada una con ocho núcleos, para un total de 705.024 núcleos, casi el doble que cualquier otro sistema en el TOP500 en ese momento. El ordenador K era más potente que los siguientes cinco sistemas de la lista combinados, y tenía la relación rendimiento-potencia más alta de cualquier sistema de supercomputadora. [49] También ocupó el puesto número 6 en la lista Green500 de junio de 2011, con una puntuación de 824,56 MFLOPS/W. [50] En la publicación de noviembre de 2012 de TOP500 , el ordenador K ocupó el puesto número 3, utilizando con diferencia la mayor potencia de los tres primeros. [51] Ocupó el puesto número 85 en la publicación correspondiente de Green500 . [52] Los procesadores HPC más nuevos, IXfx y XIfx , se incluyeron en las recientes supercomputadoras PRIMEHPC FX10 y FX100.

Tianhe-2 ( número 1 en el TOP500 a noviembre de 2014 [53] ) tiene varios nodos con procesadores basados ​​en OpenSPARC Galaxy FT-1500 desarrollados en China. Sin embargo, esos procesadores no contribuyeron a la puntuación LINPACK . [54] [55]

Véase también

Referencias

  1. ^ abc "Fujitsu llevará a ARM al reino de lo superrápido". The CPU Shack Museum . 21 de junio de 2016. Archivado desde el original el 30 de junio de 2019. Consultado el 30 de junio de 2019 .
  2. ^ abcd «Cronología». SPARC International . Archivado desde el original el 24 de abril de 2019. Consultado el 30 de junio de 2019 .
  3. ^ ab "Fujitsu SPARC". cpu-collection.de . Archivado desde el original el 6 de agosto de 2016 . Consultado el 30 de junio de 2019 .
  4. ^ Vaughan-Nichols, Steven J. (5 de septiembre de 2017). «Se acaba el sol: Oracle cierra las últimas líneas de productos de Sun». ZDNet . Archivado desde el original el 10 de septiembre de 2017. Consultado el 11 de septiembre de 2017 .
  5. ^ Nichols, Shaun (31 de agosto de 2017). «Oracle finalmente decide dejar de prolongar lo inevitable y comienza con los despidos de hardware». The Register . Archivado desde el original el 12 de septiembre de 2017. Consultado el 11 de septiembre de 2017 .
  6. ^ "Hoja de ruta: Fujitsu Global". www.fujitsu.com . Consultado el 15 de febrero de 2022 .
  7. ^ ab "Arquitectura Oracle SPARC 2015: Una arquitectura... Múltiples implementaciones innovadoras" (PDF) . Borrador D1.0.0. 12 de enero de 2016. Archivado (PDF) del original el 24 de abril de 2016 . Consultado el 13 de junio de 2016 . IMPL. DEP. #2-V8: Una implementación de la arquitectura Oracle SPARC puede contener de 72 a 640 registros R de 64 bits de propósito general. Esto corresponde a una agrupación de los registros en conjuntos MAXPGL + 1 de registros R globales más una pila circular de conjuntos N_REG_WINDOWS de 16 registros cada uno, conocidos como ventanas de registro. La cantidad de ventanas de registro presentes (N_REG_WINDOWS) depende de la implementación, dentro del rango de 3 a 32 (inclusive).
  8. ^ "Opciones SPARC", Uso de la colección de compiladores GNU (GCC), GNU , archivado desde el original el 9 de enero de 2013 , consultado el 8 de enero de 2013
  9. ^ Optimizaciones SPARC con GCC, OSNews , 23 de febrero de 2004, archivado desde el original el 23 de mayo de 2013 , consultado el 8 de enero de 2013
  10. ^ abcdef Weaver, DL; Germond, T., eds. (1994). Manual de arquitectura SPARC, versión 9. SPARC International, Inc.: Prentice Hall . ISBN 0-13-825001-4. Consultado el 27 de mayo de 2023 .
  11. ^ "Comportamiento e implementación de SPARC". Guía de cálculo numérico: Sun Studio 10. Sun Microsystems, Inc. 2004. Archivado desde el original el 25 de enero de 2022. Consultado el 24 de septiembre de 2011. Sin embargo , existen cuatro situaciones en las que el hardware no completará correctamente una instrucción de punto flotante: ... La instrucción no está implementada por el hardware (como ... instrucciones de precisión cuádruple en cualquier FPU SPARC).
  12. ^ "Sun acelera el crecimiento del ecosistema UltraSPARC CMT". Sun Microsystems. Archivado desde el original el 26 de enero de 2008.
  13. ^ "Preguntas frecuentes sobre OpenSPARC". Oracle. Archivado desde el original el 17 de octubre de 2012. Consultado el 20 de marzo de 2021 .
  14. ^ "Oracle SPARC Architecture 2011" (PDF) , Oracle Corporation , 21 de mayo de 2014, archivado (PDF) del original el 24 de septiembre de 2015 , consultado el 25 de noviembre de 2015
  15. ^ Soat, John. «Innovación SPARC M7». Sitio web de Oracle . Oracle Corporation . Archivado desde el original el 5 de septiembre de 2015. Consultado el 13 de octubre de 2015 .
  16. ^ "Software en Silicon Cloud - Oracle". www.oracle.com . Archivado desde el original el 21 de enero de 2019 . Consultado el 21 de enero de 2019 .
  17. ^ abcdefghi Manual de arquitectura SPARC, versión 8. SPARC International, Inc. 1992. Consultado el 27 de mayo de 2023 .
  18. ^ abcdefghi "Instrucciones fundamentales de SPARC".
  19. ^ "SPARC64 IXfx Extensions Fujitsu Limited Ver 12, 2 de diciembre de 2013" (PDF) . págs. 103–104 . Consultado el 17 de diciembre de 2023 .
  20. ^ abcdef Marshall, Trevor; Tazelaar, Jane Morrill (febrero de 1989). "Worth the RISC". BYTE . McGraw-Hill . págs. 245–249 . Consultado el 8 de octubre de 2024 .
  21. ^ "Floodgap Retrobits presenta el Solbourne Solace: un santuario para el SPARC olvidado". www.floodgap.com . Archivado desde el original el 1 de diciembre de 2020 . Consultado el 14 de enero de 2020 .
  22. ^ Sager, D.; Hinton, G.; Upton, M.; Chappell, T.; Fletcher, TD; Samaan, S.; Murray, R. (2001). "Un microprocesador IA32 CMOS de 0,18 μm con una unidad de ejecución de enteros de 4 GHZ". Conferencia internacional IEEE sobre circuitos de estado sólido de 2001. Compendio de artículos técnicos. ISSCC (n.º de cat. 01CH37177) . San Francisco, CA, EE. UU.: IEEE. págs. 324–325. doi :10.1109/ISSCC.2001.912658. ISBN . 978-0-7803-6608-4.
  23. ^ Características y especificaciones principales de FX1 (PDF) , Fujitsu , 19 de febrero de 2008, archivado (PDF) del original el 18 de enero de 2012 , consultado el 6 de diciembre de 2011
  24. ^ Tremblay, Marc ; Chaudhry, Shailender (19 de febrero de 2008), "Un procesador SPARC(R) CMT de tercera generación de 65 nm, 16 núcleos y 32 subprocesos más 32 subprocesos Scout" (PDF) , OpenSPARC , Sun Microsystems , archivado desde el original el 16 de enero de 2013 , consultado el 6 de diciembre de 2011
  25. ^ Vance, Ashlee (15 de junio de 2009), "Se dice que Sun cancelará el proyecto Big Chip", The New York Times , archivado desde el original el 4 de noviembre de 2011 , consultado el 23 de mayo de 2010
  26. ^ "Fujitsu muestra el SPARC64 VII", heise online , 28 de agosto de 2008, archivado desde el original el 23 de mayo de 2013 , consultado el 6 de diciembre de 2011
  27. ^ Barak, Sylvie (14 de mayo de 2009), "Fujitsu presenta la CPU más rápida del mundo", The Inquirer , archivado desde el original el 17 de mayo de 2009 , consultado el 6 de diciembre de 2011{{citation}}: CS1 maint: URL no apta ( enlace )
  28. ^ "Procesador Sparc T3" (PDF) , Oracle Corporation , archivado (PDF) del original el 24 de abril de 2016 , consultado el 6 de diciembre de 2011
  29. ^ Morgan, Timothy Prickett (3 de diciembre de 2010), "Ellison: Sparc T4 llegará el año que viene", The Register , archivado desde el original el 7 de marzo de 2012 , consultado el 6 de diciembre de 2011
  30. ^ "Arquitectura de servidores SPARC Enterprise serie M" (PDF) , Fujitsu , abril de 2011, archivado (PDF) del original el 4 de marzo de 2016 , consultado el 5 de noviembre de 2011
  31. ^ Morgan, Timothy Prickett (22 de agosto de 2011), "El chip Sparc T4 de Oracle", The Register , archivado desde el original el 30 de noviembre de 2011 , consultado el 6 de diciembre de 2011
  32. ^ Morgan, Timothy Prickett (21 de noviembre de 2011), "Fujitsu presenta el espectacular procesador Sparc64 de 16 núcleos", The Register , archivado desde el original el 24 de noviembre de 2011 , consultado el 8 de diciembre de 2011
  33. ^ "Fujitsu lanza la supercomputadora PRIMEHPC FX10", Fujitsu , 7 de noviembre de 2011, archivado desde el original el 18 de enero de 2012 , consultado el 3 de febrero de 2012
  34. ^ "Descargar Ixfx" (PDF) . fujitsu.com. Archivado (PDF) del original el 18 de mayo de 2015 . Consultado el 17 de mayo de 2015 .
  35. ^ "Imágenes de SPARC64" (PDF) . fujitsu.com. Archivado (PDF) del original el 22 de abril de 2016 . Consultado el 29 de agosto de 2017 .
  36. ^ "Productos Oracle" (PDF) . oracle.com. Archivado (PDF) del original el 8 de marzo de 2017 . Consultado el 29 de agosto de 2017 .
  37. ^ "Productos Oracle SPARC" (PDF) . oracle.com. Archivado (PDF) del original el 26 de septiembre de 2018 . Consultado el 29 de agosto de 2017 .
  38. ^ "Fujitsu Presentation pdf" (PDF) . fujitsu.com. Archivado (PDF) del original el 22 de abril de 2016 . Consultado el 29 de agosto de 2017 .
  39. ^ "Fujitsu Global Images" (PDF) . fujitsu.com. Archivado desde el original (PDF) el 18 de mayo de 2015 . Consultado el 29 de agosto de 2017 .
  40. ^ "M7: Next Generation SPARC. Hotchips 26" (PDF) . swisdev.oracle.com. Archivado (PDF) del original el 31 de octubre de 2014 . Consultado el 12 de agosto de 2014 .
  41. ^ "Arquitectura de servidores SPARC T7 y SPARC M7 de Oracle" (PDF) . oracle.com. Archivado (PDF) del original el 6 de noviembre de 2015 . Consultado el 10 de octubre de 2015 .
  42. ^ Vinaik, Basant; Puri, Rahoul (24 de agosto de 2015). "Hot Chips – 23–25 de agosto de 2015 – Día 1 de la conferencia – Procesador Sonoma de Oracle: procesador SPARC avanzado de bajo costo para cargas de trabajo empresariales" (PDF) . hotchips.org. Archivado (PDF) del original el 9 de octubre de 2022 . Consultado el 25 de enero de 2022 .
  43. ^ "Planes revelados: Oracle incluye Sparc M7 e InfiniBand en chips 'Sonoma' más económicos". theregister.co.uk. Archivado desde el original el 29 de agosto de 2017. Consultado el 29 de agosto de 2017 .
  44. ^ "Documentos de Fujitsu" (PDF) . fujitsu.com. Archivado (PDF) del original el 29 de agosto de 2017 . Consultado el 29 de agosto de 2017 .
  45. ^ "Los nuevos sistemas SPARC de Oracle ofrecen entre 2 y 7 veces más rendimiento, capacidades de seguridad y eficiencia que los sistemas basados ​​en Intel". oracle.com. Archivado desde el original el 18 de septiembre de 2017. Consultado el 18 de septiembre de 2017 .
  46. ^ "Procesador SPARC M8" (PDF) . oracle.com. Archivado (PDF) del original el 28 de febrero de 2019 . Consultado el 18 de septiembre de 2017 .
  47. ^ McLaughlin, John (7 de julio de 1993), "Intergraph to Port Windows NT to SPARC", The Florida SunFlash , 55 (11), archivado desde el original el 23 de julio de 2014 , consultado el 6 de diciembre de 2011
  48. ^ Proyecto: Linux para SPARC - oss.oracle.com, 12 de octubre de 2015, archivado desde el original el 8 de diciembre de 2015 , consultado el 4 de diciembre de 2015
  49. ^ "TOP500 List (1-100)", TOP500 , junio de 2011, archivado desde el original el 23 de junio de 2011 , consultado el 6 de diciembre de 2011
  50. ^ "The Green500 List", Green500 , junio de 2011, archivado desde el original el 3 de julio de 2011
  51. ^ "Top500 List – November 2012 | TOP500 Supercomputer Sites", TOP500 , noviembre de 2012, archivado desde el original el 13 de noviembre de 2012 , consultado el 8 de enero de 2013
  52. ^ "The Green500 List – November 2012 | The Green500", Green500 , noviembre de 2012, archivado desde el original el 6 de junio de 2016 , consultado el 8 de enero de 2013
  53. ^ "Tianhe-2 (MilkyWay-2)", TOP500 , mayo de 2015, archivado desde el original el 26 de mayo de 2015 , consultado el 27 de mayo de 2015
  54. ^ Keane, Andy, "Tesla Supercomputing" ( mp4 ) , Nvidia , archivado del original el 25 de febrero de 2021 , consultado el 6 de diciembre de 2011
  55. ^ Thibodeau, Patrick (4 de noviembre de 2010). «EE. UU. afirma que China está construyendo una supercomputadora 'enteramente autóctona'». Computerworld . Archivado desde el original el 11 de octubre de 2012. Consultado el 28 de agosto de 2017 .

Enlaces externos