O advento de processadores multi-core econômicos para o consumidor levanta a questão para muitos usuários: como você calcula efetivamente a velocidade real de um sistema multi-core? Um sistema 3Ghz de 4 núcleos é realmente 12Ghz? Continue lendo enquanto investigamos.
A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas voltado para a comunidade.
A questão
O leitor SuperUser NReilingh estava curioso para saber como a velocidade do processador para um sistema multi-core é realmente calculada:
É correto dizer, por exemplo, que um processador com quatro núcleos cada rodando a 3GHz é na verdade um processador rodando a 12 GHz?
Certa vez, entrei em um argumento “Mac vs. PC” (que, a propósito, NÃO é o foco deste tópico ... isso foi no ensino médio) com um conhecido que insistia que os Macs só estavam sendo anunciados como máquinas de 1 GHz porque eram duplos -processador G4s cada um funcionando a 500 MHz.
Na época, eu sabia que isso era besteira por motivos que acho aparentes para a maioria das pessoas, mas acabei de ver um comentário neste site sobre o efeito de "6 núcleos x 0,2 GHz = 1,2 GHz" e isso me fez pensar novamente se há uma resposta real para isso.
Portanto, esta é uma questão mais ou menos filosófica / técnica profunda sobre a semântica do cálculo da velocidade do relógio. Eu vejo duas possibilidades:
- Cada núcleo está, na verdade, fazendo x cálculos por segundo, portanto, o número total de cálculos é x (núcleos).
- A velocidade do clock é antes uma contagem do número de ciclos que o processador passa no espaço de um segundo, então, desde que todos os núcleos estejam funcionando na mesma velocidade, a velocidade de cada ciclo do clock permanece a mesma, não importa quantos núcleos existam . Em outras palavras, Hz = (core1Hz + core2Hz +…) / núcleos.
Então, qual é a maneira apropriada de denotar a velocidade total do clock e, mais importante, é mesmo possível usar a nomenclatura de velocidade de núcleo único em um sistema de vários núcleos?
A resposta
Contribuidores do superusuário Mokubai ajuda a esclarecer as coisas. Ele escreve:
A principal razão pela qual um processador quad-core de 3GHz nunca é tão rápido quanto um único núcleo de 12 GHz tem a ver com a forma como a tarefa em execução nesse processador funciona, ou seja, single-threaded ou multi-threaded. Lei de Amdahl é importante ao considerar os tipos de tarefas que você está executando.
Se você tem uma tarefa que é inerentemente linear e precisa ser feita precisamente passo a passo, como (um programa extremamente simples)
10: a = a + 120: a cada 10Então, a tarefa depende altamente do resultado da passagem anterior e não pode executar várias cópias de si mesma sem corromper o valor de
'a'pois cada cópia obteria o valor de'a'em momentos diferentes e escrevendo de volta de forma diferente. Isso restringe a tarefa a um único thread e, portanto, a tarefa só pode ser executada em um único núcleo a qualquer momento; se ela fosse executada em vários núcleos, a sincronização poderia ocorrer corrompida. Isso o limita a 1/2 da potência da cpu de um sistema dual core ou 1/4 em um sistema quad core.Agora faça uma tarefa como:
10: a = a + 120: b = b + 130: c = c + 140: d = d + 150: a cada 10Todas essas 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 toda a potência de um dos núcleos sem nenhum problema de sincronização, é aqui que Lei de Amdahl entra nele.
Então, se você tiver um único aplicativo threaded fazendo cálculos de força bruta, o processador único de 12 GHz venceria, se você pudesse de alguma forma dividir a tarefa em partes separadas e multi-threaded, os 4 núcleos poderiam chegar perto, mas não atingir, o mesmo desempenho, conforme Lei de Amdahl.
A principal coisa que um sistema com várias CPUs oferece é a capacidade de resposta. Em uma máquina de núcleo único que está trabalhando duro, o sistema pode parecer lento, pois a maior parte do tempo pode estar sendo usado por uma tarefa e as outras tarefas são executadas apenas em pequenos intervalos entre a tarefa maior, resultando em um sistema que parece lento ou trêmulo . Em um sistema com vários núcleos, a tarefa pesada obtém um núcleo e todas as outras tarefas são executadas nos outros núcleos, fazendo seu trabalho de forma rápida e eficiente.
O argumento de “6 núcleos x 0,2 GHz = 1,2 GHz” é lixo em todas as situações, exceto onde as tarefas são perfeitamente paralelas e independentes. Há um bom número de tarefas altamente paralelas, mas ainda requerem alguma forma de sincronização. Travão de mão é um transcodificador 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á, na verdade, 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 seja paralela adequada, em um programa linear tudo o que você tem é 1 núcleo.
- A velocidade do clock é antes uma contagem do número de ciclos que o processador passa no espaço de um segundo, então, desde que todos os núcleos estejam funcionando na mesma velocidade, a velocidade de cada ciclo do clock permanece a mesma, não importa quantos núcleos existam . Em outras palavras, Hz = (core1Hz + core2Hz +…) / núcleos.
Eu acho que é uma falácia pensar que 4 x 3GHz = 12 GHz, considerando que a matemática funciona, mas você está comparando maçãs com laranjas e as somas simplesmente não estão certas, GHz não pode simplesmente ser somado 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 .