A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser, uma subdivisão do Stack Exchange, um agrupamento de comunidades 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:
Is it correct to say, for example, that a processor with four cores each running at 3GHz is in fact a processor running at 12GHz?
I once got into a “Mac vs. PC” argument (which by the way is NOT the focus of this topic… that was back in middle school) with an acquaintance who insisted that Macs were only being advertised as 1Ghz machines because they were dual-processor G4s each running at 500MHz.
At the time I knew this to be hogwash for reasons I think are apparent to most people, but I just saw a comment on this website to the effect of “6 cores x 0.2GHz = 1.2Ghz” and that got me thinking again about whether there’s a real answer to this.
So, this is a more-or-less philosophical/deep technical question about the semantics of clock speed calculation. I see two possibilities:
- Each core is in fact doing x calculations per second, thus the total number of calculations is x(cores).
- Clock speed is rather a count of the number of cycles the processor goes through in the space of a second, so as long as all cores are running at the same speed, the speed of each clock cycle stays the same no matter how many cores exist. In other words, 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:
The main reason why a quad-core 3GHz processor is never as fast as a 12GHz single core is to do with how the task running on that processor works, i.e. single-threaded or multi-threaded. Amdahl’s Law is important when considering the types of tasks you are running.
If you have a task that is inherently linear and has to be done precisely step-by-step such as (a grossly simple program)
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
'a'
como cada cópia estaria recebendo o valor de
'a'
em momentos diferentes e escrevê-lo 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 a qualquer momento, se fosse executada em vários núcleos, a corrupção da 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 de rosca fazendo cálculos de força bruta, o processador de 12GHz único ganharia as mãos para baixo, se você puder dividir a tarefa em partes separadas e multi-threaded, 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.
Acho que é uma falácia pensar que 4 x 3GHz = 12GHz, concedida a matemática funciona, mas você está comparando maçãs a laranjas e as somas não estão certas, GHz não pode simplesmente ser adicionado em conjunto para cada situação. Eu mudaria isso 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.