mike ceniza dedicado en su blog las implicaciones prácticas de cambiar a la arquitectura de 64 bits en el iPhone 5S. Este artículo se basa en sus hallazgos.
El motivo de este texto se debe principalmente a la gran cantidad de desinformación que se está difundiendo sobre lo que realmente significa para los usuarios y el mercado el nuevo iPhone 5s con procesador ARM de 64 bits. Aquí intentaremos brindar información objetiva sobre el rendimiento, las capacidades y las implicaciones de esta transición para los desarrolladores.
"64 bits"
Hay dos partes de un procesador a las que puede hacer referencia la etiqueta "X-bit": el ancho de los registros enteros y el ancho de los punteros. Afortunadamente, en la mayoría de los procesadores modernos estos anchos son los mismos, por lo que en el caso del A7 esto significa registros enteros de 64 bits y punteros de 64 bits.
Sin embargo, es igualmente importante señalar lo que NO significa "64 bits": Tamaño de la dirección física de la RAM. La cantidad de bits para comunicarse con la RAM (por lo tanto, la cantidad de RAM que puede admitir un dispositivo) no está relacionada con la cantidad de bits de la CPU. Los procesadores ARM tienen direcciones de entre 26 y 40 bits y se pueden cambiar independientemente del resto del sistema.
- Tamaño del bus de datos. La cantidad de datos recibidos de la RAM o de la memoria intermedia es igualmente independiente de este factor. Las instrucciones individuales del procesador pueden solicitar diferentes cantidades de datos, pero se envían en fragmentos o se reciben de la memoria más de lo necesario. Depende del tamaño del cuanto de datos. El iPhone 5 ya recibe datos de la memoria en cuantos de 64 bits (y tiene un procesador de 32 bits), y podemos encontrar tamaños de hasta 192 bits.
- Todo lo relacionado con punto flotante.. El tamaño de dichos registros (FPU) vuelve a ser independiente del funcionamiento interno del procesador. ARM ha estado usando FPU de 64 bits desde antes de ARM64 (procesador ARM de 64 bits).
Ventajas y desventajas generales.
Si comparamos arquitecturas de 32 bits y 64 bits idénticas, generalmente no son tan diferentes. Esta es una de las razones de la confusión general del público que busca una razón por la que Apple también está migrando a 64 bits en dispositivos móviles. Sin embargo, todo proviene de los parámetros específicos del procesador A7 (ARM64) y de cómo lo usa Apple, no solo del hecho de que el procesador tiene una arquitectura de 64 bits.
Sin embargo, si seguimos mirando las diferencias entre estas dos arquitecturas, encontraremos varias diferencias. La obvia es que los registros de enteros de 64 bits pueden manejar números enteros de 64 bits de manera más eficiente. Incluso antes, era posible trabajar con ellos en procesadores de 32 bits, pero esto generalmente significaba dividirlos en partes de 32 bits, lo que provocaba cálculos más lentos. Por lo tanto, un procesador de 64 bits generalmente puede calcular con tipos de 64 bits tan rápido como con los de 32 bits. Esto significa que las aplicaciones que generalmente utilizan tipos de 64 bits pueden ejecutarse mucho más rápido en un procesador de 64 bits.
Aunque 64 bits no afecta la cantidad total de RAM que puede usar el procesador, puede facilitar el trabajo con grandes cantidades de RAM en un programa. Cualquier programa que se ejecute en un procesador de 32 bits sólo tiene unos 4 GB de espacio de direcciones. Teniendo en cuenta que el sistema operativo y las bibliotecas estándar ocupan algo, esto deja al programa entre 1 y 3 GB para uso de la aplicación. Sin embargo, si un sistema de 32 bits tiene más de 4 GB de RAM, utilizar esa memoria es un poco más complicado. Tenemos que recurrir a forzar al sistema operativo a asignar estos fragmentos más grandes de memoria para nuestro programa (virtualización de memoria), o podemos dividir el programa en múltiples procesos (donde cada proceso nuevamente tiene teóricamente 4 GB de memoria disponible para direccionamiento directo).
Sin embargo, estos "trucos" son tan difíciles y lentos que un mínimo de aplicaciones los utilizan. En la práctica, en un procesador de 32 bits, cada programa sólo utilizará entre 1 y 3 GB de memoria, y se puede utilizar más RAM disponible para ejecutar varios programas al mismo tiempo o utilizar esta memoria como búfer (almacenamiento en caché). Estos usos son prácticos, pero nos gustaría que cualquier programa pudiera utilizar fácilmente fragmentos de memoria superiores a 4 GB.
Ahora llegamos a la afirmación frecuente (en realidad incorrecta) de que sin más de 4 GB de memoria, una arquitectura de 64 bits es inútil. Un espacio de direcciones más grande es útil incluso en un sistema con menos memoria. Los archivos mapeados en memoria son una herramienta útil donde parte del contenido del archivo está vinculado lógicamente a la memoria del proceso sin que sea necesario cargar todo el archivo en la memoria. De este modo, el sistema puede, por ejemplo, procesar gradualmente archivos de gran tamaño que superan con creces la capacidad de la RAM. En un sistema de 32 bits, archivos tan grandes no se pueden mapear en memoria de manera confiable, mientras que en un sistema de 64 bits, es pan comido, gracias al espacio de direcciones mucho mayor.
Sin embargo, el mayor tamaño de los punteros también conlleva una gran desventaja: por lo demás, programas idénticos necesitan más memoria en un procesador de 64 bits (estos punteros más grandes deben almacenarse en algún lugar). Dado que los punteros son una parte frecuente de los programas, esta diferencia puede sobrecargar el caché, lo que a su vez hace que todo el sistema funcione más lento. Entonces, en perspectiva, podemos ver que si simplemente cambiáramos la arquitectura del procesador a 64 bits, en realidad ralentizaría todo el sistema. Por lo tanto, este factor debe equilibrarse con más optimizaciones en otros lugares.
ARM64
El A7, el procesador de 64 bits que alimenta el nuevo iPhone 5s, no es sólo un procesador ARM normal con registros más amplios. ARM64 contiene importantes mejoras con respecto a la versión anterior de 32 bits.
registro
ARM64 contiene el doble de registros enteros que ARM de 32 bits (tenga cuidado de no confundir el número y el ancho de los registros; hablamos del ancho en la sección "64 bits". Por lo tanto, ARM64 tiene registros el doble de ancho y el doble de registros). El ARM de 32 bits tiene 16 registros enteros: un contador de programa (PC - contiene el número de la instrucción actual), un puntero de pila (un puntero a una función en curso), un registro de enlace (un puntero al retorno después del final de la función), y los 13 restantes son para uso de la aplicación. Sin embargo, el ARM64 tiene 32 registros de números enteros, incluido un registro cero, un registro de enlace, un puntero de marco (similar a un puntero de pila) y uno reservado para el futuro. Esto nos deja con 28 registros para uso de aplicaciones, más del doble que ARM de 32 bits. Al mismo tiempo, el ARM64 duplicó el número de registros de números de punto flotante (FPU) de 16 a 32 registros de 128 bits.
Pero ¿por qué es tan importante el número de registros? La memoria es generalmente más lenta que los cálculos de la CPU y la lectura/escritura puede llevar mucho tiempo. Esto haría que el rápido procesador tuviera que seguir esperando memoria y alcanzaríamos el límite natural de velocidad del sistema. Los procesadores intentan ocultar esta desventaja con capas de buffers, pero incluso el más rápido (L1) es aún más lento que el cálculo del procesador. Sin embargo, los registros son celdas de memoria directamente en el procesador y su lectura/escritura es lo suficientemente rápida como para no ralentizar el procesador. El número de registros prácticamente significa la cantidad de memoria más rápida para los cálculos del procesador, lo que afecta en gran medida la velocidad de todo el sistema.
Al mismo tiempo, esta velocidad necesita un buen soporte de optimización por parte del compilador, para que el lenguaje pueda usar estos registros y no tenga que almacenar todo en la memoria general de la aplicación (la lenta).
Conjunto de instrucciones
ARM64 también trae cambios importantes al conjunto de instrucciones. Un conjunto de instrucciones es un conjunto de operaciones atómicas que un procesador puede realizar (por ejemplo, 'AGREGAR registro1 registro2' suma los números en dos registros). Las funciones disponibles para cada idioma se componen de estas instrucciones. Las funciones más complejas deben ejecutar más instrucciones, por lo que pueden ser más lentas.
Lo nuevo en ARM64 son las instrucciones para el cifrado AES, las funciones hash SHA-1 y SHA-256. Entonces, en lugar de una implementación compleja, solo el lenguaje llamará a esta instrucción, lo que acelerará enormemente el cálculo de dichas funciones y, con suerte, agregará seguridad en las aplicaciones. P.ej. el nuevo Touch ID también utiliza estas instrucciones en el cifrado, lo que permite una velocidad y seguridad reales (en teoría, un atacante tendría que modificar el procesador para acceder a los datos, lo cual es poco práctico, por decir lo menos, dado su tamaño en miniatura).
Compatibilidad con 32 bits
Es importante mencionar que el A7 puede ejecutarse completamente en modo de 32 bits sin necesidad de emulación. Significa que el nuevo iPhone 5s puede ejecutar aplicaciones compiladas en ARM de 32 bits sin ninguna ralentización. Sin embargo, entonces no puede utilizar las nuevas funciones ARM64, por lo que siempre vale la pena hacer una compilación especial solo para el A7, que debería funcionar mucho más rápido.
Cambios de tiempo de ejecución
El tiempo de ejecución es el código que agrega funciones al lenguaje de programación, que es capaz de utilizar mientras la aplicación se está ejecutando, hasta después de la traducción. Dado que Apple no necesita mantener la compatibilidad de las aplicaciones (que un binario de 64 bits se ejecuta en 32 bits), podrían permitirse el lujo de realizar algunas mejoras más en el lenguaje Objective-C.
Uno de ellos es el llamado puntero etiquetado (puntero marcado). Normalmente, los objetos y los punteros a esos objetos se almacenan en partes separadas de la memoria. Sin embargo, los nuevos tipos de puntero permiten que las clases con pocos datos almacenen objetos directamente en el puntero. Este paso elimina la necesidad de asignar memoria directamente para el objeto, simplemente cree un puntero y el objeto dentro de él. Los punteros etiquetados solo se admiten en la arquitectura de 64 bits, también debido al hecho de que ya no hay suficiente espacio en un puntero de 32 bits para almacenar suficientes datos útiles. Por lo tanto, iOS, a diferencia de OS X, aún no admitía esta función. Sin embargo, con la llegada de ARM64 esto está cambiando, y iOS ha alcanzado a OS X también en este aspecto.
Aunque los punteros tienen una longitud de 64 bits, en el ARM64 sólo se utilizan 33 bits para la dirección propia del puntero. Y si podemos desenmascarar de manera confiable el resto de los bits del puntero, podemos usar este espacio para almacenar datos adicionales, como en el caso de los punteros etiquetados mencionados. Conceptualmente, este es uno de los mayores cambios en la historia de Objective-C, aunque no es una característica comercializable, por lo que la mayoría de los usuarios no sabrán cómo Apple está haciendo avanzar Objective-C.
En cuanto a los datos útiles que se pueden almacenar en el espacio restante de dicho puntero etiquetado, Objective-C, por ejemplo, ahora lo utiliza para almacenar el llamado recuento de referencias (número de referencias). Anteriormente, el recuento de referencias se almacenaba en un lugar diferente de la memoria, en una tabla hash preparada para ello, pero esto podría ralentizar todo el sistema en el caso de una gran cantidad de llamadas alloc/dealloc/retain/release. La tabla tuvo que bloquearse debido a la seguridad de los subprocesos, por lo que el recuento de referencias de dos objetos en dos subprocesos no se pudo cambiar al mismo tiempo. Sin embargo, este valor se inserta nuevamente en el resto de los llamados isa indicadores. Esta es otra ventaja y aceleración discreta pero enorme en el futuro. Sin embargo, esto nunca podría lograrse en una arquitectura de 32 bits.
En el lugar restante de los punteros a los objetos también se inserta información sobre los objetos asociados, si el objeto tiene una referencia débil, si es necesario generar un destructor para el objeto, etc.. Gracias a esta información, Objective-C runtime es capaz de acelerar fundamentalmente el tiempo de ejecución, lo que se refleja en la velocidad de cada aplicación. Según las pruebas, esto significa una aceleración de entre un 40% y un 50% de todas las llamadas de administración de memoria. Simplemente cambiando a punteros de 64 bits y usando este nuevo espacio.
Záver
Aunque los competidores intentarán difundir la idea de que pasar a una arquitectura de 64 bits es innecesario, ya sabrás que esto es sólo una opinión muy desinformada. Es cierto que pasar a 64 bits sin adaptar el idioma o las aplicaciones no significa nada, incluso ralentiza todo el sistema. Pero el nuevo A7 utiliza un ARM64 moderno con un nuevo conjunto de instrucciones, y Apple se ha tomado la molestia de modernizar todo el lenguaje Objective-C y aprovechar las nuevas capacidades, de ahí la aceleración prometida.
Aquí hemos mencionado una gran cantidad de razones por las que una arquitectura de 64 bits es el paso correcto hacia adelante. Se trata de otra revolución "bajo el capó", gracias a la cual Apple intentará mantenerse a la vanguardia no sólo con el diseño, la interfaz de usuario y el rico ecosistema, sino principalmente con las tecnologías más modernas del mercado.
Mucha gente desinformada de Android/Samsung debería leer este artículo y luego esconderse en un rincón.
Bueno, tenemos que sentir pena por ellos. Durante años excusaron la trágica UX y UI de Android diciendo que tienen el sistema operativo tecnológicamente más avanzado con funciones y ahora descubrieron que nuevamente tienen años de retraso :)
Si una persona no es una oveja y escucha anuncios (y lo hace bien), luego de su experiencia personal puede formarse su propia opinión :-).
Pruebo casi toda la competencia y me formo mi propia opinión.
Para mí, necesito un teléfono móvil nuevo de súper alto rendimiento, porque no gasto mucho en él. Eso es Necesito menos rendimiento por menos precio ;-). Quizás preferiría uno más lento y con una batería más grande.
Por otro lado, el nuevo procak sería útil para el iPad, donde hay muchos juegos :-).
Soy Android/HTC :) porque es bastante divertido para mí y mi pasatiempo es rootear y convertir HW de alta calidad en un luchador rápido. Y iOS no me deja hacer eso. (Ni siquiera es necesario. Más o menos, iOS está diseñado para que todo funcione como debe y no tengas que hacer nada allí. Cuando deje de disfrutar jugando, me compraré una manzana y la disfrutaré). Pero no sé por qué seguís atacándonos como niños. Apple es completamente como Android. Es como comparar Democracia con Dictadura y cosas así... Vi la conferencia cuando se presentó el iPhone 5S y a pesar de que no tengo nada de Apple, me gustó el 64bit y otras mejoras que vinieron. Pero no porque sea un honimír trtko complejo que se sienta detrás de una PC y persigue Android o Apple, sino porque veo el PROGRESO que no me hará esperar por mucho tiempo. La gente debería empezar a trabajar muy duro para no tener tiempo de lidiar con tonterías, por decirlo cortésmente.
contribución constructiva del otro lado :) kiez, abriría los ojos al 99% restante android positivo
tal vez primero deberíamos hablar del 99% de los fanáticos de Apple, luego podremos tener una conversación constructiva.
cosas muy complejas explicadas de forma sencilla... gracias
¡Buen artículo! Sí, estoy de acuerdo en que los usuarios de Android/WP deberían leer este artículo como imprescindible. En lugar de trollear y hablar inteligentemente de "que el 64b es inútil en los móviles"...
probablemente nunca tuviste un wp en tu mano, de lo contrario no tendrías este
Desde sus primeros éxitos en el mercado móvil, Samsung no ha hecho más que difamar a la competencia, pero en esencia ha seguido sus pasos todo este tiempo. Apple siempre ha sido un modelo a seguir para las empresas de tecnología, y si se centran sólo en burlarse y desinformar constantemente a los clientes, pronto tropezarán. Apple siempre ha seguido su propio camino y siempre ha sido una cuestión de muy buen momento, del que carecen muchas empresas competidoras en la industria.
Se podría decir que Samsung se está subiendo a la ola y aprovechando sus posibilidades. Apostó por Android, tiene un HW excelente, hace muchas cosas él mismo, tiene un soporte decente. Y como cualquier empresa asiática depredadora, utiliza todas las posibilidades de la publicidad. Y por supuesto roba y copia. Lo que hace bien el "ojo rasgado" es copiar. Han calculado muy bien que es mucho más barato que seguir su propio camino, paso a paso. Y como empresa fuerte, puede permitírselo. Todavía…
Simplemente no entiendo por qué la velocidad del teléfono aumenta constantemente, dame algunos ejemplos de para qué lo usas, poco a poco no tiene sentido para mí aumentar el rendimiento del teléfono móvil, pero eliminaré la palabra marketing. .
Juegos, juegos mal optimizados. Además, Transport Tycoon en iPad 3 no se ejecuta tan fluidamente ni con la misma resolución que en el escritorio. Ejemplo.
Simplemente no entiendo por qué la velocidad del teléfono sigue aumentando, dame algunos ejemplos de para qué lo usas, poco a poco no tiene sentido para mí aumentar el rendimiento del teléfono móvil, si le quito la palabra marketing. .
Para procesamiento de vídeo, audio e imágenes. Y a los juegos.
Cualquiera que utilice un iPhone sólo para llamar, enviar mensajes de texto y ocasionalmente leer o enviar correos electrónicos y ocasionalmente navegar por Internet necesitará un iPhone 4. Creo que hay muchos usuarios de este tipo. No todo el mundo necesita el mejor teléfono del mundo :-)
oveja
¿No significa nada para usted el equilibrio físico entre hardware y software? Esto me recuerda un poco a finales del siglo XIX, cuando los físicos de aquella época decían que todo en física ya estaba descubierto y no había necesidad de continuar (una década antes de la teoría de la relatividad y tres antes de la teoría cuántica) .
La búsqueda de lo mejor nunca termina. A veces el software lidera y otras veces el hardware. Pero si uno se atasca, no dejará ir al otro. No seremos tan egoístas con nuestros descendientes :) Entonces, según tu comentario, un teléfono más rápido permitirá aplicaciones más potentes, que podrán hacer mucho más que discos. Y una vez cosas para las que ni siquiera las computadoras actuales son suficientes. El futuro es apasionante.
Exactamente :)
Buen artículo, pero no entiendo por qué Apple no puso 7 GB de RAM en el A2. Sí, la multitarea de iOS no es tal que necesariamente se necesiten 2 GB, pero considerando el doble de longitud del puntero de memoria, sería mucho más adecuado.
Pero, por lo demás, estoy de acuerdo en que un procesador de 64 bits es "innecesario" para un teléfono móvil, del mismo modo que no era necesario una pantalla Retina o un ratón óptico en lugar de una bola; todos estos inventos fueron etiquetados como "innecesarios", pero en mi opinión, La palabra correcta es "atemporal", porque una vez debe llegar y Apple no tiene miedo de idear algo nuevo.
Secundo que. Desgraciadamente, ni siquiera "inútil" es una expresión exacta. Innecesario significa algo cuya prioridad una persona desconoce. Eso definitivamente no es cierto. Es posible que Speed no necesite esa velocidad, pero definitivamente la reconocerá. Y cuando el software alcance el nivel del hardware, habrá margen de mejora nuevamente.
Claro, estoy a favor, quiero decir que el iP5 es realmente un teléfono inteligente bastante rápido, por lo que el 5S no tendría que ser de 64 bits en absoluto. Pero un día alguien tuvo que lidiar con eso nuevamente y fue Apple y así fue. Desde que tengo uso de razón, los expertos también han hablado de que los procesadores de 64 bits serán inútiles incluso en los ordenadores.
Para mí, como un profano en TI que casi suspendió la matrícula, la conclusión es importante. Todo el artículo (apoyado en los comentarios) me parece bastante esclarecedor, y aunque no sabré explicarlo, el A7 con arquitectura de 64 bits es un paso adelante. Gracias por la info.
Editaría el título del artículo, ya que es una medida de marketing. Cada innovación es esencialmente un movimiento de marketing. :-)
No creo. Por ejemplo, Samsung utiliza estrategias de marketing. Aparecen con RAM, que el iPhone no necesita en absoluto. Se salen con la suya con funciones que no se pueden utilizar en absoluto. Su aumento intencional del rendimiento del procesador para las pruebas. Etc. Eso es marketing, aunque sí, es engañoso, cosa que no deberían salirse con la suya ;)