15Aug

Como você calcula a velocidade do processador em processadores multi-core?

O advento dos processadores econômicos de nível de consumidor multi-core levanta a questão para muitos usuários: como você efetivamente calcula a velocidade real de um sistema multi-core? Um sistema 3Ghz de 4 núcleos realmente é 12Ghz? Leia mais enquanto investigamos.

Today's Question &A sessão de resposta vem a nós com cortesia do SuperUser - uma subdivisão do Stack Exchange, um grupo de unidade comunitária de sites Q e A.

A pergunta

Leitor de superutilizador NReilingh ficou curioso sobre como a velocidade do processador para um sistema multi-núcleo é realmente calculada:

É correto dizer, por exemplo, que um processador com quatro núcleos cada um executando em 3GHz é de fato um processador executadoa 12GHz?

Uma vez entrei em um argumento "Mac vs. PC"( o que, de jeito como NÃO é o foco deste tópico. .. estava de volta ao ensino médio) com um conhecido que insistiu que os Macs só estavam sendo anunciados como máquinas 1Ghz porque eramG4s de processador duplo cada um a 500MHz.

No momento em que eu sabia que isso era hogwash por razões que eu acho que são evidentes para a maioria das pessoas, mas acabei de ver um comentário neste site para o efeito de "6 núcleos x 0.2GHz = 1.2Ghz" e isso me fez pensar novamente sobrese existe uma resposta real para isso.

Então, esta é uma questão técnica mais ou menos filosófica / profunda sobre a semântica do cálculo da velocidade do relógio. Eu vejo duas possibilidades:

  1. Cada núcleo é, de fato, fazendo x cálculos por segundo, portanto, o número total de cálculos é x( núcleos).
  2. A velocidade do relógio é mais uma contagem do número de ciclos que o processador passa no espaço de um segundo, de modo que, enquanto todos os núcleos estiverem funcionando na mesma velocidade, a velocidade de cada ciclo do relógio permanece a mesma, não importa quantos núcleosexistir. Em outras palavras, Hz =( core1Hz + core2Hz +. ..) / núcleos.

Então, qual é a maneira apropriada de denotar a velocidade total do relógio e, mais importante ainda, é possível usar a nomenclatura de velocidade de núcleo único em um sistema multi-core?

A resposta

SuperUser contribuintes Mokubai ajuda a limpar as coisas. Ele escreve:

A principal razão pela qual um processador quad-core 3GHz nunca é tão rápido como um núcleo único de 12GHz é fazer com a maneira como a tarefa executada nesse processador funciona, ou seja, um único thread ou multi-threaded. A Lei de Amdahl é importante quando se considera os tipos de tarefas que você está executando.

Se você tiver uma tarefa inerentemente linear e precisa ser feita com precisão, passo a passo, como( um programa extremamente simples)

10: a = a + 1 20: goto 10

Então a tarefa depende muito do resultadoda passagem anterior e não pode executar múltiplas cópias de si mesmo sem corromper o valor de 'a', pois cada cópia seria obter o valor de 'a' em momentos diferentes e escrevê-lo de forma diferente. Isso restringe a tarefa a um único tópico e, portanto, a tarefa só pode ser executada em um único núcleo em qualquer momento, se fosse executado em múltiplos núcleos, então a corrupção de sincronização aconteceria. Isso o limita a 1/2 do poder da CPU de um sistema dual core, ou 1/4 em um sistema quad core.

Agora, faça uma tarefa como:

10: a = a + 1 20: b = b + 1 30: c = c + 1 40: d = d + 1 50: goto 10

Todas essas linhas são independentes e podemseja dividido em 4 programas separados, como o primeiro e executado ao mesmo tempo, cada um capaz de fazer uso efetivo do poder total de um dos núcleos sem qualquer problema de sincronização, é aqui que a Lei de Amdahl entra nela.

Então, se você tiver uma única aplicação threadada fazendo cálculos de força bruta, o único processador de 12GHz ganharia as mãos para baixo, se você puder de alguma forma fazer a tarefa dividir em partes separadas e multi-threaded, então os 4 núcleos poderiam se aproximar, mas não alcançar, o mesmo desempenho, conforme a Lei Amdahl.

O principal que um sistema de multi-CPU lhe dá é responsivo. Em uma única máquina central que está trabalhando duro, o sistema pode parecer lento, pois a maior parte do tempo pode ser usado por uma tarefa e as outras tarefas são executadas somente em estouros curtos entre a tarefa maior, resultando em um sistema que parece lento ou judicioso. Em um sistema multi-core, a tarefa pesada recebe um núcleo e todas as outras tarefas funcionam nos outros núcleos, fazendo o trabalho de forma rápida e eficiente.

O argumento de "6 núcleos x 0.2GHz = 1.2Ghz" é lixo em todas as situações, exceto onde as tarefas são perfeitamente paralelas e independentes. Há um bom número de tarefas que são altamente paralelas, mas ainda exigem alguma forma de sincronização. Handbrake é um trancodificador de vídeo que é muito bom em usar todas as CPUs disponíveis, mas requer um processo central para manter os outros segmentos preenchidos com dados e coletar os dados com os quais eles são feitos.

  1. 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 cálculos x por segundo, assumindo que a carga de trabalho é adequada em paralelo, em um programa linear, tudo que você possui é 1 núcleo.

  1. A velocidade do relógio é mais uma contagem do número de ciclos que o processador passa no espaço de um segundo, de modo que, enquanto todos os núcleos estiverem funcionando na mesma velocidade, a velocidade de cada ciclo do relógio permanece a mesma, independentemente de quantos núcleosexistir. Em outras palavras, Hz =( core1Hz + core2Hz +. ..) / núcleos.

Eu acho que é uma falácia pensar que 4 x 3GHz = 12GHz, concedido os trabalhos de matemática, mas você está comparando maçãs com laranjas e as somas simplesmente não estão corretas, GHz não pode simplesmente ser adicionado em conjunto para cada situação. Eu mudaria para 4 x 3GHz = 4 x 3GHz.

Tem alguma coisa a adicionar à explicação? Som na parte dos comentários. Deseja ler mais respostas de outros usuários Tech-savvy Stack Exchange? Confira o tópico de discussão completo aqui.