Como um processador pode executar mais IPS do que sua frequência?

Como um processador pode executar mais IPS do que sua frequência?

Isso tem sido algo que não consigo entender. Quase todo processador moderno é capaz de executar mais instruções por segundo do que sua frequência.

Posso entender por que os processadores de classe inferior podem executar menos IPS do que sua frequência. Por exemplo, oATmega328executa cerca de 16 MIPS a 16 MHZ (ou pelo menos foi o que me disseram), e oZ80executa 0,5 MIPS a 4 MHz. Mas o Pentium 4 Extreme pode executar mais de 9 GIPS em apenas 3,2 GHz. Isso equivale a cerca de três instruções por ciclo de clock!

Como isso é feito e por que não é implementado em processadores menores, comoAVRmicrocontroladores?

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

Responder1

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

A primeira coisa que contribui para um IPS alto é o fato de os processadores modernos possuírem múltiplas unidades de execução que podem operar de forma independente. Na imagem abaixo (emprestada deWikipedia: 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 garantir os mesmos tipos de instrução, mas pelo menos 5 delas podem executar uma operação ALU e há três unidades com capacidade SSE.

insira a descrição da imagem aqui

Combine isso com um longopipeline de instruçõesque pode empilhar eficientemente instruções prontas para que essas unidades executem instruções (fora de serviço, 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 paralelizar efetivamente sua execução, poderá aumentar enormemente o IPS ao custo da complexidade do processador e da saída térmica.

Manter esses grandes pipelines cheios de instruções também requer um grande cache que possa ser pré-preenchido com instruções e dados. Isso contribui para o tamanho da matriz e também para 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ê deseja um processador pequeno, de baixo consumo de energia e altamente responsivo, deseja um pipeline curto, sem muitas coisas "extras" em torno dos núcleos funcionais reais. Normalmente, eles minimizam o cache, restringem-no a apenas uma unidade de cada tipo necessária para processar instruções e reduzem a complexidade de cada parte.

Elespoderiatornar um processador pequeno tão complexo quanto um processador maior e obter um desempenho semelhante, mas então o consumo de energia e os requisitos de resfriamento aumentariam exponencialmente.

Responder2

Não é difícil imaginar. Um ciclo é suficiente para comutar milhares de transistores. Desde que as instruções estejam alinhadas em paralelo, um ciclo pode ser suficiente para executar todas elas.

Melhor do que tentar explicar sozinho,aqui está um bom ponto de partida.

Responder3

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 instruções. Instruções que não dependem umas das outras podem ser executadas em paralelo.

CPUs de desktop x86 típicas buscam 16 ou 32B de instruções a cada ciclo de clock. Os designs 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 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 em nível de instrução quanto do código que executam.

Veja tambémhttp://www.realworldtech.com/sandy-bridge/e artigos semelhantes para outras arquiteturas de CPU para uma explicação detalhada do que está por trás.

Responder4

As respostas anteriores mostram como se obtém mais instruções executadas pela definição de "instrução" do processador e imagina-se que essa seja 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 uma instrução recebida pelo processador. Se a contagem de sua fonte apenas contar o que o processador considera instruções, o que se segue não acrescenta nada. Mas se sua fonte conta tudo o que um humano chamaria de "instrução", então: Adicione que nem toda instrução é fisicamente tão 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 em cada ciclo como "uma instrução" (ou quantas instruções completas puder antes de atingir 64 bytes) e se 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 muito 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 já ajudaria muito a ter mais "instruções" executadas do que a frequência parece permitir.

informação relacionada