No, tu PC no será más rapido

Your CPU won't get faster because clock speeds hit a wall around 5 GHz in the mid-2000s. Herb Sutter predicted this in 2005, and chip makers switched to adding cores instead. WhatsApp runs on Erlang because handling millions of concurrent users needs parallel processing, not raw speed.
Chapters
¿Te has fijado en que los ordenadores no han aumentado su velocidad más allá de los 5 GHz desde hace décadas? Todo aquel que se haya configurado al menos un ordenador desde 2005 se habrá dado cuenta de que todo ha crecido exponencialmente salvo los procesadores. De hecho, atendiendo a este gráfico podemos ver la máxima velocidad de los procesadores y cómo se han ido reduciendo su tamaño desde 1970 hasta 2022. También se aprecia un salto enorme en las primeras décadas y incluso entre 1990 y 2005, pero a partir de 2005 se ve un estancamiento. ¿Por qué crees que puede ser?
Antes de continuar, un inciso. ¿Te gustaría apoyar a nuestro canal? No te olvides de darle a me gusta y, si no lo estás, suscribirte para no perderte futuro contenido. Ahora sí, continúa.
Se acabó el almuerzo gratuito. Así reza la famosa frase lanzada el 5 de marzo de 2005 por Herb Sutter en su famoso artículo Se acabó el almuerzo gratuito o Free Lunch is Over en inglés. En este, Sutter nos contaba que los principales fabricantes de procesadores y arquitectura, como Intel y AMD, se han quedado sin la posibilidad de continuar con su enfoque de incrementar el rendimiento de la CPU al haber alcanzado un tope. De este modo, al no poder impulsar la velocidad de reloj y el rendimiento, se recurrió a cosas como el multinúcleo, de manera que podemos considerar el año 2004 como el año del multinúcleo.
La tendencia natural de los programadores, tanto de sistemas operativos, software de empresa o gestión, e incluso programadores de videojuegos, era pensar que si el software desarrollado no funciona lo suficientemente rápido Solo hay que esperar hasta la salida del próximo CPU para que su software funcione mejor, más rápido. De hecho, entre usuarios de ordenadores personales en la década de los 2000 surgía esa necesidad de adquirir nuevo hardware si un programa no funcionaba lo suficientemente rápido, y adquirir con ilusión el nuevo con la esperanza de obtener una mejora sustancial en la velocidad del software. Un proyecto muy conocido hoy en día, Adobe Photoshop, fue creado en 1987, pero el hardware disponible no era suficiente para ejecutar correctamente el software. Entonces, demoraron su salida hasta los años 90, y su éxito fue tal que motivó la rápida adquisición de nuevo hardware por parte de sus usuarios.
De secuencial a concurrente.
La situación actual en la que nuestras máquinas trabajan con multinúcleo, no obstante, era algo que se preveía que iba a ocurrir mucho antes. Herb en septiembre de 1995, casi una década antes, escribió un artículo titulado Software y la revolución de la concurrencia, en el que hacía mención a la tendencia cada vez más en auge de incluir más núcleos a los procesadores.
En este artículo él veía claro que las nuevas máquinas serán paralelas y requerirán cambios mayores en la forma de desarrollar nuevo software.
El primer computador en incluir procesamiento concurrente a través de un procesador de 2 núcleos en 1999 fue el IBM Power 4.
No obstante, tecnologías para ejecutar tareas en paralelo y trabajar con diferentes CPUs dentro de una misma máquina existen desde hace tiempo.
¿Por qué la inclusión de diferentes núcleos es novedosa entonces? Por la concurrencia. ¿No sabes lo que es? No te preocupes, volveremos en un momento a este concepto en más detalle. Ahora simplemente nos quedaremos con la idea de que está relacionado con tener múltiples núcleos dentro de un procesador. Y aunque la tecnología para disponer de diferentes CPUs en la placa base está disponible desde hace mucho tiempo bajo el nombre de procesamiento en paralelo o SMP, por sus siglas Symmetric Multiprocessing, su problema es el alto coste de mantener la duplicidad de los procesadores completos sobre la placa base. Los procesadores con múltiples núcleos comparten elementos como la caché de nivel 2, el sistema de refrigeración y requieren por tanto de un menor consumo energético y acelera la posibilidad de distribuir la ejecución de instrucciones dentro del propio núcleo para acelerar la obtención de resultados. En ambos casos tanto el sistema operativo como el software deben tener constancia de la existencia de estos núcleos para poder aprovechar su potencia y esto hizo surgir la diferenciación entre concurrencia y paralelización, que había sido confundida por muchos programadores en los inicios de la salida de los núcleos.
Los primeros lenguajes de alto nivel en prepararse para el empleo de los núcleos fueron Erlang, un lenguaje creado a finales de los años 80 precisamente para lidiar con la concurrencia en equipos de telecomunicaciones. En la máquina virtual de Java, la JVM, se adecuaron los hilos para emplear la arquitectura de núcleos del procesador y el sistema de multiprocessing en Python. Que también se emplea para mejorar el uso de los núcleos del procesador.
Hubo otros lenguajes que vieron la luz justo cuando este cambio sucedía, como es el caso del lenguaje de Go de Google o Rust de Mozilla. Ambos lenguajes tratan la concurrencia de forma diferente y permiten un óptimo uso de los recursos hardware, por lo que comenzaron a obtener popularidad de forma rápida.
Otros lenguajes como Ruby no tuvieron tanta suerte y no consiguieron adaptarse tan rápidamente o de forma segura al nuevo paradigma, presentando problemas de seguridad en sus primeras versiones y problemas de rendimiento en las subsiguientes. El nuevo paradigma de obtener más núcleos y mantener una misma velocidad de ejecución para el nuevo hardware en desarrollo hizo incrementar la aparición y la necesidad de aplicar algoritmos concurrentes y programación concurrente en general, pero existía el problema de confundir paralelismo con concurrencia. Concurrencia no es paralelismo.
Rob Pike, uno de los diseñadores de lenguajes más respetados por venir de los laboratorios Bell, donde se gestaron lenguajes como C o C++, hizo una presentación sobre las diferencias entre paralelización y concurrencia.
En esta nos cuentan que cuando anunciaron Go, todos los programadores enseguida asumieron que eran herramientas para trabajar en paralelo, pero estos estaban confundiendo concurrencia y paralelismo. A lo largo de su charla intenta explicar de forma clara qué supone la concurrencia y qué diferencia hay con respecto a la paralelización. Pyke define concurrencia como la composición de procesos que se ejecutan independientemente, mientras que paralelismo es una ejecución simultánea de múltiples cosas relacionadas, o no, entre sí.
De este modo, la concurrencia se trata de una forma de estructurar algo que te permita emplear la paralelización y hacer un trabajo mejor, pero la paralelización no es el objetivo de la concurrencia. El objetivo en este caso es una buena estructura. En otras palabras, usando el ejemplo dado por Pike, concurrencia sería como los malabares: un proceso iría en la mano mientras todos los demás están en el aire.
Y paralelización... Para explicar paralelización nos vamos a valer de los simpáticos goffers, la mascota de Go. Imagina que un goffer necesita llevar madera al fuego. Si quisiéramos agregar más goffers en una forma paralela y para que no se interfieran entre ellos, Podemos dar a cada gofer las herramientas necesarias para llevar a cabo su propia tarea, pero sin concurrir en ningún punto con los demás.
Si organizamos la tarea de una forma más específica para dar cabida a un mayor número de gofers, pero sin multiplicar los elementos que estos manejan, las pilas de madera que veis, podremos sincronizar los gofers para no colisionar ni estorbarse realizando su tarea haciendo 4 paradas en el camino. Haciéndolo así, veremos que la tarea se hará a mayor velocidad, pero en algunos tramos habrá algún gofer que deba esperar su turno en las secciones donde haya que invertir mayor tiempo.
Pero finalmente todos nuestros gofers estarán trabajando al unísono, al igual que los procesadores multinúcleo hacen. La concurrencia se populariza.
Aunque muchos desarrollos y muchas empresas debieron adaptarse al nuevo modelo de programación Para aprovechar las características de los nuevos computadores, poco a poco y gracias a los nuevos lenguajes y modificaciones sobre los lenguajes existentes, este hecho dejó de ser un problema para convertirse en parte del día a día.
Hay muchísimos ejemplos que seguro que conocéis muy bien, que forman parte de nuestra vida cotidiana, que han sido fruto del cambio de paradigma. Estamos totalmente convencidos de que en este mismo momento tenéis un teléfono móvil muy cerca o incluso en las manos. Seguro que os suena una de las aplicaciones más populares de mensajería instantánea llamada WhatsApp. Esta nos sirve de ejemplo, pues entre 2009 y 2014 hizo su entrada en el mercado de aplicaciones con una de las noticias más sonadas indicando contar con tan solo 50 ingenieros para gestionar la ingente cantidad de usuarios de aquel momento. Todo eso fue posible gracias al uso de un lenguaje concurrente llamado Erlang, uno de los lenguajes de programación orientado a la concurrencia mencionados anteriormente.
Este fue un ejemplo, pero no fue el único de muchos desarrollos empleando el nuevo modelo de concurrencia. Aunque quizás este sea el más emblemático de todos. Más tarde, muchos más llegaron al sector de la mensajería instantánea empleando lenguajes y tecnologías basadas en la concurrencia tras WhatsApp, e incluso se abrieron a otros sectores y mercados con la llegada de los servicios en la nube.
Se nos ocurren otros ejemplos fuera del mercado de los smartphones que seguramente también os resulten familiares.
Aunque no sirva de ejemplo tan bien como WhatsApp, En el terreno de los ordenadores, uno de los principales cambios lo experimentaron los sistemas operativos, los cuales tuvieron que adaptarse a una nueva realidad de hardware para ver su potencial ahora incrementado. Por tanto, sistemas operativos como Windows cambiaron para adaptarse a los nuevos tiempos haciendo que sus versiones hasta el momento queden inmediatamente obsoletas ante la llegada en masa de la nueva arquitectura de hardware y, por tanto, del uso de los nuevos modelos de programación.
Como consecuencia de las nuevas formas de trabajar con los multinúcleos, en otros sectores como el del videojuego vimos también una transformación, llegando en 2005 la primera videoconsola que usaba un triple núcleo en su arquitectura, nada más y nada menos que la Xbox 360.
Obviamente no fue la única, pero marcó un hito, un precedente a partir del cual se estandarizaría.
Sony, por su parte, se uniría al movimiento unos años más tarde con el lanzamiento de su PlayStation 3, aunque este caso concreto contaba con 9 núcleos en su procesador.
Sin salir del terreno de los videojuegos, pero volviendo al chat, en 2014 la empresa Riot comenzó a publicar que ellos también empleaban Erlang, al igual que WhatsApp, para la gestión de su chat masivo en el videojuego League of Legends. Gestionar la ingente cantidad de mensajes y usuarios habría sido imposible sin el empleo de estas tecnologías orientadas a la concurrencia.
El cambio de paradigma anticipado en 1995 y enfatizado en 2005 por Herb Sutter llegó para quedarse, y nadie duda de que como decía Steve Schwarz, incrementar la escalabilidad de un sistema no consiste en tener el coche más rápido, porque en un atasco un Porsche solo quema más gasolina que el resto. Consiste en construir carreteras más anchas y esa es la finalidad de la carrera de los procesadores: agregar más núcleos cada vez.
Y esta es la historia. ¿Conocíais la evolución tan desenfrenada y rápida que han tenido los procesadores recientemente? Quizás afirmar que no conocerán una mejora con el tiempo sería demasiado fatalista, ya que hemos visto que recientemente tanto Intel como AMD han conseguido sobrepasar los 5 GHz. Sin embargo, todavía estamos en el punto en el que el sacrificio que conlleva esa ruptura de barrera nos pone en un punto muy lejano de ver un crecimiento real. Ya que son ráfagas controladas que no mantienen dicha frecuencia viéndose anclados igualmente por debajo de los 5 GHz. Esto supone que la normalización, como ha pasado con otras soluciones como el multinúcleo, está lejos de conseguirse y por tanto, no, tu PC no será más rápido.
More from Manuel

Historia de los Lenguajes de Programación: años 1960-1969 #basic #apl #simula #lisp #logo

¿Compilador o intérprete? La historia de una rivalidad que comenzó en los años 40








