Las computadoras portátiles generalmente tienen como máximo cuatro núcleos, y los núcleos dobles son probablemente más comunes. Recientemente he cambiado de quadcore a dualcore y puedo confirmar que hay un número limitado de casos de uso para quadcore, incluso con tareas intensivas de CPU.
Por otro lado, en los teléfonos móviles, los quadcores, hexacores y octacores parecen ser comunes. ¿Por qué? ¿Qué tareas pueden utilizarlos?
Entiendo que big.LITTLE puede ser parte de la respuesta. Es decir, el beneficio principal de tantos núcleos no es la capacidad de usarlos todos simultáneamente, sino más bien usar un núcleo con consumo de energía apropiado para la carga de trabajo actual. Sin embargo, por ejemplo, el Snapdragon 625 tiene ocho núcleos Cortex-A53, lo que no parece ser un caso para big.LITTLE.
Quizás la arquitectura ARM tenga un punto más bajo de rendimiento óptimo por vatio. Es decir, tener un solo núcleo sintonizado para un rendimiento óptimo por vatio resulta en un rendimiento más bajo en ARM que en Intel. Por lo tanto, se utilizan más núcleos para ofrecer el rendimiento. Esto es solo una hipótesis.
Pero incluso en este caso, no veo qué carga de trabajo puede usar eficientemente, digamos, ocho núcleos en un teléfono móvil. En las computadoras portátiles, puedo imaginar algunas como la compilación completa (no incremental) de un proyecto. ¿Pero en los teléfonos?
- Los juegos pueden requerir mucho rendimiento, pero generalmente requieren rendimiento de GPU en lugar de CPU, ¿no?
- Teóricamente, múltiples núcleos podrían acelerar la compilación de Android Lollipop / Marshmallow AOT al instalar o al actualizar (es decir, la fase "Optimización de aplicaciones 3/121"). Sin embargo, no estoy seguro de si esto puede utilizar múltiples núcleos. Hasta donde recuerdo el código, solo se está compilando una aplicación a la vez, pero tal vez haya algún paralelismo dentro del proceso de compilación en sí.
- Además, Android 7+ podría utilizar múltiples núcleos al compilar. Pero dado que, según los informes, se compila cuando está inactivo y cargando, el beneficio parece ser bastante mínimo. Al menos cuando uno carga el teléfono durante la noche, realmente no me importa si tarda 30 minutos o dos horas en tal situación.
Respuestas:
Como ya ha notado, la estrategia de combinación big.LITTLE (técnicamente, HMP , clústeres heterogéneos de multiprocesamiento ) es la razón principal de tantos (y a veces abrumadoramente) núcleos. Un dispositivo móvil a menudo se encuentra con múltiples escenarios, incluidos los de carga pesada y de carga ligera.
Un ejemplo extremo de clase de consumidor es el Helio X20 de MediaTek, que tiene 2 núcleos A72 orientados al rendimiento, 4 núcleos A53 balanceados, más 4 núcleos A35 de bajo consumo. Eso es muy flexible en diferentes casos de uso. Sin embargo, creo que
8 núcleos y2 grupos suelen ser suficientes.También hay otro ejemplo de escritorio, la serie Snapdragon 800 de Qualcomm (S 800, S 801 y S 805). Hay solo 4 núcleos de la misma microarquitectura en cada SoC, con 2 sincronizados más alto y 2 sincronizados más bajo. Qualcomm creó estos SoC porque tenían mucha confianza en su propia microarquitectura (Krait 400 y Krait 450).
Para los juegos, incluso si aparentemente exigen el rendimiento de la GPU en lugar de la CPU, aún ponen una gran carga en la CPU. Una GPU no puede funcionar sola sin otra cosa que le proporcione datos para procesar, y ese es uno de los principales trabajos que realiza la CPU mientras juegas. En la mayoría de los casos de juego, la GPU solo muestra gráficos, mientras que todos los demás trabajos, como cargar datos, recursos y activos, y calcular la mecánica en el juego, como el sistema, el entorno y la física, son realizados por la CPU. No observará una velocidad de fotogramas más alta si actualiza su GPU mientras se queda con una CPU de gama baja.
Una razón secundaria es cómo Android utiliza los recursos de la CPU . Android prácticamente crea su propio entorno de aplicación. No usa nada más que códigos (y API) de Java, pero tiene su propia máquina virtual llamada Dalvik, que luego fue reemplazada por ART (API Nivel 21). Los APK tienen sus códigos ejecutables en un formato "neutral", al igual que los
.class
archivos en Java. Antes de que se ejecuten, los códigos se compilan una vez más en las instrucciones nativas de la máquina [1] . El proceso de compilación es multiproceso y puede utilizar múltiples núcleos para aumentar el rendimiento.Y cuando una aplicación se está ejecutando, hay varios otros procesos y mecanismos (como el recolector de basura) que se ejecutan junto o paralelos a la aplicación. Más núcleos pueden permitir que los procesos de apoyo se ejecuten de manera más eficiente, así como la aplicación principal.
1. Si usa un identificador de tipo de archivo, encontrará que los archivos dex "optimizados" están en formato ELF, mientras que los archivos dex "neutrales" están en un formato propio.
Otra razón menor es que los núcleos ARM no pueden funcionar tan rápido como un chip Intel x86 . La microarquitectura Intel x86 se remonta a 1976, cuando el chip Intel 8086 comenzó a diseñarse, lo que significa que el x86 se ha desarrollado durante mucho tiempo. Un solo núcleo ARM Cortex-A73 moderno de alta gama es tan poderoso como un núcleo Intel Clarkdale, tomando el Core i5-660 como ejemplo (GeekBench, un solo núcleo). Esto se debe a que x86 es una microarquitectura CISC mientras que ARM es un RISCmicroarquitectura Seguramente no quieres un teléfono que se vuelva lento con solo dos o más aplicaciones activas. Más núcleos ayudarán a aliviar la presión. Es por eso que los SoC de doble núcleo son relativamente populares solo en relojes inteligentes. ¿Quién necesita rendimiento en un reloj inteligente?
Curiosamente, más núcleos resultarán en menos potencia que un solo núcleo en la misma carga . La relación entre la frecuencia de la CPU y el consumo de energía es más que lineal, por lo que el doble de la frecuencia siempre resultará en exigir más del doble, o incluso 3 veces o 4 veces más energía, al tiempo que ofrece menos del doble del rendimiento (debido a otras limitaciones de recursos como el caché ) Por lo tanto, 4 núcleos pueden vencer fácilmente a un solo núcleo con la misma carga, proporcionando un mejor rendimiento y al mismo tiempo demandando menos energía.
Otras lecturas:
fuente
La razón es tan simple como complicada.
La respuesta corta es "porque el mercado de la telefonía móvil nunca ha sido y no es impulsado por Intel".
La respuesta larga es demasiado larga para reanudar aquí, pero el concepto básico es que Intel ha dominado el mercado de PC durante años con todos los medios posibles, hasta el punto de pagar y corromper (y ser multado por esto) para que sus CPU sean el primera y única opción para fabricantes de PC.
Tener el control total del mercado le ha permitido a Intel aumentar los precios de la CPU mientras decide artificialmente qué características y cuánta potencia de procesamiento deberían haber deseado los usuarios, y si analiza un poco la historia de Intel, notará que su principal fortaleza radica básicamente en el aumento de la frecuencia de las CPU, por lo que nunca trató de hacer algo realmente inteligente o innovador; y no lo necesitaba, porque solo puede decirle a la gente "no necesitas más núcleos, pero tengo estas CPU nuevas y jugosas que funcionan 100 MHz más rápido". Al mismo tiempo, podría vender CPU multinúcleo en el mercado de servidores a precios absurdamente altos (porque los servidores siempre han necesitadotoneladas de potencia paralela, hasta el punto de que hay una tendencia actual al tratar de realizar servidores que usan ... ¿adivina qué? Cientos de CPU de tu teléfono barato trabajando en paralelo)
Esto, a su vez, se ha reflejado en la comunidad de desarrolladores que nunca se ha dado cuenta de la importancia de la programación paralela, por lo que muchos, si no la mayoría, nunca se molestaron en usar más de un hilo a la vez, o, para expresarlo en un técnica, haciendo que su software haga más de una tarea a la vez. Lo cual, por cierto, tiene sentido cuando el 99% de su base de clientes tiene dos núcleos como máximo. Lamentablemente, esto ha llevado a la leyenda de que los algoritmos paralelos son realmente difíciles de implementar y se aplican solo a un pequeño subconjunto de problemas.
En cambio, finalmente, el mercado móvil nunca ha visto el éxito de Intel; todo lo contrario, en realidad, ya que sucede la mayoría de las veces que Intel intenta hacer algo diferente de la arquitectura X86 habitual. Por lo tanto, la falta de influencia y control del mercado, el otro productor de CPU ha ido en la dirección que ha sido la normalidad durante siglos fuera del mercado de PC: computación paralela.
fuente
Están ocurriendo dos factores, uno muy práctico y el otro histórico.
La razón práctica es el uso de arquitecturas mixtas en los teléfonos. El consumo de energía es crítico para los teléfonos y los teléfonos pasan mucho tiempo en modos donde requieren muy poco rendimiento. Tiene sentido tener algunos núcleos optimizados para un consumo de energía mínimo cuando se necesita poco rendimiento, mientras que algunos núcleos están optimizados para proporcionar el máximo rendimiento cuando sea necesario.
La otra razón es en gran parte histórica. Hasta 2005 más o menos, las CPU de escritorio eran todos núcleos únicos. La mejora del rendimiento de la CPU de escritorio consistió casi exclusivamente en hacer un núcleo que pueda ejecutar tantas instrucciones por segundo como sea posible. Incluso hoy en día, tanto software de escritorio no puede aprovechar al máximo los múltiples núcleos que muchos preferirían una CPU con 4 núcleos sobre una CPU de 8 núcleos con un 20% más lento.
Obtener el mayor rendimiento posible de un solo núcleo requiere enormes cantidades de espacio en la CPU. Se trata de bienes inmuebles que de otro modo podrían utilizarse para proporcionar más núcleos. Esta es la razón por la cual las CPU más nuevas de Kaby Lake de Intel alcanzan un máximo de 4 núcleos y la gente las compra porque cada núcleo es más rápido que los núcleos de sus predecesores. Para muchos, son una actualización incluso de las CPU con un conteo de núcleos más alto.
Con el tiempo, espere ver mucho más software de escritorio totalmente optimizado para admitir más núcleos. A medida que eso suceda, las compensaciones de ingeniería comenzarán a favorecer más núcleos que núcleos más rápidos en las computadoras de escritorio. Si bien es probable que los núcleos sean aún más rápidos, comenzará a ver personas que prefieren una CPU de 8 núcleos a una CPU de 4 núcleos, incluso si cada núcleo es un 20% más lento. Los diseñadores de chips seguirán el mercado.
fuente
Es crucial que un teléfono pueda proporcionar potencia computacional en ráfagas cortas (necesitamos que ciertas aplicaciones sean rápidas) pero también evitar el sobrecalentamiento (la disipación de calor es mucho más difícil para los teléfonos que para las computadoras portátiles o PC). Para lograr esto, los arquitectos diseñan teléfonos para usar un solo núcleo cuando la carga de trabajo es ligera y proporcionan núcleos adicionales para aumentar el rendimiento cuando sea necesario. Si los teléfonos usaran menos núcleos grandes, el sobrecalentamiento se convertiría en un problema incluso cuando la carga de trabajo sea bastante ligera.
Fuente: Un curso de arquitectura informática de nivel de posgrado.
fuente
Primero, la máquina virtual Java puede beneficiarse históricamente de múltiples núcleos más que el software de escritorio típico. Incluso si escribe una aplicación de subproceso único en Java, se ejecutará más rápido en un multinúcleo porque la mayor parte del código del recolector de basura se ejecutará junto con su aplicación.
En segundo lugar, están sucediendo muchas cosas en segundo plano en su teléfono: actualizaciones automáticas, descargas de anuncios, software antivirus, administración del módulo GSM, etc. En una computadora portátil, todas estas tareas apenas mantendrían ocupado un núcleo, pero los núcleos ARM están mucho menos potente, por lo que es posible que desee tener al menos un par de esos dedicados a tareas en segundo plano si desea un sistema receptivo.
Finalmente, hay marketing. No muchos usuarios son capaces de evaluar si se beneficiarían de 8 núcleos, pero un teléfono inteligente de 8 núcleos ciertamente suena más caro que uno de 2 o 4 núcleos.
fuente
Las respuestas hasta ahora explican algunas facetas del problema que conduce a este abrumador número de núcleos de CPU en los teléfonos Android. Lee eso de nuevo; Teléfonos Android. El iPhone ha logrado quedarse con solo un par de núcleos durante años y aún funciona mucho mejor que cualquier buque insignia de Android.
Los diseñadores de Android hicieron una gran apuesta al decidir elegir la programación Java y, como consecuencia, la JVM como el tiempo de ejecución de las aplicaciones. Java, debido a sus principios de diseño, resuelve el problema de la necesidad de compilar y construir código para cada arquitectura de CPU antes de que se pueda ejecutar sacrificando el rendimiento. Java presenta una máquina virtual pesada y voluminosa, generalmente llamada JVM. La JVM realmente emula una CPU a nivel de software para evitar la necesidad de compilar código por separado para cada dispositivo. Piense en la JVM como una CPU virtual que tiene las mismas propiedades independientemente del dispositivo que la ejecute, por lo que el código solo debe compilarse una vez para la JVM y luego podría ejecutarse en todos los dispositivos. Esto permite a los fabricantes lanzar cualquier hardware que deseen antes de tener que preocuparse por la compatibilidad de las aplicaciones.
El JVM en sí mismo es simplemente una especificación y las personas son libres de desarrollar su propio JVM siempre que cumpla con esta especificación. El JVM original de Android se llamaba Dalvik. Hoy en día Google ha reemplazado eso con ART.
¿Cuál es el problema con JVM? Es un software pesado que consume muchos recursos informáticos. Agregue a esto algunas otras propiedades del lenguaje Java, como Garbage Collection y el consumo de recursos de la JVM simplemente se vuelve demasiado para un dispositivo con una potencia de hardware modesta. Cada aplicación y servicio del sistema abierto en su dispositivo es en sí mismo una instancia de ART JVM y ahora puede concluir que administrarlos a todos requiere un hardware realmente capaz. Las cosas empeorarán aún más cuando exista la necesidad de dibujar interfaces de usuario.
Cada aplicación se ejecuta en varios subprocesos. Cada núcleo de CPU puede ejecutar solo un subproceso a la vez. Cada aplicación tiene un hilo principal en el que hace las cosas relacionadas con la interfaz de usuario. Podría haber muchos más subprocesos por aplicación para acceder a archivos, red, etc. Generalmente, hay más aplicaciones (y servicios del sistema) abiertas que núcleos de CPU y, como resultado, generalmente hay muchos más subprocesos que núcleos de CPU. Por lo tanto, cada núcleo tiene que cambiar entre procesar diferentes subprocesos constantemente, haciendo un poco de cada uno y pasando al siguiente. Este cambio lleva mucho tiempo para la CPU y, en el caso de que las aplicaciones sean esencialmente JVM, esta tarea se vuelve aún más exhaustiva.
Según esta explicación, se podría deducir que Android necesita un hardware potente para funcionar sin problemas. Las primeras generaciones de dispositivos Android fueron famosos por retrasos, fallas y muchas otras cosas desafortunadas. Pero a lo largo de los años, estos problemas se han resuelto principalmente confiando en un hardware potente.
Por otro lado, las aplicaciones de iOS se compilan en código máquina nativo y, por lo tanto, no necesitan la virtualización. El lenguaje utilizado y el sistema operativo también son más eficientes y, por lo tanto, permiten que estos dispositivos permanezcan suaves sin la necesidad de un conjunto de chips excesivo.
fuente
Resumiendo todo lo anterior, puedo decir que los casos de uso de PC y teléfono son bastante diferentes. La mayoría de las veces la PC se usa en una o dos aplicaciones (por supuesto, el navegador con muchas pestañas requiere muchos núcleos de CPU, puede retrasarse incluso en la parte superior i-3), los teléfonos se usan para realizar múltiples tareas. Al menos conexión de red, interfaz de usuario, activadores del sistema, notificaciones. Si abre el administrador de tareas en la PC, también hay muchos procesos, pero utilizan menos del% de potencia de la CPU, incluso en el viejo Core 2 duo. 4 núcleos es bastante barato (MTK 65x2 costaba 1 $ al inicio para OEM) También es RIESGO vs CISC cuando la última falta de rendimiento por núcleo. ¡Energía eficiente! = Potente, como podemos ver aquí . Multi-core es perfecto para dispositivos móviles, ya que no requiere una gran carga pesada de la banda de rodadura y una experiencia dirigida a múltiples tareas (pero podemos ver que los iPhones necesitan menos núcleos y RAM debido a un buen softwarecomo en este video u otros )
fuente
Creo que uno de los principales factores impulsores más allá de un 4 u 8 (para configuraciones grandes: pequeñas) es solo el marketing en este momento.
Un gran problema del alto conteo de núcleos es cuando considera el tamaño de la memoria. Normalmente en las aplicaciones de escritorio, cuando desea mejorar la utilización de múltiples núcleos, necesita duplicar estructuras y usar mucha más memoria que en una sola aplicación de subprocesos.
Esto no sucede porque la RAM es muy costosa (especialmente en la situación de crisis de RAM 2017/2018). El marketing quiere números altos, pero el control quiere reducir los precios de los componentes. Si ve un saldo de menos de 1 Gigabyte de RAM por núcleo, verá un compromiso fallido.
fuente