johelrc
21/05/10, 21:04:55
Hola a todos
Ha raíz del reciente lanzamiento de Android 2.2 (Froyo para el proyecto) he leído en muchos sitios y por muchas personas preguntando si es posible que el rendimiento sea tan brutal como ellos aseguran (2 a 5 veces más rápido).
Yo quiero brindar mi opinión al respecto como profesional en ciencias de la computación y habiendo trabajado en desarrollo de sistemas operativos y distribuidos sobre el punto si es posible o no ver un rendimiento tal con el mismo hardware.
Primero que voy a dar una clase rápida de conceptos básicos que necesitamos para aclarar el asunto:
OS: el sistema operativo es el encargado de asignar recursos de una computadora así como repartir las tareas y asignar prioridades de ejecución (cual se ejecuta primero y porqué), el OS actúa como un administrador de recursos del equipo.
Lenguaje de programación: es un "protocolo" o un conjunto de reglas que establecen un "paradigma" para el comportamiento de una máquina virtual o real, es generalmente asociado a una "capa de software".
Capa de software: toda máquina tiene un lenguaje nativo, que ella habla y entiende, en la mayor parte de las computadoras este es el "lenguaje ensamblador", que es un conjunto de instrucciones del procesador de la computadora en binario con nemónicos, el dilema radica en la extrema dificultad de programar en este lenguaje, así como el tiempo el desarrollo lo vuelve muy costoso, así se empezaron a construir traductores (compiladores) que construían a partir de programas más sencillos estos más complejos, aunque la calidad del programa decaía el tiempo de desarrollo era menor, así los costos eran menos también, se empezaron a utilizar traductores sobre traductores añadiendo más y más capas de software, traduciendo de un lenguaje a otro o bien entre arquitecturas.
Compilador: es un programa que construye otros programas, utilizando un lenguaje determinado (Java, C, C++, etc) construye un programa "traducido" a una arquitectura distinta.
Librerias o bibliotecas: son conjuntos de instrucciones precompilados, que forman el paquete básico de funciones de un lenguaje, en palabras más sencillas, para no reprogramar una ventana por ejemplo, el programador utiliza una que ya forma parte de una librería, aquí el compilador puede tomar la ventana de la librería y replicarla en el programa (haciendo el programa más portable, pero más grande) o bien solo dejar la referencia.
JIT Compiler: Just In Time Compiler o compilar de tiempo real o justo a tiempo, es un concepto que apareció por primera vez en compiladores java, y el primero fue fabricado por IBM para optimizar el comportamiento de java en su arquitectura as400. Su potencia no radica tanto en el compilador (que puede generar mejor código destino) sino en las librerias que están optimizadas para la arquitectura destino, eso si el OS utiliza las librerías de forma nativa (forman parte del compilador, pero el OS las referencia).
MFLOPS: millones de funciones de punto flotante por segundo, es decir, cuantas divisiones por ejemplo puede realizar un procesador atravez de la arquitectura (software y hardware) en un segundo, medido en millones.
Programa Benchmark: es un programa diseñado para determinar el rendimiento o performance de un equipo, por regla general, un programa de benchmark hace uso los recursos que pone a disposición el OS, es decir, si usted llega a analizar el rendimiento de una empresa usted se fija en la "metodología" que el administrador del lugar aplica, aunque la fábrica por ejemplo cuente con equipo modernisimo si el equipo no se usa, el que realiza el estudio utiliza lo que vé que se está usando por disposición del administrador del lugar.
Ahora bien, es posible que el JIT de Froyo lograra un rendimiento del 450%, por supuesto que sí.
Mi teoría
Un salto tecnológico
Froyo trae consigo unas librerías optimizadas para la arquitectura actual, es decir, si por ejemplo el qualcomm snapdragon trae un potente coprocesador matemático (muy probable) este no se ha usado hasta ahora, porqué? por compatibilidad hacia atrás, porque los otros procesadores más viejos no contaban con este coprocesador, o bien las librerías no tenían las instrucciones para utilizar estas características, por consiguiente estaba corriendo software con instrucciones viejas en hardware nuevo dejando muchos features en espera, cosa que no pasa con Apple por ejemplo, donde ellos son amos y señores de su arquitectura y las librerías siempre han sido optimizadas para esta arquitectura, sacándole el máximo provecho, por eso hasta ahora vemos un rendimiento similar en teléfonos android y apple, aunque los apple tengan un hardware más viejo su software es uno a uno, cosa que no pasa en android, hasta ayer.
En realidad el compilador no es la razón directa, sino las librerías que lo acompañan, porque ellas ya utilizan mejor la arquitectura, sin embargo yo recomiendo recompilar las aplicaciones con el nuevo JIT que aunque no varíe el API (no lo conozco todavía) es seguro que el JIT genera mejor código destino y el programa resultante se ejecute mejor.
Como Android es multiplataforma, google mantuvo compatibilidad hasta el 2.1, ahora 2.2 con el cambio de librerías es muy probable que muchos celulares android viejos no puedan llegar a 2.2 sino hasta 2.1, dada sus limitaciones de hardware, o bien google saque imágenes con librerías capadas que no brinden el rendimiento que si da la arquitectura nueva. Un ejemplo de esto es que antes de froyo no se podía direccionar más de 256m, aunque teléfonos como el nexus o el desire contaban con 512 no era posible para el OS utilizar estas áreas de memoria, probablemente porque el MAR del procesador no podía direccionar más allá de 256, ahora que se habilitó esta posibilidad, el MAR de los procesadores viejos siguen sin poder direccionar 512 (porque es físico, parte del hardware) así que ellos no podrán dar el salto.
En resumen, lo que vemos en froyo y posiblemente veremos a futuro con estas cosas es que el hardware está adelante del software (como es normal) pero casi nunca van de la mano (como el iphone), es mi pensar que el rendimiento actual del nexus es muy similar al del ipad y superior al iphone (mucho más), si son ciertos los rumores de que el nuevo iphone viene con un a4, no veremos un teléfono muy distinto y que no haga muchas cosas distintas a lo que el nexus puede hacer con froyo, bien por google que parece que ya está más involucrado con Android.
Saludos a todos, cualquier crítica y sugerencia será bien recibida.
Ha raíz del reciente lanzamiento de Android 2.2 (Froyo para el proyecto) he leído en muchos sitios y por muchas personas preguntando si es posible que el rendimiento sea tan brutal como ellos aseguran (2 a 5 veces más rápido).
Yo quiero brindar mi opinión al respecto como profesional en ciencias de la computación y habiendo trabajado en desarrollo de sistemas operativos y distribuidos sobre el punto si es posible o no ver un rendimiento tal con el mismo hardware.
Primero que voy a dar una clase rápida de conceptos básicos que necesitamos para aclarar el asunto:
OS: el sistema operativo es el encargado de asignar recursos de una computadora así como repartir las tareas y asignar prioridades de ejecución (cual se ejecuta primero y porqué), el OS actúa como un administrador de recursos del equipo.
Lenguaje de programación: es un "protocolo" o un conjunto de reglas que establecen un "paradigma" para el comportamiento de una máquina virtual o real, es generalmente asociado a una "capa de software".
Capa de software: toda máquina tiene un lenguaje nativo, que ella habla y entiende, en la mayor parte de las computadoras este es el "lenguaje ensamblador", que es un conjunto de instrucciones del procesador de la computadora en binario con nemónicos, el dilema radica en la extrema dificultad de programar en este lenguaje, así como el tiempo el desarrollo lo vuelve muy costoso, así se empezaron a construir traductores (compiladores) que construían a partir de programas más sencillos estos más complejos, aunque la calidad del programa decaía el tiempo de desarrollo era menor, así los costos eran menos también, se empezaron a utilizar traductores sobre traductores añadiendo más y más capas de software, traduciendo de un lenguaje a otro o bien entre arquitecturas.
Compilador: es un programa que construye otros programas, utilizando un lenguaje determinado (Java, C, C++, etc) construye un programa "traducido" a una arquitectura distinta.
Librerias o bibliotecas: son conjuntos de instrucciones precompilados, que forman el paquete básico de funciones de un lenguaje, en palabras más sencillas, para no reprogramar una ventana por ejemplo, el programador utiliza una que ya forma parte de una librería, aquí el compilador puede tomar la ventana de la librería y replicarla en el programa (haciendo el programa más portable, pero más grande) o bien solo dejar la referencia.
JIT Compiler: Just In Time Compiler o compilar de tiempo real o justo a tiempo, es un concepto que apareció por primera vez en compiladores java, y el primero fue fabricado por IBM para optimizar el comportamiento de java en su arquitectura as400. Su potencia no radica tanto en el compilador (que puede generar mejor código destino) sino en las librerias que están optimizadas para la arquitectura destino, eso si el OS utiliza las librerías de forma nativa (forman parte del compilador, pero el OS las referencia).
MFLOPS: millones de funciones de punto flotante por segundo, es decir, cuantas divisiones por ejemplo puede realizar un procesador atravez de la arquitectura (software y hardware) en un segundo, medido en millones.
Programa Benchmark: es un programa diseñado para determinar el rendimiento o performance de un equipo, por regla general, un programa de benchmark hace uso los recursos que pone a disposición el OS, es decir, si usted llega a analizar el rendimiento de una empresa usted se fija en la "metodología" que el administrador del lugar aplica, aunque la fábrica por ejemplo cuente con equipo modernisimo si el equipo no se usa, el que realiza el estudio utiliza lo que vé que se está usando por disposición del administrador del lugar.
Ahora bien, es posible que el JIT de Froyo lograra un rendimiento del 450%, por supuesto que sí.
Mi teoría
Un salto tecnológico
Froyo trae consigo unas librerías optimizadas para la arquitectura actual, es decir, si por ejemplo el qualcomm snapdragon trae un potente coprocesador matemático (muy probable) este no se ha usado hasta ahora, porqué? por compatibilidad hacia atrás, porque los otros procesadores más viejos no contaban con este coprocesador, o bien las librerías no tenían las instrucciones para utilizar estas características, por consiguiente estaba corriendo software con instrucciones viejas en hardware nuevo dejando muchos features en espera, cosa que no pasa con Apple por ejemplo, donde ellos son amos y señores de su arquitectura y las librerías siempre han sido optimizadas para esta arquitectura, sacándole el máximo provecho, por eso hasta ahora vemos un rendimiento similar en teléfonos android y apple, aunque los apple tengan un hardware más viejo su software es uno a uno, cosa que no pasa en android, hasta ayer.
En realidad el compilador no es la razón directa, sino las librerías que lo acompañan, porque ellas ya utilizan mejor la arquitectura, sin embargo yo recomiendo recompilar las aplicaciones con el nuevo JIT que aunque no varíe el API (no lo conozco todavía) es seguro que el JIT genera mejor código destino y el programa resultante se ejecute mejor.
Como Android es multiplataforma, google mantuvo compatibilidad hasta el 2.1, ahora 2.2 con el cambio de librerías es muy probable que muchos celulares android viejos no puedan llegar a 2.2 sino hasta 2.1, dada sus limitaciones de hardware, o bien google saque imágenes con librerías capadas que no brinden el rendimiento que si da la arquitectura nueva. Un ejemplo de esto es que antes de froyo no se podía direccionar más de 256m, aunque teléfonos como el nexus o el desire contaban con 512 no era posible para el OS utilizar estas áreas de memoria, probablemente porque el MAR del procesador no podía direccionar más allá de 256, ahora que se habilitó esta posibilidad, el MAR de los procesadores viejos siguen sin poder direccionar 512 (porque es físico, parte del hardware) así que ellos no podrán dar el salto.
En resumen, lo que vemos en froyo y posiblemente veremos a futuro con estas cosas es que el hardware está adelante del software (como es normal) pero casi nunca van de la mano (como el iphone), es mi pensar que el rendimiento actual del nexus es muy similar al del ipad y superior al iphone (mucho más), si son ciertos los rumores de que el nuevo iphone viene con un a4, no veremos un teléfono muy distinto y que no haga muchas cosas distintas a lo que el nexus puede hacer con froyo, bien por google que parece que ya está más involucrado con Android.
Saludos a todos, cualquier crítica y sugerencia será bien recibida.