Salí victorioso del atraco con millones de euros al cerrar la brecha entre el hardware y el software
Parece extremo comparar La Casa de Papel con desarrollar productos de alta tecnología para la Cuarta Revolución Industrial. Pero tienen más en común de lo que parece.
El profesor reunió a los individuos más valientes y talentosos. Consiguió los fondos y planeó estrategias. Esos planes incluían el mejor y el peor de los escenarios para garantizar la denuncia de los “verdaderos malos” y permitirles salir de la Casa de la Moneda de España con millones de euros. Inclusive, planeó tácticas para retrasar procesos. Todo esto se parece mucho al desarrollo de productos tecnológicos.
Las fases de diseño y desarrollo de soluciones tecnológicas son prolongadas y críticas para el éxito de los negocios. Las inversiones de capital iniciales pueden ser altas en estos proyectos. Por consiguiente, ¡las expectativas son altas también! Como todavía estamos sufriendo las consecuencias de la pandemia en términos de retrasos en los envíos y la escasez de componentes electrónicos, en muchos casos las compañías experimentan una gran presión por llegar al mercado y cumplir con el envío del inventario a tiempo.
También existe una constante batalla por recursos de hardware pues los equipos con regularidad requieren cada vez más capacidades de procesamiento. Esto significa que el hardware probablemente empieza sobredimensionado y termine obsoleto. Entonces, constantemente se revisa y rediseña el sistema para agregar más capacidad de procesamiento en el hardware, lo cual aumenta innecesariamente los costos y las inversiones.
Finalmente, encontrar personal capacitado en sistemas empotrados, hardware y software al mismo tiempo, no siempre es una tarea sencilla. En algunas compañías, ingenieros sin experiencia en sistemas empotrados lideran y desarrollan proyectos tecnológicos. Como resultado, podrían escoger kits de desarrolladores (como Jetson Nano, Arduino, Raspberry PI) porque están familiarizados con ellos y porque las características estándar facilitan la integración con otros sistemas. Las placas de desarrollo tienen usos industriales particulares, y puedes leer más sobre estos usos en este blog post. Pero este puede no ser el caso de las producciones masivas.
Todos estos factores pueden influenciar negativamente la decisión sobre el lenguaje de programación, la arquitectura de algoritmos, y en general, el desarrollo del software. Algunas veces, la decisión se reduce a usar un sistema operativo estándar, en contraste con un sistema especializado o a la medida, con un código collage de Stack Overflow en vez de un algoritmo propio. Esto lleva al desperdicio de recursos, componentes sobredimensionados de hardware, retrasos, y costos adicionales de recertificación o rediseño. Al principio, esta podría parecer la solución más barata, pero con el tiempo podrías descubrir que no es la que aprovecha los recursos de manera más eficiente. Además, durante la operación normal, el hardware, el cual funcionaría a capacidad máxima siempre, puede llevar al calentamiento de los componentes, reducir el tiempo promedio entre fallos y obligar a pagar costos más altos de reparación.
Arquitectura de algoritmos
Repasemos el camino común que toman algunas compañías para desarrollar la arquitectura de algoritmos. Desafortunadamente, algunos ingenieros quienes trabajan con sistemas empotrados se sientan a programar sin planes o diseños: atracadores de principiantes. ¿El problema? Solo vas a descubrir si el algoritmo es efectivo o ineficiente hasta que está creado.
Vamos a describir dos ejemplos de algoritmos ideales: el lineal y el logarítmico. Asumamos que cada operación básica toma un segundo. En el caso de los algoritmos lineales, conforme las entradas aumentan, también lo hace el tiempo de ejecución, como se ve en la Tabla 1. Si este algoritmo se comportara logarítmicamente, conforme se tienen más entradas, su tiempo de ejecución se mantendría estable (Tabla 2) Por ejemplo, los algoritmos de búsqueda binaria muestran un comportamiento logarítmico.
Tabla 1 Relación entre las entradas y el tiempo de ejecución de un algoritmo lineal.
Entrada | Tiempo de ejecución |
10 | 0,00000001 |
100 | 0,0000001 |
1.000 | 0,000001 |
1.000.000.000 | 1 |
Tabla 2 Relación entre las entradas y el tiempo de ejecución de un algoritmo logarítmico.
Entrada | Tiempo de ejecución |
10 | 3.3E-09 |
100 | 6.6E-09 |
1.000 | 1.0E-08 |
1.000.000.000 | 3.0E-08 |
Estos dos ejemplos normalmente no se encuentran en la vida real porque los algoritmos difícilmente se comportan de manera lineal o logarítmica. El algoritmo “Stupid Sort” se puede usar como un ejemplo del resultado de no planear o diseñar antes de programar. Este es un algoritmo de ordenamiento con base en una prueba al azar de un grupo de cartas con comportamiento factorial (Tabla 3). En este ejemplo, si tenemos 100 entradas, necesitaríamos 3.2E+183 años para obtener una respuesta. Según la NASA, la edad del Universo es de 13,7E9 años. Como resultado, si este algoritmo hubiera sido desarrollado cuando se creó el universo, todavía estaría corriendo sin solución. No quieres incluir algoritmos factoriales, como el “Stupid Sort”, en tu producto tecnológico. De esta manera evitas desperdiciar recursos de hardware.
Tabla 3 Relación de entradas y tiempo de ejecución de un algoritmo factorial
Entrada | Tiempo de ejecución | Duración en años |
10 | 10 | 3.171E-7 |
100 | 1.0E+191 | 3.2E+183 |
1.000 | ? | ? |
1.000.000.000 | ? | ? |
De hecho, el hardware tiene limitaciones. En general, las escalas de tiempo de los sistemas empotrados son difíciles de entender para los humanos. Por esta razón, vamos a definir una escala más fácil de entender para este análisis particular. Para el típico procesador de 3.9Ghz incluido en las computadoras regulares de 2014, podemos afirmar que un ciclo del CPU toma un segundo con tiempos como los mostrados en la Tabla 4. En esos casos, leer un archivo del disco duro podría tomar en el peor de los casos 1,5 años, o leer un archivo en la memoria RAM podría tomar 32 segundos. Como puedes ver, un algoritmo desarrollado de manera deficiente, desperdicia recursos. Por consiguiente, podrías pensar que necesitas un hardware más robusto con más capacidades cuando, en realidad, necesitas revisar la forma en la cual se está creando el software.
Tabla 4 Tiempos de ejecución de procesos reglares en una computadora con una escala fácil de entender.
Actividad | Tiempo | Escala Humana |
Ciclo del CPU | 0,256 ns | 1 segundo |
Cache L1 | 1,026 ns | 4 segundos |
Cache L2 | 3,077 ns | 12 segundos |
Cache L3 | 6,154 ns | 24 segundos |
R.A.M. Memoria | 8,4 ns | 32 segundos |
Disco duro – mejor caso | 2,9 ms | 132 días |
Disco duro – peor caso | 12 ms | 1,5 años |
SDD | 85 μs | 3 días y 20 horas |
Cambio de contexto | 10 μs | 10,8 horas |
Quantum | 100 ms | 12,4 años |
¿Cómo ser exitoso en la escala de los millones de euros o dólares cuando se desarrollan productos tecnológicos?
Con una arquitectura cuidadosa de algoritmos. Como en “La Casa de Papel”, necesitas reunir a un grupo de personas, el cual debe incluir al menos un ingeniero experimentado en sistemas empotrados. Este profesional será el mejor capacitado para desarrollar algoritmos que correrán en un hardware específico. Esta persona básicamente mejorará el software para ajustarse al hardware (en vez de hacer lo opuesto), lo cual, a su vez, ofrece un mejor retorno de inversión y te ahorrará muchos dolores de cabeza en la parte operativa y de manufactura.
Un ingeniero de sistemas empotrados planificará, identificará estrategias y evitará los errores comunes de desarrollo del software. También será capaz de predecir las capacidades del hardware. Esto se traducirá en menos retos y será más fácil lograr el éxito empresarial. ¡Quién sabe! Tal vez hasta te conviertas en el héroe de la Cuarta Revolución Industrial, Internet de las Cosas, Robótica o Procesamiento de Imágenes de tu compañía.
Si quieres seguir leyendo sobre temas similares, revisa este blog post.