Como calculo a velocidade do clock em processadores com vários núcleos?

23

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

Certa vez, entrei em um argumento "Mac vs. PC" (que, a propósito, NÃO é o foco deste tópico ... que estava de volta ao ensino médio) com um conhecido que insistia que os Macs estavam apenas sendo anunciados como máquinas de 1 Ghz porque eles eram G4s de processador duplo, cada um rodando a 500 MHz.

Na época, eu sabia que isso era besteira por razões que acho aparentes para a maioria das pessoas, mas acabei de ver um comentário neste site com o efeito de "6 núcleos x 0,2 GHz = 1,2 Ghz" e isso me fez pensar novamente sobre se há uma resposta real para isso.

Portanto, essa é 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 está de fato fazendo x cálculos por segundo, portanto, o número total de cálculos é x (núcleos).
  2. 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 importa quantos núcleos existam . Em outras palavras, Hz = (core1Hz + core2Hz + ...) / núcleos.
NReilingh
fonte
Muitas das respostas aqui explicam por que, por exemplo, um processador quad-core de 2 GHz não é necessariamente igual a um processador single-core de 8 GHz. No entanto, estou tendo dificuldade em adivinhar como as velocidades do processador com vários núcleos devem ser consideradas ao decidir a adequação de um sistema a um aplicativo que lista uma velocidade específica e um número de núcleos em seus requisitos? (por exemplo: Borderlands 2 requer um processador de núcleo duplo de 2,4 GHz. Deveríamos esperar que um núcleo quádruplo de velocidade mais baixa ou um núcleo mais veloz fizesse o mesmo?) Isso é (ou poderia ser) respondido aqui, ou deveria ser uma pergunta separada?
Iszi
@Iszi Isso deve ser outra pergunta, mas é provável que o Borderlands seja otimizado para mais de um segmento, se eles incluírem "dual core" em seus requisitos. Nesse caso, um processador de núcleo único não seria recomendado, mas não está claro se ele pode tirar vantagem de> 2 núcleos.
NReilingh
É importante lembrar que a velocidade do clock e o número de núcleos não determinam apenas a 'velocidade' do processador. Por exemplo, os tamanhos e a velocidade do cache afetarão o tempo que o processador gasta aguardando instruções e dados. Além disso, as instruções por ciclo (de certa forma, 'eficiência', embora distintas e relacionadas à eficiência de energia) também afetarão a velocidade dos cálculos. Processadores diferentes levarão tempos diferentes para executar a mesma instrução.
Bob

Respostas:

35

A principal razão pela qual um processador de 3GHz quad-core nunca é tão rápido quanto um núcleo único de 12GHz é a maneira como a tarefa em execução nesse processador funciona, ou seja, single-thread ou multi-threaded. A lei de Amdahl é importante ao considerar os tipos de tarefas que você está executando.

Se você possui uma tarefa que é inerentemente linear e precisa ser executada precisamente passo a passo, como (um programa bastante simples)

10: a = a + 1
20: goto 10

Então, a tarefa depende muito do resultado da passagem anterior e não pode executar várias cópias de si mesma sem danificar o valor, 'a'pois cada cópia estaria obtendo o valor 'a'em momentos diferentes e gravando-o 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 for executada em vários núcleos, ocorrerá a corrupção da sincronização. Isso limita a 1/2 da potência da CPU de um sistema de núcleo duplo ou a 1/4 de um sistema de núcleo quádruplo.

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 podem ser divididas em quatro 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; é nesse ponto que a Lei de Amdahl entra nele.

Portanto, se você tiver um único aplicativo de encadeamento fazendo cálculos de força bruta, o único processador de 12 GHz perderia as mãos; se você puder, de alguma forma, dividir a tarefa em partes separadas e com vários encadeamentos, os 4 núcleos poderão se aproximar, mas não alcançar, o mesmo desempenho, conforme a Lei da 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 na maioria das vezes pode ser usado por uma tarefa e as outras tarefas são executadas apenas em breves intervalos entre a tarefa maior, resultando em um sistema que parece lento ou instável. . 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, realizando seus trabalhos com rapidez e eficiência.

O argumento de "6 núcleos x 0,2 GHz = 1,2 Ghz" é inútil em todas as situações, exceto quando as tarefas são perfeitamente paralelas e independentes. Há um bom número de tarefas altamente paralelas, mas elas ainda exigem alguma forma de sincronização. O Handbrake é um trancoder de vídeo muito bom para usar todas as CPUs disponíveis, mas exige um processo central para manter os outros threads preenchidos com os 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 x cálculos por segundo, assumindo que a carga de trabalho seja adequada paralelamente, em um programa linear, tudo o que você tem é 1 núcleo.

  1. 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 importa quantos núcleos existam . Em outras palavras, Hz = (core1Hz + core2Hz + ...) / núcleos.

Eu acho que é uma falácia pensar que 4 x 3GHz = 12GHz, desde que a matemática funcione, mas você está comparando maçãs com laranjas e as somas simplesmente não estão certas, o GHz não pode simplesmente ser adicionado em todas as situações. Eu mudaria para 4 x 3GHz = 4 x 3GHz.

Mokubai
fonte
Bom post .. Não foi possível votar mais de 1+ :-(
Gopalakrishnan Subramani
Mas a lei da amdahl é uma preocupação de programação, causada pelo bloqueio, não uma preocupação de hardware. Se você não precisar sincronizar, cada núcleo poderá executar instruções o mais rápido possível. Pode-se projetar um programa paralelo (simples) que seria perfeitamente dividido entre núcleos. Os fabricantes de hardware não anunciam esse valor bruto?
7308 Justin Meiners
Para esclarecer, entendo por que isso responde à pergunta de por que 4 núcleos a 3 ghz não são tão rápidos, na prática, como 12ghz, mas não é a parte de como a velocidade do relógio é calculada para multicores.
7308 Justin Meiners
A velocidade de clock do @JustinMeiners por núcleo é simplesmente a velocidade do clock em que o núcleo é executado. Não há cálculo mágico que iguale um núcleo a multicore. Múltiplos núcleos significa apenas que você pode executar mais tarefas separadas simultaneamente. A lei da Amdahls se aplica por causa do software, a sincronização e o bloqueio necessários impedirão que uma tarefa seja "perfeita" no hardware tanto quanto no software. Caches e memória compartilhados causam contenção e bloqueios.
Mokubai
@Mokubai Apenas para esclarecer, quando um fabricante lista a velocidade do relógio, cada núcleo individual roda na velocidade, correto?
9306 Justin Meiners #
6

Outros fizeram um bom argumento do ponto de vista técnico. Em vez disso, farei algumas analogias simples que, espero, explicarão por que 4 * 3GHz não é equivalente a 1 * 12GHz.

Por exemplo, uma mulher pode fabricar um bebê em nove meses. Nove mulheres conseguirão fabricar um bebê em um mês? Não, porque a gestação não pode ser paralelizada (bem, pelo menos nesse nível tecnológico).

Aqui está outra: em uma usina hidrelétrica que visitei recentemente, um dos geradores estava sendo atualizado. Eles tiveram que transportar o estator do gerador por navio. Um sexto do estator poderia ser transportado por caminhão, mas eles precisavam transportar o estator inteiro; então eles tiveram que usar um navio, não seis caminhões.

Outro caso pode ser o tempo preciso dos eventos. Às vezes, os processadores de computador são usados ​​como cronômetros precisos (embora a prática não seja mais recomendada, devido ao relógio variável na maioria dos processadores. Em vez disso, deve-se usar um cronômetro de eventos de alta precisão). Se assumirmos que temos um processador com clock de 12GHz relativamente estável, podemos usá-lo para medir o tempo em uma resolução muito maior do que em um processador com clock de 3GHz. Não importa quantos núcleos de 3GHz tenhamos, não conseguiremos alcançar a resolução do núcleo de 12GHz. É como ter 4 relógios com displays de 7 segmentos, onde cada relógio apenas exibe a hora correta em horas. Não importa quão corretamente eles mostrem horas, você não pode usá-los para medir intervalos de tempo em um segundo intervalo.

AndrejaKo
fonte
Resposta útil para os menos técnicos. Além disso, eu gosto de analogias :)
aff
3

Não sou especialista no assunto, mas sou formado em Engenharia da Computação. Em teoria (essa é uma resposta altamente conceitual), um processador quad-core de 3GHz cada um pode ser equivalente a um processador de 12GHz se, por exemplo, houver quatro conjuntos de cálculos necessários para um único resultado final. Isso é chamado de processamento paralelo.

Para simplificar a lógica, digamos que estamos falando de um processador dual core. Se um conjunto de cálculos ocorrer, diga:

a = b + 1;

c = d + 1;

então, esses dois cálculos poderiam ser executados em núcleos separados e um processador xGHz seria equivalente a um processador 2 * xGHz de núcleo único. Isso ocorre porque os dois cálculos, embora feitos na velocidade x, seriam processados ​​ao mesmo tempo. Enquanto o processador mono-núcleo poderia fazê-los com velocidade 2 x x, mas um após o outro. Se as duas CPUs executassem esse código ao mesmo tempo, elas terminariam ao mesmo tempo. No entanto, se o código fosse:

a = b + 1;

c = a + 1;

então, o processador de núcleo duplo levaria o dobro do tempo que o processador de núcleo único porque, na segunda instrução, o valor de a depende da primeira instrução e, portanto, não pode ser executado em paralelo. É assim que alguns softwares podem tirar proveito dos processadores multithread.

Portanto, em teoria, um processador de núcleo único de 12GHz sempre pode funcionar tão rápido (ou mais rápido) que um processador de núcleo quádruplo de 3GHz, mas não vice-versa.

exploda a parede
fonte
Observe que esses cálculos só serão mais rápidos se forem multithread e, mesmo assim, haverá uma pequena sobrecarga. Mas sim, embora seja possível criar um processador de núcleo único que possa fazer tantos cálculos, simplesmente não é plausível devido ao calor e outras coisas.
Phoshi
Essa resposta é enganosa por dois motivos. Primeiro, os núcleos modernos fazem mais de uma coisa de cada vez. Segundo, a resposta assume que a velocidade do núcleo é a mesma da taxa em que o trabalho é realizado. Um processador de núcleo único de 12 GHz não funcionará tão rápido quanto um processador de núcleo quádruplo de 3GHz se o processador de núcleo único precisar de significativamente mais ciclos de clock para realizar o mesmo trabalho. (Que seria desde um processador de 12GHz precisaria pipelines muito mais tempo.)
David Schwartz
2

Esta é uma pergunta complicada de responder, mas a resposta curta é: Não

Em aplicações do mundo real, quatro processadores 3Ghz não serão tão rápidos quanto um único processador de 12Ghz devido a ineficiências. Eles podem estar muito próximos, mas NÃO serão iguais a um único processador em termos de poder de processamento.

A razão disso está nas pequenas ineficiências ao lidar com programas que podem ser executados em mais de um processador. Supondo que o programa em questão possa ser executado em paralelo, ainda teremos problemas com diferentes núcleos competindo entre si por outros recursos, como RAM ou mesmo problemas de sincronização de cache e encadeamento. Além disso, sempre há partes de programas que não podem ser paralelizadas e precisam ser executadas em um único núcleo por si só.

Dê uma olhada neste artigo: http://en.wikipedia.org/wiki/Amdahl%27s_law

Faken
fonte
Você está certo e errado. É provável que quatro processadores de 3ghz sejam MAIS RÁPIDOS do que um único processador de 12ghz em aplicativos do "mundo real". Hoje em dia, mais e mais programas usam multithreading, o link que você forneceu se refere a um aplicativo teórico de thread único. Um único processador de 12ghz possui apenas um encadeamento; portanto, os benefícios de vários threads que um programa do "mundo real" tem a oferecer seriam perdidos. O setor não está adotando núcleos mais lentos, em vez de menos núcleos mais rápidos, apenas porque os benefícios da tecnologia de múltiplos núcleos superam em muito os benefícios da tecnologia rápida de núcleo único.
ubiquibacon
3
@typoknig: Isso não é bem verdade. Um processador de núcleo único de 6 GHz executaria um aplicativo multithread na mesma velocidade que um processador de núcleo dual de 3GHz, supondo que o aplicativo esteja aproveitando ao máximo todos os threads (o que provavelmente não está fazendo se for "real"). aplicação mundial ", mas esse é um argumento separado). Não vemos processadores de 12 GHz porque é muito difícil com a tecnologia atual, não porque é mais lento.
Sasha Chedygov
4
@typoknig: Eu programei alguns programas mutithreaded e, acredite, se eu tivesse um único processador de 12Ghz, eu usaria isso. A programação de thread único é 10x mais fácil e muito mais eficiente do que a programação com thread muti. A verdadeira razão pela qual a indústria está movendo processadores de múltiplos mutantes não é porque eles são mais rápidos, é porque não podemos fazer com que CPUs individuais funcionem mais rápido! Isso foi descrito com a tecnologia netburst da Intel nos p4 dias. Eles estimaram processadores de 10 Ghz, pelo menos, até a física quântica dar um tapa na cara deles e dizer "noob!"
Faken 24/07/10
2
@typokning: O F22 usa uma matriz de processadores powerPC para obter 10 bilhões de instruções por segundo, muito diferentes de 10Ghz! É como dizer que o seu Radion HD5970 opera a 4600Ghz. É capaz de 4.6 TFLOPS, mas apenas porque é altamente paralelo.
Faken
1
@typoknig: Você claramente não entende a diferença entre a frequência da CPU e o IPS (instruções por segundo), elas não são a mesma coisa. Por favor, leia: en.wikipedia.org/wiki/Instructions_per_second
Faken
2

Parece que não podemos dizer que 4 núcleos a 3 GHz podem ser considerados 12 GHz.

Várias restrições, como memória compartilhada, contenção de cache e outros recursos, também são comuns a todos os núcleos, portanto, executar um pedaço de código paralelo nesses núcleos não será tão eficiente quanto executá-lo em processadores de 12 Ghz (embora seja difícil construir esse processador) )

Também li em algum lugar que, se dobrarmos os transistores incorporados no chip (CMP), a velocidade que obteremos é de apenas 40%. Isso fornece uma dica significativa para este tópico também.

Harmeet Singh
fonte
1

No que diz respeito aos ciclos de clock executados, sim, um processador multi-core realiza x * coresciclos de trabalho por segundo. Convencionalmente, as velocidades de clock são listadas por núcleo para comparação mais fácil (caso contrário, como você compararia facilmente um chip de núcleo duplo de 4GHz rodando a 2GHz / núcleo versus um chip de núcleo quádruplo de 4GHz rodando a 1GHz / núcleo?).

Infelizmente, o problema fica complexo quando você tenta comparar diferentes processadores em aplicativos do mundo real.

Primeiro, a maioria dos processadores multinúcleo possui alguns recursos compartilhados entre os núcleos (por exemplo, cache da CPU). Eles precisam compartilhar o acesso a esse cache, para que você não possa ter os dois núcleos armazenando ou lendo dados em velocidade máxima. Isso geralmente é atenuado em CPUs com muitos núcleos por ter vários caches compartilhados (por exemplo, a maioria dos chips quad-core possui 2 caches, cada um compartilhado por um par de núcleos), a fim de melhor dividir as chances de um gargalo em um recurso compartilhado.

Segundo, e talvez menos conhecido no mundo não técnico, é que comparar a velocidade do relógio às vezes pode ser como comparar maçãs e laranjas. CPUs diferentes realizam uma quantidade diferente de trabalho em um único ciclo de clock, portanto, dizer que você tem 1 GHz vs. 1,2 GHz parece ótimo, mas o chip de 1 GHz pode realmente fazer mais trabalho em um determinado intervalo de tempo. O Pentium 4 levou esse ponto para casa, levando ao mito Megahertz (que eu não sabia que tinha um nome cunhado até escrever este post).

Jimmy
fonte
As velocidades do relógio não são listadas "por núcleo". As velocidades nunca são "por" nada. Se um carro percorre 80 quilômetros por hora, a velocidade é de 80 quilômetros por hora. Se dois carros percorrem 80 quilômetros por hora, a velocidade ainda é de 80 quilômetros por hora. A idéia de uma "velocidade por carro" não tem sentido e é incoerente.
David Schwartz
1

Dois carros, cada um percorrendo 80 quilômetros por hora, não somam 100 quilômetros por hora. É realmente muito simples. A velocidade do relógio de um processador não é uma medida da velocidade com que o trabalho é realizado, é uma medida da velocidade com que o relógio passa.

David Schwartz
fonte