Intel i7-1065G7 não atinge a frequência máxima de turbo boost

Aug 18 2020

Eu tenho um laptop com uma CPU Intel i7-1065G7 . turbostatrelatórios

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

(estes são 4 núcleos físicos / 8 virtuais) Quando eu jogo uma grande carga de thread único (calculando pi com mpfr) na CPU, observo que dois núcleos (talvez um núcleo físico?) funcionam a exatamente 3500 MHz, enquanto os outros têm um menor frequência. Mas eles nunca alcançam as frequências mais altas de turbo boost.

Se eu desativar alguns dos núcleos de CPU (por exemplo, com echo 0 > /sys/devices/system/cpu/cpu[2-7]*/online) o laptop não alcançar os correspondentes maior Turbo Boost frequências, resultando em maior desempenho (uma tarefa que levou, em média, 18,5 segundos antes, agora leva 16,8).

Como posso fazer com que meu novo laptop alcance sua velocidade de clock máxima quando nem todos os núcleos são necessários?

Estou usando o Ubuntu 20.04 com kernel 5.4.0 em um laptop HP Envy x360.

O que eu espero: no meu antigo laptop com um i7-4712MQ turbostat

30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores

(esta também é uma máquina de 4/8 núcleos). Nesta máquina, uma carga de núcleo único aumenta um núcleo para quase 3,3 GHz, sob uma carga de dois núcleos, dois clock a 3,2 GHz etc.

Não verifiquei as frequências de cpu individuais no Windows, mas o gerenciador de tarefas às vezes exibe frequências acima de 3,7 GHz.

Atualização: Então o problema desapareceu ... Não tenho ideia do porquê. Desinstalei, linux-cloud-toolsmas não acho que seja esse o motivo.

Respostas

H2ONaCl Aug 18 2020 at 08:01

Você escreveu...

Quando eu lanço uma grande carga de thread único

Se o seu programa for de thread único, ele não precisa ir para a frequência máxima nos outros threads, então não vai.

Seu link é para o processador Intel® Core ™ i7-1065G7.

O documento da Intel que você vinculou diz que o máximo é 3.900 MHz. Seus dados parecem mostrar que há um núcleo em 3.900 MHz, então não sei por que você acha que ele não atingiu o máximo. Você postou isso ...

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

Em geral, se a leitura não for a frequência máxima, é porque ela o faz apenas intermitentemente, de modo que a medição mostrará apenas isso intermitentemente ou então não precisa estar na frequência máxima porque há alguma restrição como IO. Não se preocupe com isso. Se você escrever um programa sem restrições, em outras palavras, é um thread de computação restrita, garanto que irá para a frequência máxima.

Um tempo decorrido de 18,5 s pode não ser significativo por causa dos efeitos aleatórios que você não deseja usar para tirar conclusões. Trabalhos de longa duração de 200 segundos ou mais podem fornecer dados mais significativos.

thesps Sep 28 2020 at 19:04

Eu experimentei algo semelhante, em uma configuração semelhante (CPU i7-9700K, Ubuntu 18.04). E acho que o uso da minha máquina pode ser semelhante: é uma máquina desktop que uso para executar alguns aplicativos intensivos (mas de thread único), ao mesmo tempo que possivelmente tenho um navegador da web e alguns aplicativos de mensagens abertos. Achei a sugestão nos comentários da postagem original para funcionar - definir a afinidade da CPU para os processos. Eu costumava tasksetfazer isso [1].

Primeiro teste (sem alterações nas configurações de afinidade): Todos os 8 núcleos 'inativos' em aproximadamente 10% de utilização. Eu inicio uma tarefa de processamento intensivo de CPU única. Um núcleo salta para 100%, vejo 3,6 GHz (o máximo sem turbo) em todos os núcleos usando i7z.

Segundo teste: Restringir todos os processos em execução para núcleos de CPU 0 e 1, com: . Agora, esses 2 núcleos ficam em 30-40%, o resto em 0% (embora alguns outros núcleos possam começar a ter atividade quando o SO inicia processos). Em seguida, inicie a mesma tarefa de processamento intensivo da CPU de thread único. Um núcleo salta para 100%, mas agora vejo que atinge a frequência turbo máxima de 4,9 GHz. Posteriormente, configurei a afinidade de volta para usar todos os núcleos, substituindo o intervalo por , no meu caso.for i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done0-10-7

[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html