Dentro de las grandes empresas de hardware se están diseñando las nuevas generaciones de procesadores donde cada vez es más difícil ganar más rendimiento con las técnicas convencionales, es por ello que tienen que buscar nuevas formas para hacer procesadores más rápidos. Entre las que destaca la implementación de algoritmos por hardware.
En el diseño de nuevos procesadores, los ingenieros sacan humo de la cabeza para sacar cada vez más rendimiento de sus diseños. La cantidad de núcleos en la que los programas pueden crecer es finita y se llegará al punto en que el IPC no se podrá aumentar más, es por ello que son necesarias nuevas estrategias.
¿Qué es un algoritmo?
Los algoritmos son utilizados en la lógica, la informática y las matemáticas. Son una serie de instrucciones finitas que de manera ordenada definen un proceso para resolver un problema concreto. Un programa informático no es más que una sucesión de algoritmos y por tanto nuestros PC los están ejecutando el 100% del tiempo, pero los que hayáis estudiado ingeniería informática sabréis que hay algoritmos que se utilizan continuamente y de manera repetitiva en todos los programas.
La forma de acelerar los programas con las nuevas CPU hasta el momento se han basado en las formas tradicionales de aceleración de rendimiento, pero se están empezando a implementar en el diseño de las CPU la aceleración de algoritmos concretos con tal de acelerar la ejecución del software.
Formas de acelerar la ejecución de los programas en una CPU
Las formas más tradicionales de acelerar la ejecución de un programa son dos:
- Aumentar la cantidad de hilos de ejecución simultáneos que puede ejecutar un procesador, ya sea a través de más núcleos o soporte multihilo como el SMT de AMD o el Hyperthreading de Intel. Gracias a ello se aumenta la velocidad de la parte de los programas que funciona en paralelo.
- Aumentar la capacidad de procesamiento por núcleo, lo que sirve para acelerar la parte que no se puede paralelizar y por tanto funciona en un solo núcleo o hilo de ejecución en exclusiva
Pero existe un tercer tipo que es la aceleración de algoritmos por hardware, la cual se basa en implementar algoritmos por hardware. De tal manera que si un algoritmo es ampliamente utilizado en los programas puede ser acelerado a través de unidades especializadas. Con ello se consigue que esa parte del programa se ejecute de manera mucho más rápida.
Al fin y al cabo, consideramos una CPU más potente la que es capaz de ejecutar un programa en menos tiempo que otra, sea cual sea la estrategia que utilicen para ello.
Algoritmos por hardware, pronto en tu CPU
Hasta ahora hemos visto algoritmos de aceleración relacionados con el mundo del contenido multimedia como son los CODECS de vídeo e imagen implementados en las GPU, pero poco a poco se están implementando unidades de aceleración en las CPU, especialmente de cara a acelerar aquellas partes más comunes en los programas.
La mayoría de los algoritmos que se implementan son los matemáticos, especialmente los que son complejos y que una CPU necesitaría varios ciclos en implementar o que necesitarían unidades de ejecución y control más complejas para realizarse. Y dado que el presupuesto en espacio y consumo es cada vez más limitado se han de buscar otros métodos aparte de los tradicionales para acelerar los programas.
En un mundo en el que el consumo por vatio de los procesadores es lo más importante y donde lo que consume cada instrucción se cuenta cada vez más, la implementación de algoritmos por hardware, no solo para multimedia, sino para bloques comunes de los programas es la tendencia
Algoritmos por hardware: ¿cómo se implementan?
Hay tres formas de implementar los algoritmos por hardware:
- La primera es a través de una unidad de función fija, el cual es un hardware que no es programable pero que recibe unos datos de entrada, ejecuta siempre el mismo algoritmo y saca unos datos de salida. Se suelen construir utilizando ROMS programables o PROMs con un puerto de entrada y otro de salida.
- La segunda es a través de un acelerador, el cual es un procesador programable pero que ha sido optimizado para un tipo de algoritmos en concreto, por lo que tiene su set de datos, instrucciones y tipos de unidades reducidos. La ventaja es que actualizable a través de firmware, pero las actualizaciones están limitadas a la naturaleza del procesador
- La tercera es utilizar una unidad FPGA dentro del procesador, por el momento no las hemos visto, pero con la compra de Xilinx por parte de AMD y teniendo en cuenta que Altera es propiedad de Intel, no tardaremos en verlas. Es la que más versatilidad da.
En cuanto al tamaño ocupado en el chip, número de transistores, la más simple es obviamente la unidad de función fija, seguida del acelerador y después del FPGA. Y si hablamos del consumo energético el orden es el mismo, por lo que la implementación de un FPGA en un procesador para acelerar ciertos algoritmos pese a dar más versatilidad también se traduce en un procesador más caro.
En conclusión, en unos pocos años vamos a ver a las empresas de hardware hablando de lo más rápidos que son sus procesadores no a nivel de potencia de cálculo, sino en como aceleran las partes más comunes de los programas. Dicho de otra manera, pequeños acelerones en partes concretas que aumentan la velocidad global de ejecución.