¿Qué se quiere decir cuando hablamos de implementar algún algoritmo en hardware versus en software?

Cuando hablamos de implementar algún algoritmo en hardware, significa que diseñamos un circuito digital (generalmente) que implementa este algoritmo. Este circuito se puede realizar en FPGA (Field Programmable Gate Array) o en un ASIC.

Cuando hablamos de implementar algún algoritmo en software, significa que escribimos código que implementa este algoritmo y este código es compilado y ejecutado por un microprocesador o un microcontrolador. El microprocesador puede ser de un solo núcleo, de múltiples núcleos o de cualquier otro tipo.

Ese es el concepto principal.

Un SoC puede contener diferentes componentes (procesador, memoria, acelerador especializado, etc.) porque es un “sistema en chip”. Normalmente utiliza un SoC mediante la implementación de un algoritmo en un software que se ejecuta en el procesador principal dentro del SoC pero que puede utilizar otros componentes. Un acelerador especializado como el acelerador de movimiento en Apple A9 SoC (en iPhone) es en realidad un bloque ASIC que tiene una implementación de hardware de algunos algoritmos relacionados con el movimiento. La aplicación que se ejecuta en el procesador puede invocar este acelerador (lea Apple SDK para saber cómo hacerlo).

El software significa que se ejecuta en un hardware basado en un procesador, por lo que el algoritmo se ejecutará secuencialmente. Mientras tanto, el hardware programable o FPGA (supongo que quiere decir) se puede canalizar o ejecutar en paralelo. Por lo tanto, el rendimiento del algoritmo en FPGA puede ser mucho mejor que en el software. Además, si implementamos hardware, es probable que podamos determinar cómo se ve el circuito, qué tan rápido puede ser y qué tan bajo puede ser el consumo de energía. Desde mi punto de vista, para verificar la corrección o eficiencia del algoritmo, podemos usar software para implementarlo. Para lidiar con la optimización de potencia y rendimiento, la implementación de hardware o FPGA es una gran opción.

Espero ver muchos más puntos de vista sobre esto.

Supongamos que está desarrollando un cortafuegos que puede descartar paquetes según las reglas que proporcione. En el mundo de Linux puedes lograr esto con IpTables. Usted escribe las reglas (que permiten hacer coincidencias basadas en el encabezado del paquete, es decir, direcciones IP src / dst o puerto, protocolo, etc.), se compilan y el núcleo intentará hacer coincidir cada paquete con una lista encadenada de ellos. Este es un enfoque de software donde el algoritmo y la lógica se implementan en C.

Supongamos ahora que el número de paquetes recibidos aumenta, así como el número de reglas 10x. Su software ya no puede manejar ese tráfico.

Para hacer frente a esto, puede mover el firewall al hardware. Toma el algoritmo y la lógica y lo mueve de C a FPGA o ASIC dedicado que hace exactamente esto. Utiliza lenguajes VHDL / Verilog para implementar hardware (ya sea FPGA o ASIC). Esto es equivalente a recrear C (iptables) en hardware.

A veces, el hardware dedicado (como FPGA) puede tener un pequeño procesador para controlar el hardware restante. Actuar como gerente. Por ejemplo, no desea cambiar la sintaxis de las reglas y deberían funcionar con IpTables y dentro de FPGA. Podría tener un pequeño procesador dentro de FPGA que traduciría esas reglas al formato que se entiende por motor de coincidencia en el FPGA.


Otro ejemplo sería hacer gráficos. Puede hacer sombreadores y renderizar en C ++ ejecutándose en una CPU Intel o podría tenerlos en GPU. En lugar de entrar en el hardware con todas las funciones, es posible encontrar un núcleo del algoritmo y poner esta parte en el hardware. Esto también tiene posibilidades de ser utilizado por otros algoritmos. Las CPU modernas tienen características SIMD como AVX que hacen exactamente eso. Todo el mercado de DSP hace exactamente esto también.

Es obvio que el software se ejecuta en computadoras; sin embargo, en la mayoría de los casos, “ejecutar en software”, implica ejecutar en un procesador de propósito general, por ejemplo, un microprocesador (una PC).

La expresión que se ejecuta en hardware implica que el algoritmo se ejecuta en hardware especializado (por ejemplo, un ASIC o FPGA) donde una CPU de propósito general es asistida por un circuito especial).

Esto suena como tarea, así que solo te daré un ejemplo de la vida real.

Originalmente, cuando comencé a experimentar con computadoras (alrededor de 1970), necesitaba un puerto serie para comunicarme con la máquina Teletype ™ que estaba usando como terminal, así que escribí un puerto de bit-banger (usando un bit en una dirección como ” puerto “, con hardware adicional para que funcione). Unos años más tarde, podía permitirme un 8251, así que hice el puerto en hardware. Eso es lo que significa. El algoritmo era cómo comunicarse con un dispositivo en serie.