La potencia no lo es todo. Esa es una frase cierta en todo tipo de
contextos, desde coches a ordenadores, tablets, y por supuesto,
smartphones. Claro, que no siempre tenemos claro qué significa
realmente, hasta que lo comprobamos de primera mano.
Por ejemplo, puede que alguna vez hayas usado dos móviles con el
mismo procesador, y te hayas encontrado diferencias notables en el
rendimiento. Puede que uno fuese más rápido ejecutando aplicaciones
pesadas como videojuegos; o que sea capaz de cargar archivos de manera
instantánea comparado con el otro.
En ese sentido, las
comparaciones entre móviles Android y los iPhone son inevitables. Cada
año que pasa, en cada presentación, Apple presume de potencia en sus
dispositivos. Habla de cómo en cada nueva iteración es capaz de obtener
un rendimiento un 20%, 30%, o 50% superior respecto al año anterior; y
por supuesto, aprovecha para
lanzar dardos a la competencia con Android.
Sobre todo con los últimos modelos, que usan procesadores diseñados por
la propia Apple; unos procesadores que, asegura, son los más potentes
del mercado.
Pero aumentar
la potencia de un procesador no es la única manera de mejorar su rendimiento.
la diferencia de rendimiento que notamos al usar un smartphone no está
necesariamente ligada a lo potente que sea el procesador, ni a la
cantidad de núcleos que tenga. Hay otros aspectos que son igual o
incluso más importantes en la experiencia.
Es bien sabido que iOS, el sistema operativo de los iPhone, está muy
bien optimizado; pero ese no es el único “truco” que usa Apple. Sus
procesadores también están diseñados para ser excelentes en ciertos
tipos de operaciones; son especialistas en algunas tareas, en otras
palabras. Y lo consiguen gracias a las llamadas “instrucciones”.
Las instrucciones son todo lo que el procesador es capaz de ejecutar;
son comandos que los programadores usan para desarrollar los sistemas
operativos y programas que se ejecutan en el procesador. Podemos definir
a las instrucciones como
la lista de órdenes que el procesador entiende.
Conjunto de instrucciones de un Intel 8080 (Fuente: VirtualAltair)
Un ejemplo de instrucción muy simple es realizar una operación
aritmética. Por ejemplo, pongamos que quieres sumar dos valores que
están guardados en la memoria; usando una instrucción es posible
ordenárselo al procesador y recibir un resultado que guardaremos en la
memoria.
No todos los procesadores tienen los mismos conjuntos de instrucciones; aunque la mayoría tiene las más simples, que permiten realizar operaciones matemáticas o mover datos de memoria.
Ahora imaginemos que nuestro procesador no tiene una instrucción para
multiplicar. No pasa nada, podemos usar la instrucción para sumar y
conseguir el mismo resultado, ¿verdad? Si queremos multiplicar 3 por 7,
lo podemos hacer simplemente sumando 3 + 3 + 3 + 3 + 3 + 3 + 3; en otras
palabras, enviando siete instrucciones de “suma” al procesador.
(Standford University)
El problema es que tenemos que dar más pasos, en este caso siete
pasos en vez de uno solo. Y cada instrucción que enviamos ocupa
completamente al procesador; así que no podemos hacer otra cosa hasta
que termine (esto no es del todo cierto en la actualidad, pero nos vale
como base).
Si nuestro procesador tuviese una instrucción para multiplicar, podríamos
ordenar sólo una instrucción, y usar el resto para otras cosas; de esta manera, se mejora el rendimiento aunque el procesador sea igual de potente.
Los procesadores actuales son mucho más complejos, con una gran
cantidad de instrucciones que los programadores pueden aprovechar. Pero
la idea es la misma: realizar acciones de manera más directa que
programándolas directamente usando varios pasos. Es muy útil,
especialmente para acciones muy comunes.
Pero entonces, ¿por qué no se crean instrucciones para cada necesidad
que tienen los programadores? Aparte de la razón obvia (cada día
aparecen cientos de aplicaciones, cada una haciendo las cosas a su
manera), debemos tener en cuenta la compatibilidad. Ampliar el conjunto
de instrucciones de un procesador implica que
los modelos anteriores no son compatibles
con ellas; imagina que te compras un móvil y un año después no puedes
ejecutar nuevas apps porque necesitan las instrucciones de los nuevos
procesadores.
Por eso, añadir nuevas instrucciones a un procesador
es algo que no se hace a la ligera.
A lo largo de la historia de la informática estas decisiones han tenido
grandes consecuencias en el mercado. Pero hay veces en las que los
fabricantes consideran que tienen que tomar esa decisión; especialmente
para dar soporte a métodos de programación comunes.
Y si hay algo común en la actualidad, eso es Javascript. Este
lenguaje se usa en la inmensa mayoría de las páginas web que visitas; es
la clave que ha permitido crear páginas más completas, que responden a
nuestras acciones y con un diseño más moderno. Pero ejecutar Javascript
no es precisamente el lenguaje más optimizado. Y por eso puede que hayas
notado problemas en algunas páginas; especialmente en ordenadores o
smartphones de gama baja.
Es por eso que ARM va a hacer una excepción, e incluirá
instrucciones pensadas específicamente para Javascript.
ARM es la arquitectura en la que se basan la mayoría de los
procesadores diseñados para móvil; hace décadas fue creada para
servidores y equipos que no debían consumir mucho. Con la llegada de los
smartphones, se ha convertido prácticamente en la plataforma por
defecto.
La próxima versión de ARM, la 8.3, incluirá nuevas instrucciones que
manejan valores de la manera en la que Javascript prefiere; por lo
tanto, deberíamos notar grandes diferencias en el rendimiento de páginas
web y aplicaciones que usen mucho ese lenguaje. Sin embargo,
sólo notaremos el cambio en navegadores que se hayan actualizado para usar las nuevas instrucciones.
ARM no es la primera que ha pensado algo parecido. Apple ya incluyó
nuevas instrucciones pensadas especialmente para Javascript en el nuevo
A12; el procesador que encontramos en la última generación de iPhone, el
XS, XS Max y XR. Sin embargo, el navegador Safari aún no hace uso de
estas instrucciones.
Esta novedad es llamativa porque está pensada para un tipo concreto
de lenguaje; que, de hecho, mucha gente no considera un “verdadero”
lenguaje de programación. Es todo un indicador de cómo ha cambiado el
desarrollo de aplicaciones en los últimos años.