Como um processador pode executar mais IPS do que sua freqüência? [duplicado]

14

Isso tem sido algo que eu não consigo envolver minha cabeça. Quase todo processador moderno é capaz de executar mais instruções por segundo do que sua freqüência.

Eu posso entender porque processadores de classe baixa podem executar menos IPS do que sua freqüência. Por exemplo, o ATmega328 executa cerca de 16 MIPS a 16 MHZ (ou pelo menos foi o que me disseram), e o Z80 executa 0,5 MIPS a 4 MHz. Mas o Pentium 4 Extreme pode executar mais de 9 GIPS a apenas 3,2 GHz. Isso é cerca de três instruções por ciclo de clock!

Como isso é feito e por que isso não é implementado em processadores menores, como os microcontroladores AVR ?

Encontrei todas as minhas informações, exceto o ATmega328, de aqui .

    
por Jaca 15.07.2015 / 07:28

4 respostas

23

Isso se deve a uma combinação de recursos de processadores modernos.

A primeira coisa que contribui para um alto IPS é o fato de que os processadores modernos têm várias unidades de execução que podem operar de forma independente. Na imagem abaixo (emprestada de Wikipedia: Intel Core Microarchitecture ) você pode ver na parte inferior que existem oito unidades de execução (mostradas em amarelo) que podem todas executar instruções simultaneamente. Nem todas essas unidades podem proteger os mesmos tipos de instrução, mas pelo menos 5 delas podem executar uma operação da ALU e há três unidades com capacidade SSE.

Combineissocomumlongopipelinedeinstruções pipeline de instruções , que pode empilhar de forma eficiente instruções prontas para que essas unidades executem instruções ( fora de ordem , se necessário) significa que um processador moderno pode ter um grande número de instruções em tempo real em qualquer tempo.

Cada instrução pode levar alguns ciclos de clock para ser executada, mas se você conseguir paralelizar com eficácia a sua execução, você poderá dar um grande impulso ao IPS, ao custo da complexidade do processador e da saída térmica.

Manter esses pipelines grandes cheios de instruções também precisa de um cache grande que possa ser preenchido com instruções e dados. Isso contribui para o tamanho do dado e também a quantidade de calor que o processador produz.

A razão pela qual isso não é feito em processadores menores é porque aumenta substancialmente a quantidade de lógica de controle necessária em torno dos núcleos de processamento, bem como a quantidade de espaço necessária e também o calor gerado. Se você quer um processador pequeno, de baixa potência e altamente responsivo, então você quer um pipeline curto sem muito material "extra" em torno dos núcleos funcionais reais. Normalmente, eles minimizam o cache, restringem-no a apenas um de cada tipo de unidade necessário para processar instruções e reduzem a complexidade de cada parte.

Eles poderiam tornar um processador pequeno tão complexo quanto um processador maior e alcançar um desempenho similar, mas então os requisitos de consumo de energia e resfriamento seriam aumentados exponencialmente.

    
por 15.07.2015 / 09:09
4

Não é difícil imaginar. Um ciclo é o suficiente para mudar muitos milhares de transistores. Enquanto as instruções estiverem alinhadas em paralelo, um ciclo pode ser suficiente para executar todas elas.

Melhor do que tentar explicar por mim mesmo, aqui está um bom ponto de partida .

    
por 15.07.2015 / 07:36
3

Para se tornar um pouco mais fundamental do que a resposta de Mokubai:

As CPUs superescalares analisam o fluxo de instruções para as dependências de dados (e outras) entre as instruções. Instruções que não dependem umas das outras podem ser executadas em paralelo.

As CPUs de desktop x86 típicas buscam 16 ou 32B de instruções a cada ciclo de clock. Intel projeta desde Core2 pode emitir até 4 instruções por ciclo. (Ou 5, se houver uma comparação e ramificação que possa macro-fusível).

Veja a boa resposta de Mobukai para links e detalhes sobre como as CPUs, na prática, lidam com a tarefa de extrair tanto paralelismo de nível de instrução quanto o código que executam.

Veja também link e artigos semelhantes para outras arquiteturas de CPU para uma explicação detalhada sobre o que está dentro do capô.

    
por 15.07.2015 / 14:47
-2

As respostas anteriores mostram como alguém obtém mais instruções executadas pela definição do processador de "instrução" e imagina que é realmente a intenção do questionador.

Mas outra fonte pode ser que cada "instrução" seja, na verdade, uma certa quantidade de dados tratada como uma entrada de instrução pelo processador. Se a contagem de sua fonte contasse apenas o que o processador considera como instruções, o seguinte não acrescenta nada. Mas se sua fonte conta tudo o que um humano chamaria de "instrução", então: Acrescente que nem toda instrução é tão fisicamente longa quanto todas as outras instruções (uma pode ter 12 bytes, outra pode ter 56 bytes, etc.). Portanto, se ele carregar 64 bytes de material em cada ciclo como "uma instrução" (ou quantas instruções completas puder antes de atingir 64 bytes) e uma tiver seis instruções nesses 64 bytes, então seis instruções (como você e eu podemos considerá-las) ) será finalizado nesse ciclo.

Como muitas instruções básicas (nossa definição "sensata") são sobras dos primeiros dias com comprimentos de instrução de 8 bytes, e instruções muito básicas são, por definição, talvez usadas de forma desproporcional, apenas isso ajudaria a ter mais " instruções "realizadas que a frequência parece permitir.

    
por 15.07.2015 / 18:24

Tags