La aceleración por hardware permite que el software se ejecute más rápido. ¿Más rápido que qué? Pues más rápido que algún benchmark. Técnicamente, la aceleración por hardware puede conseguirse simplemente actualizando la CPU en el sistema por una versión más nueva/rápida. Pero esto no es realmente a lo que nos referimos cuando hablamos de aceleración por hardware. En cambio, a lo que nos referimos es escribir software que aproveche explícitamente las características específicas del hardware para acelerar la ejecución del software. Los procesadores modernos son predominantemente multinúcleo. La disponibilidad de múltiples núcleos de ejecución significa que se espera que los desarrolladores de software escriban sus algoritmos de tal manera que el rendimiento de la ejecución se maximice paralelizando el trabajo en tantos núcleos como sea posible, en lugar de confiar en el potente rendimiento de un único hilo del procesador.
Desde CoreAVI cuentan una CPU multinúcleo y escriben su software para aprovechar cada uno de los núcleos que la CPU ofrece. Desde el punto de vista de la aceleración, se puede hacer todavía más. La CPU está ejecutando el valioso algoritmo de software, pero también está ejecutando todo lo demás en el sistema, incluyendo el sistema operativo. Una verdadera medida de la aceleración sería trasladar todo lo posible de la CPU a un hardware dedicado. Esta fue la intuición que dio origen a la industria informática actual. La explosión de la investigación en aprendizaje automático (ML, siglas en inglés) e inteligencia artificial (IA) que vemos ahora no se debe a teorías informáticas fundamentalmente nuevas. De hecho, la mayor parte de las matemáticas implicadas en estos algoritmos tienen décadas de antigüedad. Lo verdaderamente revolucionario en IA y el ML hoy en día es la constatación de que podemos acelerar el enorme número de cálculos implicados -que antes se consideraban intratables desde el punto de vista computacional- utilizando unidades de procesamiento gráfico (GPU). Las GPU ofrecen grandes conjuntos de núcleos de cálculo. Siempre que escribamos nuestros algoritmos de forma que puedan aprovechar los núcleos de la GPU para realizar nuestros cálculos, podemos descargar gran parte de nuestros algoritmos en la GPU y dejar la CPU libre para seguir ejecutando el sistema. Esto es verdadera aceleración.
Ahora que ya sabemos cómo es la aceleración, al menos a un alto nivel, la siguiente pregunta obvia es: ¿por qué es importante?¿Es la aceleración por hardware algo interesante que hay que tener o es esencial? La respuesta depende, por supuesto, del caso de uso. Si podemos permitirnos esperar a los resultados de nuestros cálculos, entonces la aceleración puede no ser tan necesaria. Pero hay muchos casos de uso en los que la velocidad de ejecución es tan importante que una ejecución lenta significa que el sistema es inutilizable. Estos ejemplos suelen encontrarse en sistemas que deben responder a cambios del entorno en tiempo real.
El propósito de este documento es analizar los cálculos que intervienen en el modelado de la dinámica de vuelo de un Quadrotor, discutir qué partes de los cálculos son candidatas para la aceleración en la GPU y demostrar la importancia del determinismo para el tiempo de ejecución de estos cálculos.
Si quieres conocer en mayor profundidad este caso, entra aquí y lee el artículo completo.