Logotipo de Zephyrnet

Personalización de procesadores

Fecha:

El diseño, la verificación y la implementación de un procesador es la competencia central de algunas empresas, pero otras solo quieren crear un procesador pequeño de la manera más rápida y económica posible. ¿Qué herramientas y opciones existen?

Los procesadores van desde núcleos muy pequeños y simples que están profundamente integrados en los productos hasta aquellos que operan a las velocidades de reloj y rendimientos más altos posibles en los centros de datos. En algunos casos, pueden utilizar el mismo set de instrucciones arquitectura (ISA), diferenciaba únicamente la microarquitectura. Otras veces, la arquitectura del procesador está muy ajustada para una sola aplicación u optimizada para condiciones muy específicas. Si bien hay una cantidad infinita de posibles procesadores, solo hay unas pocas formas de diseñarlos e implementarlos.

“Un servidor, donde tienes que ejecutar aplicaciones arbitrarias a muy alta velocidad, es un juego diferente de un SoC portátil”, dice Gert Goossens, director senior de herramientas ASIP en Sinopsis. “Es posible que tenga un ISA similar, pero la implementación dependerá en gran medida de la tecnología de proceso que pueda pagar y de las frecuencias de reloj que desee lograr. Estos elementos están impulsados ​​por su producto o su diseño, y esos elementos determinan qué implementaciones de microarquitectura desea tener. El desafío es hacer el análisis de compensación para descubrir qué es lo mejor para su dominio de aplicación”.

Una talla única para todos es un escollo de diseño común. “Por ejemplo, no se puede esperar crear un núcleo impulsado por las cargas de trabajo del cliente para que funcione bien con las cargas de trabajo nativas de la nube, o un núcleo centrado en HPC que funcione con las cargas de trabajo nativas de la nube”, dice Jeff Wittich, director de productos de Ampere. “Otro es subestimar la cantidad de ajustes finos de la arquitectura central que se requiere para brindar liderazgo en desempeño y eficiencia. Se necesita un equipo de diseño extremadamente capacitado y experimentado para crear un procesador de clase mundial que esté completamente validado en las fases previa y posterior al silicio para su uso previsto”.

Para otras aplicaciones, un producto estándar puede ser suficiente. "Si un bloque de IP preexistente cumple con su PPA y objetivos de rendimiento, ese es el camino menos riesgoso", dice George Wall, director de marketing de productos, IP del procesador Tensilica Xtensa en Cadencia. “Una vez que va más allá de eso, donde el estándar no cumple con los requisitos, es cuando los clientes comienzan a ver cómo personalizar un procesador. Los criterios incluirían requisitos de rendimiento, requisitos de rendimiento de datos y qué tipo de algoritmos se ejecutarán en el procesador. ¿Qué otro software se ejecutará en el procesador, como RTOS y otros componentes similares? ¿Y qué soporte de herramientas se necesitará, tanto para mis propios propósitos de desarrollo como para los propósitos de desarrollo de mi usuario final? Esos le brindan los requisitos que necesita para mapear, y luego es una cuestión de qué tan rápido puede explorar varias implementaciones. ¿Qué tan fácil es para mí cambiar la profundidad de la tubería? ¿Qué tan fácil es para mí seleccionar o anular la selección de instrucciones comunes como multiplicar o dividir u operaciones de coma flotante? Y qué fácil es para mí agregar recursos al procesador, ya sean instrucciones, registros o incluso si son interfaces. ¿Qué tan rápido puedo hacer eso y cómo se ve afectado mi software al hacerlo?

Arquitectura y microarquitectura
En general, obtiene rendimiento a través de la paralelización o la especialización. Obtiene la especialización principalmente de la arquitectura, mientras que obtiene la paralelización principalmente de la microarquitectura. Entonces, ¿cómo equilibras esos dos? ¿Debería la gente considerar primero cambiar la arquitectura o la microarquitectura?

La especialización ha sido durante mucho tiempo un tema de debate. “A principios de los años 80, hubo una discusión entre RISC y CISC”, dice Michael Frank, arquitecto jefe de IP de Arteris. “En aquel entonces, Dave Patterson se puso del lado de RISC y la industria lo siguió. A medida que aumentamos la velocidad del reloj, las cosas se pusieron más difíciles y empezamos a chocar contra la pared de la memoria. Hoy, CISC nuevamente tiene una ventaja, porque lleva más trabajo al núcleo del procesador en una sola instrucción”.

Para la mayoría de las personas, cambiar la arquitectura significa cambiar el conjunto de instrucciones. “Esto es mucho más fácil para la mayoría de las personas”, dice Rupert Baines, director de marketing de Codasip. “Obtienes la mayoría de los beneficios, porque puedes obtener una aceleración masiva. Y es mucho más fácil de verificar. Una vez que comienzas a profundizar en la microarquitectura, debes considerar cómo vas a verificarla. Si se apega a los cambios de ISA, entonces tiene un simulador que comprende la nueva instrucción. Está diseñado dentro de la herramienta, para que pueda generar la variante, la UVM para esa instrucción, etc.”

Los cambios de microarquitectura pueden ser complicados. “Cambiar la microarquitectura subyacente es potencialmente peligroso”, dice Cadence's Wall. “No es algo que quieras hacer a menos que tengas una comprensión completa de cómo esos cambios en la microarquitectura se reflejarán en las herramientas de software, como los depuradores, así como en el software de nivel superior, como nuestros sistemas operativos. El software de plomería básico que se encuentra encima de cada procesador integrado, entre la aplicación y el núcleo, es muy sensible a la microarquitectura, al igual que los sistemas operativos, los compiladores y los depuradores. Esos son los tipos de compensaciones que, si el cliente quiere cambiar la microarquitectura, realmente necesita comprender el impacto”.

Para contener esos riesgos de verificación, algunos grupos de la industria están considerando usar un procesador base más un acelerador al que se accede a través de una interfaz. “Tenemos clientes que desean comenzar con una arquitectura RISC-V, pero también necesitan palabras de instrucción mucho más amplias”, dice Goossens de Synopsys. “Por lo general, van en la dirección de una arquitectura VLIW, pero es posible que tenga una ranura escalar en su VLIW que sea básicamente la arquitectura RISC-V completa. Luego tiene espacios adicionales de emisión paralela, donde va a más operaciones paralelas. Puede continuar usando mucho del ecosistema RISC-V, pero para aplicaciones de alto rendimiento, obtiene un aumento de rendimiento de las extensiones paralelas que creó junto a él”.

Grados de personalización
Hay muchos niveles de personalización, que van desde la selección de una pieza de IP prediseñada hasta un diseño totalmente personalizado. Entre ellos:

  • Bloque de IP preexistente
  • Bloques de IP que permiten una cierta cantidad de personalización
  • Configuración basada en herramientas y base de personalización en plantillas
  • Herramientas que permiten describir procesadores arbitrarios tanto a nivel de arquitectura como de microarquitectura
  • Diseño totalmente personalizado.

Dentro de cada una de esas categorías, existen varios sabores y cuentan con el respaldo de varias empresas y herramientas.

“Para diseñar un núcleo de procesador de alto rendimiento, se debe usar una combinación de herramientas de síntesis y diseño manual”, dice Wittich de Ampere. “Es poco probable que algún procesador generado automáticamente satisfaga las necesidades de las cargas de trabajo nativas de la nube que tienen características únicas y demandas estrictas en cuanto a latencia y rendimiento. Siempre habrá rendimiento y eficiencia sobre la mesa si lo hace. Cada aspecto del núcleo, como el tamaño de la TLB o el algoritmo de predicción de rama, puede tener un gran impacto en el rendimiento de la carga de trabajo real y debe optimizarse cuidadosamente para el uso específico del producto”.

Los procesadores de alto rendimiento tienden a utilizar todos los medios posibles para la optimización, y luego estos pueden suministrarse como bloques de IP. “Las funciones de línea de base para habilitar tecnologías como la ejecución especulativa tienen implementaciones bastante diferentes según el objetivo de rendimiento, ya que tales estructuras no se escalan para siempre y necesitan diferentes formas según sus tamaños”, dice Fred Piry, arquitecto principal de CPU y miembro de Brazo. “Tomando la ejecución especulativa como ejemplo. Tratar de abordar una ventana fuera de servicio de 20 ciclos para una CPU de dos problemas requiere una microarquitectura que es totalmente diferente de una CPU capaz de ejecutarse especulativamente a través de 600 instrucciones o más. Para cubrir todos los puntos de rendimiento posibles, una sola CPU configurable no es sostenible, y esta es la razón por la que Arm crea diferentes microarquitecturas que cubren múltiples requisitos”.

Hay límites a lo lejos que puede tomar cualquier técnica. “Hay un rendimiento decreciente de la inversión”, dice Hunglin Hsu, vicepresidente de ingeniería de Arteris IP. “Solo tiene unos pocos registros arquitectónicos, por lo que, al final del día, la dependencia del registro le impedirá retirar tantas instrucciones como las que envía. A medida que construye máquinas de despacho cada vez más grandes, la frecuencia de su reloj comienza a disminuir. Preferiría ir a multinúcleo en lugar de construir un núcleo superescalar ancho gigantesco. Y cuando se trata de multinúcleo, dos cosas son las más importantes. Uno es el programa de subprocesos en el sistema operativo. Necesita saber la afinidad de la CPU. Necesita asignar un hilo a un núcleo que esté cerca de la memoria. La otra cosa que es importante es el tejido coherente”.

Muchas cosas se interrelacionan en este nivel de optimización. “Las funciones, como la ejecución especulativa o la emisión múltiple, están todas vinculadas entre sí y no existe una única opción de diseño para cada punto de rendimiento”, dice Arm's Piry. “Por ejemplo, sería contraproducente aumentar el paralelismo de ejecución sin aumentar, de igual forma, la capacidad de la CPU para ejecutar instrucciones de forma especulativa. El número de etapas de canalización determina la frecuencia de reloj máxima que alcanzará la CPU, y la frecuencia tiene una implicación directa en el rendimiento. El número de etapas de canalización tiene una implicación directa en la pérdida de rendimiento en la que incurre una predicción errónea de rama. Cuanto más larga sea la canalización, mayor será el costo de una predicción errónea. Como tal, un arquitecto de CPU deberá comprender las posibles estructuras críticas de tiempo de su diseño y luego encontrar el mejor compromiso entre frecuencia, área y potencia. Por lo tanto, la etapa de canalización debe definirse por adelantado; de lo contrario, la configuración se vuelve compleja”.

Construyendo desde una base
La introducción de la RISC-V ISA ha despertado interés en el término medio cuando se trata de diseño de procesador. "RISC-V ciertamente tiene muchos beneficios, ya que tiene una base de conjunto de instrucciones común y define una arquitectura común", dice Wall. “Define un cierto conjunto de reglas básicas, de modo que los proveedores de IP y los estudiantes universitarios no tengan que reinventar la rueda. No tienen que crear el conjunto de instrucciones o crear modelos de gestión de memoria, u otras grandes cosas que están en el mundo RISC-V. Pero en términos de apariencia del procesador, en realidad puede ser tan simple como un pequeño microcontrolador de dos etapas o un núcleo masivo de alto rendimiento. El RISC-V ISA se puede utilizar en cualquiera de los dos. Fue diseñado con esa escalabilidad en mente”.

En muchos casos, los generadores de procesadores generan automáticamente una implementación funcional de un procesador, en función de la personalización especificada por el usuario de un diseño de procesador básico. El proveedor del generador habrá diseñado una serie de microarquitecturas básicas y el cliente puede seleccionar entre un conjunto limitado de opciones de personalización, como la cantidad de etapas de tubería o el tamaño de los cachés.

“Este enfoque funciona bien cuando los modelos base disponibles pueden cumplir con los requisitos típicamente modestos o de bajo rendimiento y eficiencia energética de la aplicación de destino”, dice Wittich. “También son atractivos cuando el costo de desarrollo y la falta de experiencia en el diseño de procesadores especializados son restricciones clave, es decir, el usuario no tiene la experiencia, el tiempo o el presupuesto para construir un procesador verdaderamente optimizado”.

Muchas veces, esos modelos básicos se dirigen a espacios de aplicación específicos. “Estás comenzando con algo sensato, algo razonablemente común, pero las personalizaciones podrían llevarlo en una dirección muy diferente”, dice Baines de Codasip. “Podría agregar nuevas instrucciones, y esas nuevas instrucciones serán completamente únicas. Nadie más habrá hecho eso antes. Podrías cambiar la microarquitectura, y podrías hacerlo de formas bastante fundamentales. Pero tienes que mantenerte dentro de los rieles de guía de lo que fue el punto de partida”.

Estas herramientas permiten la exploración. “Le permiten hacer un análisis de compensación, donde compila el código de la aplicación real en su procesador, ejecuta el código generado en el simulador y puede perfilarlo”, dice Goossens. “Realmente puede ver las ventajas y desventajas de su aplicación. Estas herramientas, debido a la generación automática de compilación, de perfilado, te permiten hacer un análisis que no son solo conjeturas, sino que están basados ​​en datos reales. Es por eso que recomendamos firmemente el uso de herramientas de diseño de procesadores”.

Si bien cada herramienta se basa en un idioma diferente, todas comparten un flujo similar, como se muestra en la figura 1.

Fig. 1: Flujo de diseño y verificación de un procesador que utiliza una herramienta de generación. Fuente: Sinopsis

Fig. 1: Flujo de diseño y verificación de un procesador que utiliza una herramienta de generación. Fuente: Sinopsis

Si bien es posible que algunas herramientas solo permitan seleccionar características de una lista, otras tienen lenguajes de descripción de procesadores más generales que permiten desarrollar una mayor variedad de procesadores. El lenguaje nML, por ejemplo, tiene una variedad de posibilidades de optimización, como se muestra en la figura 2.

Fig. 2: Funciones accesibles dentro del lenguaje nML. Fuente: Sinopsis

Fig. 2: Funciones accesibles dentro del lenguaje nML. Fuente: Sinopsis

Fig. 2: Funciones accesibles dentro del lenguaje nML. Fuente: Sinopsis

Una parte importante de esta cadena de herramientas es la generación del compilador. “Cuando tiene dos procesadores con el mismo ISA pero diferentes implementaciones, en teoría puede usar el mismo compilador para ambos”, dice Frank de Arteris. “Piense en las guerras de AMD e Intel. Un programa compilado con el compilador Intel funcionará mucho mejor en esa máquina que en una máquina AMD. Se debió principalmente a que el compilador estaba ajustado a un procesador en particular. De vez en cuando, le hacía cosas malas al otro procesador porque no conocía la tubería. Definitivamente hay una ventaja si hay un conocimiento inherente”.

Los lenguajes del procesador contienen información tanto de la arquitectura como de la microarquitectura y esto se puede utilizar para generar un compilador eficiente. “Nuestra herramienta comienza con LLVM”, dice Baines. “Produce una versión personalizada de LLVM y, en efecto, es una compilación del compilador. Escribes tu variación y genera el compilador, el depurador, el generador de perfiles. Todos son salidas automáticas y entienden los cambios que ha realizado. La razón por la que podemos hacer eso es que el lenguaje que tenemos es solo para procesadores. No es un nuevo RTL. No es un lenguaje de propósito general”.

Esto es diferente de síntesis de alto nivel eso es mas generico. “La síntesis de alto nivel es un enfoque considerablemente más intensivo en esfuerzo para diseñar procesadores”, dice Wittich. “Aquí, el usuario debe tener una gran experiencia para poder especificar el algoritmo o la funcionalidad a la que se dirige en un lenguaje de alto nivel como C o C++. La herramienta de síntesis puede entonces generar una implementación funcional. Además de requerir conocimiento y experiencia, las capacidades HLS actuales solo admiten la síntesis de un rango y alcance limitados de algoritmos (como procesamiento de señales, imágenes y video). Y las implementaciones generadas, aunque funcionalmente correctas y generadas rápidamente, normalmente no están bien ajustadas para un rendimiento, potencia y área óptimos. Este enfoque aún no se ha demostrado con éxito en un procesador de alto rendimiento”.

Conclusión
La creación de un procesador puede variar entre ningún esfuerzo (comprar una parte de la propiedad intelectual lista para usar) y un diseño totalmente personalizado, que a menudo termina como una parte de la propiedad intelectual. Para aquellos que requieren algo que se adapte mejor a sus necesidades, existen herramientas de generación de procesadores que pueden guiar a un usuario a través del proceso, siempre que se adhieran a un conjunto de limitaciones y reglas. Es una compensación entre el nivel de optimización, la cantidad de tiempo y esfuerzo que se puede permitir y la ventaja adicional que se traduce en su producto. Cuál de las herramientas sería la más adecuada para su próximo diseño de procesador depende de hasta dónde quiera ampliar los límites.

punto_img

Información más reciente

punto_img