Como você calcula a velocidade do processador em processadores multi-core?
O advento de processadores multi-core econômicos para consumidores levanta a questão para muitos usuários: como você efetivamente calcula a velocidade real de um sistema multi-core? É um sistema 4-core 3Ghz realmente 12Ghz? Leia enquanto investigamos.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas da comunidade..
A questão
Leitor SuperUser NReilingh estava curioso como a velocidade do processador para um sistema multi-core é realmente calculada:
É correto dizer, por exemplo, que um processador com quatro núcleos cada um rodando a 3GHz é na verdade um processador rodando a 12GHz??
Uma vez entrei em um argumento “Mac vs. PC” (que, a propósito, NÃO é o foco deste tópico… que estava de volta no ensino médio) com um conhecido que insistiu que os Macs só estavam sendo anunciados como máquinas de 1 Ghz porque eram duplas -processador G4s rodando a 500MHz.
Na época eu sabia que isso era bobagem por razões que eu acho que são aparentes para a maioria das pessoas, mas eu acabei de ver um comentário no site com o efeito “6 núcleos x 0.2GHz = 1.2Ghz” e isso me fez pensar novamente sobre se há uma resposta real para isso.
Então, essa é uma questão técnica mais profunda, filosófica e profunda sobre a semântica do cálculo da velocidade do clock. Eu vejo duas possibilidades:
- Cada núcleo está, de fato, fazendo x cálculos por segundo, portanto, o número total de cálculos é x (núcleos).
- A velocidade do clock é mais uma contagem do número de ciclos que o processador passa no espaço de um segundo, portanto, enquanto todos os núcleos estiverem funcionando na mesma velocidade, a velocidade de cada ciclo de clock permanecerá a mesma, não importando quantos núcleos existam . Em outras palavras, Hz = (core1Hz + core2Hz +…) / cores.
Então, qual é a maneira apropriada de denotar a velocidade total do clock e, o mais importante, é possível usar a nomenclatura de velocidade single-core em um sistema multi-core??
A resposta
Colaboradores do SuperUser Mokubai ajuda a esclarecer as coisas. Ele escreve:
A principal razão pela qual um processador quad-core 3GHz nunca é tão rápido quanto um single core de 12GHz tem a ver com o funcionamento da tarefa em execução naquele processador, ou seja, single-threaded ou multi-threaded. A Lei de Amdahl é importante quando se considera os tipos de tarefas que você está executando.
Se você tem uma tarefa inerentemente linear e precisa ser feita precisamente passo a passo, como (um programa grosseiramente simples)
10: a = a + 1
20: goto 10
Em seguida, a tarefa depende muito do resultado do passo anterior e não pode executar várias cópias de si mesmo sem corromper o valor de
'uma'
como cada cópia estaria recebendo o valor de'uma'
em momentos diferentes e escrevendo de volta de forma diferente. Isso restringe a tarefa a um único encadeamento e, portanto, a tarefa só pode ser executada em um único núcleo em um determinado momento, se fosse executada em vários núcleos, a corrupção de sincronização ocorreria. Isso limita a metade da potência da CPU de um sistema dual core, ou 1/4 em um sistema quad core.Agora pegue uma tarefa como:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Todas estas linhas são independentes e podem ser divididas em 4 programas separados como o primeiro e executados ao mesmo tempo, cada um capaz de fazer uso efetivo de todo o poder de um dos núcleos sem qualquer problema de sincronização, isto é onde a Lei de Amdahl entra nisso.
Portanto, se você tiver um único aplicativo encadeado fazendo cálculos de força bruta, o único processador de 12GHz ganharia as mãos para baixo, se você puder dividir a tarefa em partes separadas e multi-thread, então os 4 núcleos podem se aproximar, mas não alcançar o mesmo desempenho, conforme a Lei de Amdahl.
A principal coisa que um sistema multi-CPU oferece é a capacidade de resposta. Em uma máquina de núcleo único que está trabalhando duro, o sistema pode parecer lento, já que a maior parte do tempo pode estar sendo usado por uma tarefa e as outras tarefas são executadas apenas em intervalos curtos, resultando em um sistema que parece lento ou estressante. . Em um sistema multi-core, a tarefa pesada recebe um núcleo e todas as outras tarefas são executadas nos outros núcleos, executando suas tarefas de maneira rápida e eficiente..
O argumento de “6 núcleos x 0,2 GHz = 1,2 Ghz” é lixo em todas as situações, exceto quando as tarefas são perfeitamente paralelas e independentes. Há um bom número de tarefas que são altamente paralelas, mas ainda requerem alguma forma de sincronização. Handbrake é um trancoder de vídeo que é muito bom em usar todas as CPUs disponíveis, mas requer um processo central para manter os outros threads cheios de dados e coletar os dados com os quais eles são feitos.
- Cada núcleo está, de fato, fazendo x cálculos por segundo, portanto, o número total de cálculos é x (núcleos).
Cada núcleo é capaz de fazer x cálculos por segundo, assumindo que a carga de trabalho é adequada em paralelo, em um programa linear, tudo que você tem é 1 núcleo.
- A velocidade do clock é mais uma contagem do número de ciclos que o processador passa no espaço de um segundo, portanto, enquanto todos os núcleos estiverem funcionando na mesma velocidade, a velocidade de cada ciclo de clock permanecerá a mesma, não importando quantos núcleos existam . Em outras palavras, Hz = (core1Hz + core2Hz +…) / cores.
Eu acho que é uma falácia pensar que 4 x 3GHz = 12GHz, concedida a matemática funciona, mas você está comparando maçãs com laranjas e as somas não estão certas, GHz não pode simplesmente ser adicionado em conjunto para cada situação. Eu mudaria para 4 x 3GHz = 4 x 3GHz.
Tem algo a acrescentar à explicação? Soe fora nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.