Isso tem sido algo que eu não consigo entender. Praticamente todos os processadores modernos são capazes de executar mais instruções por segundo do que sua frequência.
Entendo por que os processadores de classe baixa podem executar menos IPS do que sua frequê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 em apenas 3,2 GHz. São cerca de três instruções por ciclo de relógio!
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, daqui .
Respostas:
Isso ocorre devido a uma combinação de recursos dos processadores modernos.
A primeira coisa que contribui para um alto IPS é o fato de os processadores modernos terem várias unidades de execução que podem operar de forma independente. Na imagem abaixo (emprestada da Wikipedia: Microarquitetura Intel Core ), você pode ver na parte inferior que existem oito unidades de execução (mostradas em amarelo) que podem executar instruções simultaneamente. Nem todas essas unidades podem proteger os mesmos tipos de instrução, mas pelo menos cinco delas podem executar uma operação de ALU e há três unidades compatíveis com SSE.
Combine isso com um longo pipeline de instruções que pode empilhar com eficiência instruções prontas para essas unidades executarem 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 a qualquer momento.
Cada instrução pode levar alguns ciclos de clock para ser executada, mas se você puder efetivamente paralelizar sua execução, poderá dar um impulso maciço ao IPS com o 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 da matriz e também a quantidade de calor que o processador produz.
O motivo para isso não ser 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ário e também o calor gerado. Se você deseja um processador pequeno, de baixa potência e altamente responsivo, deseja um pipeline curto sem muita coisa "extra" ao redor dos núcleos funcionais reais. Normalmente, eles minimizam o cache, restringem-no a apenas um de cada tipo de unidade necessária para processar instruções e reduzem a complexidade de cada peça.
Eles poderiam tornar um processador pequeno tão complexo quanto um processador maior e obter um desempenho semelhante, mas os requisitos de consumo de energia e refrigeração seriam aumentados exponencialmente.
fonte
Não é difícil de imaginar. Basta um ciclo para trocar muitos milhares de transistores. Desde que as instruções sejam alinhadas em paralelo, um ciclo pode ser suficiente para executá-las todas.
Melhor do que tentar explicar sozinho, aqui está um bom ponto de partida .
fonte
Para ser um pouco mais fundamental do que a resposta de Mokubai:
CPUs superescalares analisam o fluxo de instruções em busca de dependências de dados (e outras) entre as instruções. Instruções que não dependem uma da outra podem ser executadas em paralelo.
As CPUs de desktop x86 típicas buscam 16 ou 32B de instruções a cada ciclo de clock. Os projetos da Intel, desde o Core2, podem emitir até 4 instruções por ciclo. (Ou 5, se houver uma comparação e ramificação que possa se fundir em macro).
Veja a boa resposta de Mobukai para obter links e detalhes sobre como as CPUs na prática executam a tarefa de extrair tanto paralelismo no nível de instrução quanto no código que executam.
Consulte também http://www.realworldtech.com/sandy-bridge/ e artigos semelhantes para outras arquiteturas de CPU para obter uma explicação detalhada do que está por trás.
fonte
As respostas anteriores mostram como se obtém mais instruções executadas pela definição de "instrução" do processador e se imagina que é realmente a intenção do questionador.
Mas outra fonte disso pode ser que cada "instrução" seja na verdade uma certa quantidade de dados tratados como entrada de instrução pelo processador. Se a contagem de sua fonte conta apenas o que o processador considera como instruções, o seguinte não adiciona 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 qualquer outra instrução (uma pode ter 12 bytes, outra pode ter 56 bytes etc.). Portanto, se ele carrega 64 bytes de material a cada ciclo como "uma instrução" (ou tantas instruções completas quanto possível antes de atingir 64 bytes) e uma possui seis instruções nesses 64 bytes, seis instruções (como você e eu podemos considerá-las ) será concluído nesse ciclo.
Como muitas instruções muito básicas (nossa definição "sensata") são sobras desde os primeiros dias com comprimentos de instrução de 8 bytes, e instruções muito básicas são, por definição, talvez usadas desproporcionalmente, apenas isso ajudaria muito a realizar mais "instruções" que a frequência parece permitir.
fonte
add al, bl
e um 80386add eax, ebx
.