¿Alguna idea para optimizar una arquitectura de computadora (ISA) para un conjunto determinado de algoritmos?

Los chips DSP son el mejor ejemplo de chips que están altamente optimizados para un conjunto específico de funciones.

Lo primero que debe hacer es perfilar el código y optimizarlo lo más estrictamente posible y estudiar los cuellos de botella de rendimiento en el código. Lo que encuentre puede ser decepcionante. En las máquinas modernas con muchos conductos y relojes multigigaherts, una pérdida clara de las cachés que llega hasta la memoria cuesta alrededor de 300 ciclos para obtener una lectura con los datos para cargar un registro. Por lo tanto, una referencia de memoria mal considerada puede tener un impacto dramático. A menos que sus nuevas instrucciones puedan evitar trampas como esas, no ayudarán. Considere también las implicaciones de coherencia de caché también. Son otra fuente de sorpresas.

Muy a menudo, las instrucciones especiales no ahorran tiempo porque deben hacer las mismas referencias de memoria antes de que termine.

La única gran excepción a esto son las instrucciones que interactúan específicamente con la (s) tubería (s) de instrucciones y el comportamiento del caché para proporcionar operaciones atómicas de algún tipo. Estos manipulan el estado del procesador de manera que ninguna otra instrucción puede hacerlo, por lo que efectivamente hay un lugar para ellos.

Tenga en cuenta que el ARMv8 tiene una interfaz de coprocesador para conectar hardware especializado. El ARMv8 ya tiene un poderoso conjunto de construcción de vectores y DSP y algunos mecanismos de seguridad especializados. Sugeriría mirar el ARMv8, al menos la información pública, las máquinas FreeScale PowerPC y la nueva máquina de código abierto RISK-V. Siempre puedes aprender mucho del trabajo de los demás.

Aclamaciones

El primer paso es desarrollar lo que quieres decir con optimizar . Dices “reduce los ciclos y la cantidad de instrucciones”. Eso no es realmente suficiente para continuar.

  • ¿Tiene un objetivo de rendimiento, en términos de tiempo real? Por ejemplo, μsec para una función particular?
  • ¿Tiene un objetivo de potencia / energía, en términos de vatios o julios? ¿Está tratando de funcionar con una batería AA, o puede enfriarlo con agua y hacerlo funcionar con una fuente de alimentación industrial? ¿En algún lugar entremedio?
  • ¿Tiene un área / precio objetivo? ¿Será esto algo pequeño en un pequeño controlador integrado del tamaño de un guisante que se vende por $ 0.50, o un chip gigante del tamaño del servidor que cuesta> $ 1K?
  • ¿Tienes un presupuesto complejo? ¿Es esto algo que espera de un equipo pequeño y enfocado (1 a 4 ingenieros) con habilidades básicas para implementar, o se necesitará un gran equipo de ingenieros experimentados para construirlo?
  • ¿Qué tan flexible debe ser? Desea optimizar un conjunto determinado de algoritmos, pero ¿qué parámetros espera que varíen?
  • ¿Con qué necesita interactuar? ¿De dónde está obteniendo los datos que está procesando y a qué está pasando sus resultados?
  • ¿Está limitado por una arquitectura existente que está intentando modificar y / o ampliar?

Es trivial reducir la cantidad de instrucciones y la cantidad de ciclos. Tenga una instrucción, GO , que activa un montón de lógica de función fija que implementa directamente la función. Esa es una instrucción. Y es trivial reducir la cantidad de ciclos, arrojando mucho hardware al problema. En teoría, podría desenrollar completamente la mayoría de los algoritmos a la lógica combinatoria por completo , y se ejecutaría en un “ciclo” muy largo y muy lento.

Pero, tal diseño sería extremadamente inflexible y posiblemente bastante grande. Dependiendo de la tecnología del proceso, podría consumir mucha energía debido a fugas. Puede ser poco práctico construirlo a menos que tenga un presupuesto muy grande.

Recuerdo haber revisado una patente que describía, en parte, un algoritmo para acelerar la división al realizar múltiples divisiones de prueba en paralelo. En principio, el recuento cíclico del algoritmo solo estaba limitado por el número de sumadores que estaba dispuesto a comprometer con el silicio. Incluso mostraron una tabla que sugería que, si deseaba hacer una división de 64 bits por 32 bits en un solo ciclo, solo tenía que dejar 4 mil millones de sumadores. Estoy seguro de que cuando escribieron esa línea en la tabla, sus lenguas estaban incrustadas firmemente en la mejilla. (Mi abogado de patentes, que coescribió la patente, siempre mencionó esa tabla con una sonrisa.) Pero muestra el peligro de un estudio en papel sin restricciones frente a considerar las verdaderas compensaciones impuestas al tratar de construirla.

(Tabla 65, patente de los Estados Unidos 5.446.651.)

Menciona que tiene un procesador ARM como línea de base. ¿Cúal? En la alineación actual, esos se extienden desde pequeños núcleos Cortex-M0 hasta núcleos gigantes Cortex-A73. Una vez que elija uno, tal vez pueda establecer su objetivo en relación con él: “La mitad del ciclo cuenta con foo , con un 10% de frecuencia de reloj, 30% de aumento de área y 40% de reducción de energía por función”.

Una vez que tenga un objetivo en mente, puede usarlo para comenzar a medir su arquitectura en función de sus objetivos. Puede decidir que está bien consumir más ciclos para algunas tareas si obtiene un mayor beneficio del aumento de la velocidad del reloj. O, si su algoritmo tiene mucho paralelismo inherente, puede aceptar una velocidad de reloj reducida si le permite colocar grandes cantidades de unidades funcionales en paralelo. O tal vez, solo está tratando de encontrar algunas instrucciones de elección para calzar zapatos en una tubería existente como un pequeño delta para darle un impulso modesto a un algoritmo suyo.

Hasta que establezca el problema que está tratando de resolver, establezca criterios para evaluar las compensaciones y establezca cómo va a medir el éxito, es probable que fracase y luego falle.

Puede estudiar algunas arquitecturas existentes que ya funcionan bien en el área que desea optimizar. Los DSP VLIW tienen sus puntos fuertes. Las arquitecturas vectoriales tienen sus puntos fuertes. Las arquitecturas de memoria-memoria, aunque impopulares en la actualidad, tienen sus propios puntos fuertes, incluso. Saber qué hacen los procesadores prácticos existentes y qué tan bien funcionan le dará una idea de un objetivo razonable para disparar.

More Interesting

¿Cuál es el escenario actual de la investigación que invita tanto a las finanzas como al aprendizaje automático, si existe tal investigación?

¿Cuáles son las diferencias entre las computadoras de servidor, las computadoras domésticas y los teléfonos inteligentes?

¿Cómo realiza una unidad lógica aritmética (ALU) la multiplicación, suma y comparación en enteros sin signo muy grandes (8,000,000 bits o más)?

Cómo iniciar Windows 10 a través de una memoria USB 3.0 en el disco GPT

¿Cómo se pueden explicar, comparar y contrastar CPU, FPU y GPU?

¿Cuál es la mejor computadora para un desarrollador de PHP?

¿Cuál es la historia del aprendizaje automático?

¿Cómo es CS225 de UIUC en comparación con CS61B de Berkeley y CS106B de Stanford?

Dado un lenguaje con una función de pliegue (ala Haskell) garantizada para terminar, ¿cuán necesario sería la integridad de Turing para que el resto de este lenguaje sea útil?

¿Por qué las GPU son adecuadas para el aprendizaje profundo?

¿Esto ilustra el problema de detención?

¿Cuáles son algunos problemas computacionales que son 'inherentemente secuenciales' y que no pueden acelerarse significativamente usando paralelismo?

Al realizar torrenting, ¿a dónde van las solicitudes de mis clientes y cómo sabe enviarlas allí?

Si una computadora almacena una dirección de 8 bits para 1 bit de datos en la RAM, ¿dónde y cómo la computadora aborda la dirección de 8 bits?

¿Dónde puedo encontrar documentos con resultados de "estado del arte" para un problema de aprendizaje automático dado?