24

Cualquier algoritmo en hardware es más rápido que en software

Publicado el: 27/08/2010
Código y un procesador
En esta entrada voy a explicaros algo bastante básico, pero que mucha gente desconoce o simplemente no entiende bien.
Voy a aclarar por qué los algoritmos (secuencia de pasos que tiene que realizar un ordenador para completar una determinada tarea), se ejecutan más rápido en hardware que en software.

Empezaré definiendo cada cosa por separado:

1.- Implementación de un algoritmo en software o lo que es lo mismo, preparado para ejecutarse en el procesador:

El software siempre se tiene que ejecutar en el hardware de la máquina donde esté. Normalmente, siempre disponemos de un procesador de propósito general, llamado así porque está pensado para poder ejecutar cualquier algoritmo. Para ello utiliza un conjunto de instrucciones generales, como por ejemplo, "suma dos números", "guarda este dato en esta posición de memoria" o "recupera lo que hay en esta posición de memoria".

Además, para ejecutar cada instrucción, el procesador de propósito general tiene que realizar una secuencia de pasos, que son siempre los mismos (no como en la implementación en hardware).

Hay que aclarar, que en un ordenador, además del procesador, podemos ejecutar partes del software en otros dispositivos, como por ejemplo en la tarjeta gráfica, que usa instrucciones más específicas. Pero cuando se habla de implementación software de un algoritmo es para referirse a que solamente utiliza el procesador.

2.- Implementación de un algoritmo en hardware específico:

Un algoritmo implementado directamente en el hardware, puede ejecutarse más rápido, porque la única instrucción que tiene que cumplir es "ejecuta el algoritmo".

La principal razón de que sea más rápido, es que no estás ligado a un conjunto de instrucciones generales y hay más libertad para decidir la forma de resolver el problema.

Lo que se hace para implementar el algoritmo, es juntar componentes básicos del hardware (puertas lógicas) para conseguir otros componentes más complejos. Para la implementación se pueden usar distintas técnicas de optimización que no se pueden usar en la implementación software, por ejemplo, dividir el problema en partes para resolverlas al mismo tiempo (paralelizar).

Si implementáramos un algoritmo en un sólo chip estaríamos hablando de un procesador de propósito especifico.

- Por ejemplo:

Imaginaos un procesador que sólo tiene la instrucción "suma dos números".

Si tuviera que multiplicar dos números con esa única instrucción, el procesador la tendría que ejecutar varias veces para hallar el resultado.

En cambio, si tuviéramos hardware implementado que permitiera multiplicar directamente, sólo tendríamos que ejecutar la instrucción de multiplicación una vez.

- Conclusiones:

Cuanto más compleja sea la instrucción a implementar, ahorraremos más tiempo si la implementamos en hardware.

Ahora imaginaos, por ejemplo, que tuviéramos que ejecutar sólo con sumas, una operación algo más compleja, como multiplicar una matriz por un vector (se usa entre otras cosas para mover objetos 3D). El número de instrucciones en el procesador de propósito general sería bastante alto.

Lo normal, es que si queremos que un algoritmo muy complejo, implementado por software en un procesador de propósito general, se ejecute más rápido que uno implementado directamente en hardware, tendremos que usar cientos de estos procesadores trabajando en paralelo.

El problema de utilizar hardware radica en que es más caro. Sólo podemos usarlo para aquello que lo hemos diseñado específicamente y, para actualizarlo, normalmente hay que reemplazarlo.

Así que, la próxima vez que os vendan una tarjeta gráfica con "aceleración 3D por hardware", ya sabéis porqué acelera. Esta expresión ha provocado que la gente haya inventado el término sin sentido "aceleración 3D por software" para referirse a juegos que sólo usan el procesador. Sería más correcto decir algo como "motor 3D por software".

Otra cosa interesante, a tener en cuenta, es que, en raras ocasiones, cuando tenemos un programa que no utiliza adecuadamente la aceleración hardware, el trasiego de información entre el procesador, la memoria y el hardware específico puede hacer que el programa se ejecute más lento aún que usando sólo el procesador. Pero esto ocurre sólo en aplicaciones pésimamente implementadas como el Adobe Flash Player.

Saliendo un poco del tema, también hay hardware reconfigurable, que permite programar un algoritmo de forma parecida a como se puede hacer en software y que se ejecute casi a la misma velocidad que su implementación hardware. Pero de eso ya hablaré en otra ocasión.

Pensamientos (0): Comentar
Categorías: , ,

Comparte:

Copia y pega en tu página:

Comparte
Escribe tus pensamientos computables

Respondiendo a los siguientes comentarios:

Para comprobar que eres un humano responde correctamente:

Esta pregunta no me gusta, ¡cambialá!

Ninguno de estos datos será almacenado.

(Escribe el correo electrónico)

Campo obligatorio.

(Escribe el correo eléctronico o los correos electrónicos separados por comas)

Campo obligatorio.

Para comprobar que eres un humano responde correctamente:

Esta pregunta no me gusta, ¡cambialá!