quarta-feira, 30 de janeiro de 2019

Dia desses eu estava apanhando para fazer benchmarks, os resultados não saiam consistentes de jeito nenhum, aí eu pesquisei e descobri o culpado: era o Intel Turbo Boost.

Minha história é a seguinte: se eu rodasse um torto reverso sozinho, ele levava uns 180min para terminar. Mas se eu rodasse dois tortos reversos ao mesmo tempo, aí dava uns 220min, o que não faz sentido, porque minha cpu tem vários cores né? Em paralelo, sem compatilhar memória, o tempo tinha que ser o mesmo.

Pois bem, minha cpu é uma Intel(R) Core(TM) i7-8550U ("Kaby Lake"), que nominalmente roda a 1.80GHz. Esse clock, naturalmente, é variável. Se a CPU está idle, ele abaixa o clock para gastar menos energia. No meu caso, o ubuntu sem nada em background rodando deixa o clock em uns 800MHz mais ou menos.



Mas essa CPU tem o danado do Intel Turbo Boost, que me 99% dos casos é super legal! O que o Turbo Boost faz é alterar o clock para cima do nominal (ou seja, overclock automático). Quando a CPU está sendo muito utilizada, ele usa o sensor interno de temperatura da CPU para ir aumentando o clock sozinho até a CPU chegar na temperatura limite (em dias frios pode ir até 4GHz; hoje o dia está quente, então o máximo que ela está chegando é 3.4GHz).



Pois bem, como o limite de clock é dado pela temperatura, se esquentar demais ele abaixa até voltar ao limite novamente. E olha a pegadinha aí: rodando UM torto reverso sozinho, eu tenho um core a 100%, ele sobe o clock até 3.4GHz. Mas se eu rodo DOIS tortos reversos em paralelo, então são dois cores a 100%, o que dá o dobro de área no chip sendo utilizado, e portanto o dobro da dissipação. A temperatura aumenta e o clock cai (acabei de testar e agora está caindo para 2.9GHz).



Então fica a dica: se você for rodar benchmarks e quer resultados consistentes, ou você desliga o Intel Turbo Boost na BIOS, ou roda só um processo por vez.

(Para medir o clock real da CPU eu uso o i7z, tem no apt mas recomendo compilar um fork atualizado: https://github.com/infowolfe/i7z )