Os laptops geralmente têm no máximo quatro núcleos e os dualcores são provavelmente mais comuns. Recentemente, mudei de quadcore para dualcore e posso confirmar que há um número limitado de casos de uso para quadcore, mesmo com tarefas intensivas da CPU.
Por outro lado, em telefones celulares, quadcores, hexacores e octacores parecem ser comuns. Por quê? Que tarefas podem utilizá-los?
Entendo que big.LITTLE pode fazer parte da resposta. Ou seja, o principal benefício de tantos núcleos não é a capacidade de usá-los simultaneamente, mas o uso de um núcleo com consumo de energia apropriado para a carga de trabalho atual. No entanto, por exemplo, o Snapdragon 625 possui oito núcleos Cortex-A53, o que não parece ser o caso de big.LITTLE.
Talvez a arquitetura ARM tenha um ponto mais baixo de desempenho ideal por watt. Ou seja, ter um único núcleo ajustado para obter o desempenho ideal por watt resulta em um desempenho mais baixo no ARM do que na Intel. Portanto, mais núcleos são usados para fornecer o desempenho. Esta é apenas uma hipótese.
Mas mesmo nesse caso, não vejo qual carga de trabalho pode usar com eficiência, digamos, oito núcleos em um telefone celular. Nos laptops, posso imaginar alguns como a compilação completa (não incremental) de um projeto. Mas em telefones?
- Os jogos podem consumir desempenho, mas geralmente exigem desempenho da GPU em vez da CPU, não é?
- Teoricamente, vários núcleos podem acelerar a compilação do Android Lollipop / Marshmallow AOT ao instalar ou ao atualizar (ou seja, a fase “Otimizando aplicativos 3/121”). No entanto, não tenho certeza se isso pode utilizar vários núcleos. Tanto quanto me lembro do código, apenas um aplicativo está sendo compilado por vez, mas talvez haja algum paralelismo no próprio processo de compilação.
- Além disso, o Android 7+ pode utilizar vários núcleos ao compilar. Porém, como ele é compilado quando ocioso e carregando, o benefício parece ser bastante mínimo. Pelo menos quando alguém carrega o telefone da noite para o dia - eu realmente não me importo se leva 30 minutos ou duas horas nesse cenário.
fonte
Respostas:
Como você já observou, a grande estratégia de combinação LITTLE (tecnicamente, HMP , clusters heterogêneos de multiprocessamento ) é a principal razão para muitos (e às vezes muitos) núcleos. Um dispositivo móvel geralmente é executado em vários cenários, incluindo os de carga pesada e de carga leve.
Um exemplo extremo de classe de consumidor é o Helio X20 da MediaTek, que possui 2 núcleos A72 orientados para o desempenho, 4 núcleos A53 balanceados e mais 4 núcleos A35 com eficiência energética. Isso é muito flexível em diferentes casos de uso. No entanto, acho que
8 núcleos2 clusters é geralmente suficiente.Há também outro exemplo de desktop, o Snapdragon série 800 da Qualcomm (S 800, S 801 e S 805). Existem apenas 4 núcleos da mesma microarquitetura em cada SoC, sendo 2 com clock mais alto e 2 com clock mais baixo. A Qualcomm criou esses SoCs porque estava muito confiante em sua própria microarquitetura (Krait 400 e Krait 450).
Para jogos, mesmo que aparentemente exijam desempenho da GPU em vez da CPU, eles ainda exercem uma carga pesada sobre a CPU. Uma GPU não pode funcionar sozinha sem que outra coisa lhe forneça dados a serem processados, e esse é um dos principais trabalhos que a CPU está realizando enquanto você joga. Na maioria dos casos de jogos, a GPU renderiza apenas gráficos, enquanto todos os outros trabalhos, como carregar dados, recursos e ativos e calcular a mecânica do jogo, como sistema, ambiente e física, são feitos pela CPU. Você não observará uma taxa de quadros mais alta se atualizar sua GPU enquanto estiver usando uma CPU de baixo custo.
Um motivo secundário é como o Android utiliza os recursos da CPU . O Android cria seu próprio ambiente de aplicativos. Ele usa nada além de códigos (e APIs) do Java, mas possui sua própria máquina virtual chamada Dalvik, que mais tarde foi substituída pelo ART (Nível de API 21). Os APKs têm seus códigos executáveis em um formato "neutro", como
.class
arquivos em Java. Antes de serem executados, os códigos são compilados mais uma vez nas instruções nativas da máquina [1] . O processo de compilação é multiencadeado e pode utilizar vários núcleos para aumentar o desempenho.E quando um aplicativo está em execução, existem vários outros processos e mecânicos (como o Garbage Collector) que são executados ao lado ou paralelos ao aplicativo. Mais núcleos podem permitir que os processos de suporte sejam executados com mais eficiência, assim como o aplicativo principal.
1. Se você usar um identificador de tipo de arquivo, verá que os arquivos dex "otimizados" estão no formato ELF, enquanto os arquivos dex "neutros" estão apenas em um formato próprio.
Outro motivo menor é que os núcleos ARM não podem funcionar tão rápido quanto um chip Intel x86 . A microarquitetura Intel x86 pode ser datada de 1976, quando o chip Intel 8086 começou a ser projetado, o que significa que o x86 se desenvolveu há muito tempo. Um único núcleo moderno ARM Cortex-A73 de ponta é tão poderoso quanto um núcleo Intel Clarkdale, tomando o Core i5-660 como exemplo (GeekBench, núcleo único). Isso ocorre porque x86 é uma microarquitetura CISC enquanto o ARM é um RISCmicroarquitetura. Você certamente não quer um telefone que fique atrasado com apenas dois aplicativos ativos. Mais núcleos ajudarão a aliviar a pressão. É por isso que os SoCs de núcleo duplo são relativamente populares apenas em relógios inteligentes. Quem precisa de desempenho em um relógio inteligente?
Curiosamente, mais núcleos resultarão em menos energia que um único núcleo na mesma carga . A relação entre a frequência da CPU e o consumo de energia é mais do que linear; portanto, o dobro da frequência sempre exigirá mais do que o dobro, ou até 3x ou 4x mais energia, enquanto fornece menos que o dobro do desempenho (devido a outras limitações de recursos, como cache ) Assim, 4 núcleos podem facilmente vencer um único núcleo na mesma carga, proporcionando melhor desempenho e exigindo simultaneamente menos energia.
Leitura adicional:
fonte
A razão é tão simples quanto complicada.
A resposta curta é "porque o mercado de telefonia móvel nunca foi e não é impulsionado pela Intel".
A resposta longa é longa demais para retomar aqui, mas o conceito básico é que a Intel domina o mercado de PCs há anos com todos os meios possíveis, a ponto de pagar e corromper (e ser multado por isso) fazer com que seus CPUs sejam os primeira e única opção para fabricantes de PC.
Ter o controle total do mercado permitiu à Intel aumentar os preços da CPU, enquanto decide artificialmente quais recursos e quanto poder de processamento os usuários deveriam ter; e se você analisar um pouco da história da Intel, perceberá que sua principal força está basicamente na o aumento da frequência das CPUs, por isso nunca tentou fazer algo realmente inteligente ou inovador; e não precisava, porque pode dizer às pessoas "você não precisa de mais núcleos, mas eu tenho essas novas e suculentas CPUs que rodam 100 MHz mais rápido". Ao mesmo tempo, poderia vender CPUs multicore no mercado de servidores a preços absurdamente altos (porque os servidores sempre precisaramtoneladas de energia paralela, a ponto de haver uma tendência atual em tentar realizar servidores que usam ... adivinhem? Centenas de CPUs de seu telefone barato trabalhando em paralelo)
Isso, por sua vez, refletiu na comunidade de desenvolvedores que nunca alcançou a importância da programação paralela, de modo que muitos, se não a maioria deles, nunca se incomodaram em usar mais de um encadeamento ao mesmo tempo - ou, para expressá-lo de uma maneira diferente. técnica, ter seu software executando mais de uma tarefa ao mesmo tempo. O que, a propósito, faz sentido quando 99% da sua base de clientes tem dois núcleos no máximo. Infelizmente, isso levou à lenda de que algoritmos paralelos são realmente difíceis de implementar e se aplicam apenas a um pequeno subconjunto de problemas.
Em vez disso, finalmente, o mercado móvel nunca viu o sucesso da Intel; muito pelo contrário, na verdade, como acontece na maioria das vezes que a Intel tenta fazer algo diferente da arquitetura X86 usual. Portanto, na falta de influência e controle do mercado, os outros produtores de CPUs seguem a direção que tem sido a normalidade há muito tempo fora do mercado de PCs: a computação paralela.
fonte
Existem dois fatores, um muito prático e o outro histórico.
O motivo prático é o uso de arquiteturas mistas em telefones. O consumo de energia é crítico, pois os telefones passam muito tempo nos modos em que exigem muito pouco desempenho. Faz sentido ter alguns núcleos otimizados para um consumo mínimo de energia quando é necessário pouco desempenho, enquanto alguns núcleos são otimizados para fornecer o máximo desempenho quando necessário.
A outra razão é amplamente histórica. Até 2005, aproximadamente, as CPUs de desktop eram todas de núcleos únicos. Melhorar o desempenho da CPU da área de trabalho consistia quase exclusivamente em criar um núcleo capaz de executar o maior número possível de instruções por segundo. Ainda hoje, tantos softwares de desktop não podem tirar proveito de múltiplos núcleos que muitos preferem uma CPU com 4 núcleos a uma CPU de 8 núcleos com núcleos 20% mais lentos.
Obter o máximo desempenho possível de um único núcleo requer enormes quantidades de espaço na CPU. Trata-se de imóveis que, de outra forma, poderiam ser usados para fornecer mais núcleos. É por isso que os novos CPUs Kaby Lake da Intel atingem o máximo de quatro núcleos e as pessoas os compram porque cada núcleo é mais rápido que os núcleos de seus antecessores. Para muitos, eles são uma atualização mesmo de CPUs com uma contagem de núcleos mais alta.
Com o tempo, espere ver muito mais software de desktop totalmente otimizado para suportar mais núcleos. Quando isso acontecer, as trocas de engenharia começarão a favorecer mais núcleos do que núcleos mais rápidos nos desktops. Embora os núcleos quase certamente ainda fiquem mais rápidos, você começará a ver pessoas preferindo uma CPU de 8 núcleos a uma de 4 núcleos, mesmo que cada núcleo seja 20% mais lento. Os projetistas de chips seguirão o mercado.
fonte
É crucial que um telefone seja capaz de fornecer energia computacional em rajadas curtas (precisamos que certos aplicativos sejam rápidos), mas também evite superaquecimento (a dissipação de calor é muito mais difícil para telefones do que para laptops ou PCs). Para conseguir isso, os arquitetos projetam telefones para usar um único núcleo quando a carga de trabalho é leve e fornecem núcleos extras para aumentar o desempenho quando necessário. Se os telefones usassem menos núcleos grandes, o superaquecimento se tornaria um problema mesmo quando a carga de trabalho fosse bastante leve.
Fonte: Um curso de arquitetura de computadores em nível de pós-graduação.
fonte
Primeiro, a máquina virtual Java pode se beneficiar historicamente do software de desktop com vários núcleos, mais do que o típico. Mesmo se você escrever um aplicativo de thread único em Java, ele será executado mais rapidamente em vários núcleos, porque a maior parte do código do coletor de lixo será executada ao lado do aplicativo.
Segundo, muitas coisas estão acontecendo em segundo plano no seu telefone: atualizações automáticas, downloads de anúncios, software antivírus, gerenciamento de módulo GSM, etc. Em um laptop, todas essas tarefas dificilmente manteriam um núcleo ocupado, mas os núcleos ARM são muito menos poderoso, portanto, convém ter pelo menos alguns deles dedicados a tarefas em segundo plano, se desejar um sistema responsivo.
Finalmente, há marketing. Poucos usuários são capazes de avaliar se se beneficiariam de 8 núcleos, mas um smartphone de 8 núcleos certamente parece mais caro do que 2 ou 4 núcleos.
fonte
As respostas até agora explicam algumas facetas do problema que levam a esse número esmagadoramente grande de núcleos de CPU em telefones Android. Leia isso de novo; Telefones Android. O iPhone conseguiu manter apenas alguns núcleos por muito tempo e ainda tem um desempenho muito mais suave do que qualquer carro-chefe do Android.
Os designers do Android fizeram uma grande aposta ao decidir escolher a programação Java e, como conseqüência, a JVM como o tempo de execução dos aplicativos. O Java, devido a seus princípios de design, resolve o problema de precisar compilar e criar código para cada arquitetura de CPU antes que ela possa ser executada sacrificando o desempenho. Java introduz uma máquina virtual pesada e volumosa, geralmente chamada de JVM. A JVM realmente emula uma CPU no nível do software para evitar a necessidade de compilar o código separadamente para cada dispositivo. Pense na JVM como uma CPU virtual que possui as mesmas propriedades, independentemente do dispositivo que está executando, portanto, o código precisa ser compilado apenas uma vez para a JVM e, em seguida, pode ser executado em todos os dispositivos. Isso permite que os fabricantes joguem qualquer hardware que desejarem antes de se preocupar com a compatibilidade de aplicativos.
A própria JVM é apenas uma especificação e as pessoas são livres para desenvolver sua própria JVM, desde que cumpra essa especificação. A JVM original do Android chamava-se Dalvik. Atualmente, o Google substituiu isso por ART.
Agora, qual é o problema com a JVM? É um software pesado que consome muitos recursos de computação. Adicione a isso algumas outras propriedades da linguagem Java, como Garbage Collection e o consumo de recursos da JVM, simplesmente se torna demais para um dispositivo com poder de hardware modesto. Cada serviço de aplicativo e sistema aberto no seu dispositivo é uma instância da ART JVM e agora você pode concluir que o gerenciamento de todos eles exige algum hardware realmente capaz. As coisas ficarão ainda piores quando houver a necessidade de desenhar interfaces de usuário.
Cada aplicativo é executado em vários segmentos. Cada núcleo da CPU pode executar apenas um encadeamento por vez. Cada aplicativo tem um segmento principal no qual faz as coisas relacionadas à interface do usuário. Pode haver muito mais threads por aplicativo para acessar arquivos, rede, etc. Geralmente, existem mais aplicativos (e serviços de sistema) abertos do que núcleos de CPU e, como resultado, geralmente há muito mais threads do que núcleos de CPU. Portanto, cada núcleo precisa alternar entre o processamento de diferentes segmentos constantemente, fazendo um pouco de cada um e indo para o próximo. Essa alternância leva muito tempo para a CPU e, no caso de os aplicativos serem essencialmente JVMs, essa tarefa se torna ainda mais completa.
Com base nesta explicação, pode-se deduzir que o Android precisa de um hardware poderoso para funcionar sem problemas. As primeiras gerações de dispositivos Android eram famosas por atrasos, falhas e muitas outras coisas infelizes. Mas, ao longo dos anos, esses problemas foram resolvidos principalmente por meio de hardware poderoso.
Por outro lado, o aplicativo iOS é compilado no código da máquina nativa e, portanto, não precisa da virtualização. O idioma usado e o sistema operacional também são mais eficientes e, portanto, permitem que esses dispositivos permaneçam tranqüilos sem a necessidade de algum chipset de exagero.
fonte
Resumindo tudo acima, posso dizer que os casos de uso de PC e telefone são bem diferentes. PC na maioria das vezes usado em um ou dois aplicativos (é claro que o navegador com várias guias requer muitos núcleos da CPU, pode ficar até no topo do i-3), telefones usados para multitarefa. Pelo menos conexão de rede, desenho da interface do usuário, gatilhos do sistema, notificações. Se você abrir o gerenciador de tarefas no PC, também existem muitos processos, mas eles usam menos de poucos% da energia da CPU, mesmo na antiga Core 2 duo. 4 núcleos é muito barato (o MTK 65x2 custou US $ 1 no início para o OEM) Também é RISK vs CISC quando foi a última falta de desempenho por núcleo. Energia eficiente! = Poderosa, como podemos ver aqui . O núcleo múltiplo é perfeito para dispositivos móveis, porque não há uma carga pesada pesada e uma tarefa específica para várias tarefas (mas podemos ver que os iPhones precisam de menos núcleos e RAM devido ao bom softwarecomo neste vídeo ou em outros )
fonte
Eu acho que um dos principais fatores que impulsionam além de 4 ou 8 (para grandes: pequenas configurações) é apenas o marketing no momento.
Um grande problema da alta contagem de núcleos é quando você considera o tamanho da memória. Normalmente, em aplicativos de desktop, quando você deseja melhorar a utilização de vários núcleos, é necessário duplicar estruturas e usar muito mais memória do que em um único aplicativo encadeado.
Isso não acontece porque a RAM é muito cara (especialmente na situação de crise da RAM 2017/2018). O marketing quer números altos, mas o controle quer reduzir os preços dos componentes. Se você encontrar um saldo inferior a 1 Gigabyte de RAM por núcleo, verá um comprometimento com falha.
fonte