sexta-feira, 5 de junho de 2015

O Android realmente consegue usar oito núcleos ao mesmo tempo?


Processamento multi-thread já existe há uma década em nossos PCs, onde é comum vermos processadores com quatro, seis e até mesmo oito núcleos tanto da Intel quanto da AMD. Há cinco anos, a ARM começou a investir neste segmento ao trazer o primeiro processador dual-core para smartphones, e não parou por aí. De lá para cá vimos novos produtos sendo lançados com chipsets com processadores quad-core e mesmo octa-core. A MediaTekresolveu ir além ao lançar o Helio X20, o primeiro chipset com nada menos do que 10 núcleos.
Para controlar o alto consumo e grande aquecimento, a ARM desenvolveu a implementaçãobig.LITTLE que consiste em mesclar núcleos potentes em conjunto com núcleos econômicos. Com isso, já vimos várias soluções deste tipo no mercado como o Exynos 7420ou mesmo o Snapdragon 810. O kernel do Android é responsável por separar as instruções a serem processadas por cada núcleo. Assim, o sistema é quem decide o que o Cortex-A57 irá lidar, deixando tarefas mais leves para o Cortex-A53 que conta com desempenho inferior. Mas será que o Android consegue realmente usar todos estes núcleos de forma eficiente?
Escalonamento entre os núcleos de uma CPU e demais componentes do chipset
Os PCs atualmente precisam lidar com uma quantidade de informação muito maior do que nossos smartphones. Com isso, ter um processador quad-core realmente mostra uma vantagem considerável contra uma solução dual-core. Isso acontece porque grande parte dos programas para Windows são construídos visando o processamento paralelo. Isso quer dizer que quando você abrir uma determinada aplicação em seu computador, a CPU poderá quebrar todos os blocos de instruções a serem processados e dividir a carga entre cada núcleo. No entanto, aquelas que não foram compiladas desta forma terão que ser totalmente processadas por um único núcleo, o que acaba reduzindo a vantagem de ter uma CPU com quatro ou mais unidades.

Multi-thread no Android

Como dito anteriormente, os PCs já contam com soluções multi-core há muito tempo. Isso permitiu que os desenvolvedores adaptassem suas aplicações para tirar o melhor proveito possível de tantos núcleos disponíveis. No entanto, mesmo após uma década, ainda há soluções que são focadas apenas em sistema single-core, o que acaba não sendo tão efetivo. Como os smartphones entraram neste mundo a menos tempo, é normal vermos vários aplicativos que ainda usem apenas um núcleo por vez. Mesmo com a Google e Qualcommcriando diretrizes para que desenvolvedores explorem todo o potencial de termos processadores potentes em celulares, muitas das aplicações atuais não tiram proveito disso.
Um teste realizado usando um processador octa-core mostrou que nenhum aplicativo do Android consegue usar todos os oito núcleos ao seu favor. A grande maioria ainda continua tirando proveito de apenas dois núcleos por vez. Isso quer dizer que é totalmente desnecessário ter um smartphone octa-core atualmente? Não é bem assim. Diferentemente dos PCs, os smartphones não lidam só com aplicações. Eles também precisam controlar as sincronizações dos seus apps, gerenciar os seus widgets, administrar suas conexões (Wi-Fi, Bluetooth, NFC, 3G/4G, GPS, etc) tudo ao mesmo tempo. E quem lida com tudo isso é a CPU do aparelho.

Testando o multi-processamento no Android

O teste foi realizado com dois smartphones: o primeiro deles conta com chipset QualcommSnapdragon 801, um quad-core 32-bit que esteve presente nos principais lançamentos de 2014; e o segundo vem com o Snapdragon 615, atual chipset octa-core 64-bit da Qualcomm voltado para o mercado intermediário. Foi usada uma ferramenta própria para medir a carga de processamento que é distribuída para cada núcleo ao abrir um aplicativo. O primeiro teste foi feito com o Chrome rodando na solução quad-core.
Chrome usou bem todos os núcleos na maior parte do tempo
Ao analisar o gráfico acima, podemos notar que o navegador da Google consegue usar todos os núcleos do Snapdragon 801, mostrando que na maior parte do tempo, as instruções são bem distribuídas entre cada unidade. Quando é analisado o uso de cada núcleo, podemos ver abaixo que o máximo que foi utilizado foi de 90%. Isso mostra que o navegador realmente faz um bom uso, mas ainda sobra 10% de processamento que acaba sendo desperdiçado. Claro, a Google ainda pode trabalhar para que consiga extrair ainda mais desempenho com algumas correções no Chrome, mas ter um smartphone com chipset quad-core irá fazer com as páginas web sejam renderizadas mais rapidamente do que em smartphones dual-core.
Em nenhum momento foi usando todo o poder de processamento
Será que o mesmo acontece com oito núcleos? Ao refazer o teste com Snapdragon 615, podemos notar que raramente eram usados todos os núcleos do chipset. Aqui, na maior parte do tempo, o Chrome usou apenas 4 a 6 núcleos. Isso mostra que nem mesmo a Google ainda tira proveito de soluções octa-core, imagina outros desenvolvedores. Quando analisamos a carga em cada núcleo, é constatado que o uso acaba sendo bem menor. Isso mostra que uma otimização ainda precisa ser feita pela Google, onde boa parte do processamento acaba sendo desperdiçado pelo navegador.
Em chipsets octa-core, todos os núcleos são usados, mas não todo o tempo
E em outros aplicativos, como ficam a situação? Com o Gmail, foram usados apenas dois núcleos na maior parte do tempo no Snapdragon 801 com carga máxima de 50%. Já no Snapdragon 615, o uso chegou a até 4 núcleos com carga máxima de 35%. O mesmo aconteceu com o YouTube, mas na solução octa-core apenas três núcleos chegaram a ser usados.
Com relação a jogos, em RipTide GP2, dois núcleos foram usados no Snapdragon 801, enquanto até seis núcleos foram usados no Snapdragon 615. Já com o Temple Run 2, apenas um núcleo foi usado no chipset quad-core, enquanto na solução octa-core foram usadas de quatro a sete unidades.
A parte mais curiosa é que até mesmo benchmarks, como o AnTuTu, não usam os oito núcleos do Snapdragon 615. Como pode ser visto no gráfico abaixo, na maior parte do tempo foram usados apenas quatro núcleos. No entanto, ele conseguiu usar 100% do potencial do hardware em grande parte do tempo. Isso serve para reforçar o fato de que benchmarks não mostram uma realidade, já que nenhum aplicativo analisado usou todo o potencial da CPU.

Conclusão

Podemos concluir que não há necessidade de termos um smartphone com chipset octa-core? Muito pelo contrário. Pelos testes realizados ficou claro que nenhum aplicativo irá usar todo o potencial do hardware do seu smartphone. Mas em muitos casos, vimos que em soluções quad-core, apenas dois núcleos eram usados, enquanto em processadores octa-core tínhamos seis deles trabalhando em conjunto. Isso mostra que ter mais núcleos realmente vale a apena. Mas esses dois que ficam de lado? Eles podem cuidar de outras tarefas, como atualizar os seus widgets, gerenciador os seus dados ou mesmo controlar a sincronização dos seus aplicativos. O mesmo deverá acontecer com chipsets com 10 núcleos.
Temos que admitir que será necessário um maior empenho dos desenvolvedores. Como dito anterior, muitos dos apps ainda ficam presos a apenas dois núcleos por vez. Com o avanço de chipsets mais parrudos, deveremos ver uma maior quantidade de aplicações multi-thread aparecerem e aí sim veremos todo o potencial de smartphones com tantos núcleos disponíveis. O mais importante a saber é que, mesmo neste momento, ter um smartphone octa-core traz um ganho considerável no desempenho comparado a outros com hardware quad-core.

Nenhum comentário:

Postar um comentário