tl; dr
Pipelines mais curtos significam velocidades de clock mais rápidas, mas podem reduzir o throughput. Além disso, veja as respostas 2 e 3 na parte inferior (elas são curtas, prometo).
Versão mais longa:
Há algumas coisas a considerar aqui:
- Nem todas as instruções levam o mesmo tempo
- Nem todas as instruções dependem do que foi feito imediatamente (ou mesmo de dez ou vinte) instruções
Um pipeline muito simplificado (o que acontece nos chips Intel modernos é muito complexo) tem várias etapas:
Buscar - > Decodificar - > Acesso à Memória - > Execute - > Writeback - > Atualização do contador de programa
Em cada um - > há um custo de tempo incorrido. Além disso, todo tick (ciclo de clock), tudo se move de um estágio para o próximo, então seu estágio mais lento se torna a velocidade para TODOS os estágios (realmente vale a pena que eles sejam o mais semelhantes possível).
Digamos que você tenha 5 instruções e queira executá-las (foto tirada da wikipedia, aqui a atualização do PC não foi feita). Ficaria assim:
Emboracadainstruçãoleve5ciclosdeclockparaconcluir,umainstruçãoacabadasaidopipelineacadaciclo.Seotemponecessárioparacadaestágiofor40nse15nsparaosbitsintermediários(usandomeupipelinedeseisestágiosacima),serãonecessárias40*6+5*15=315nsparaobteraprimeirainstrução.
Poroutrolado,seeufosseeliminartotalmenteopipeline(masmantertodoorestoigual),seriamnecessáriosapenas240nsparaobteraprimeirainstrução.(Essadiferençanavelocidadeparaobtera"primeira" saída de instrução é chamada de latência. Geralmente, é menos importante que a taxa de transferência, que é o número de instruções por segundo).
O real diferente é que no exemplo pipeline, eu recebo uma nova instrução (após a primeira) a cada 60 ns. No sem pipeline, são necessárias 240 vezes. Isso mostra que os pipelines são bons em melhorar o rendimento.Dando um passo adiante, parece que no estágio de acesso à memória, eu precisarei de uma unidade de adição (para fazer cálculos de endereço). Isso significa que, se houver uma instrução que não use o estágio mem desse ciclo, posso fazer outra adição. Assim, posso executar dois estágios de execução (com um no estágio de acesso à memória) em um processador em um único tick (o agendamento é um pesadelo, mas não vamos lá. Além disso, o estágio de atualização do PC também precisará de uma unidade de adição no caso de um salto, então eu posso fazer três estados de execução de adição em um tick). Por ter um pipeline, ele pode ser projetado de tal forma que duas (ou mais) instruções possam usar estágios diferentes (ou estágios leapfog, etc), economizando tempo valioso.
Note que, para fazer isso, os processadores fazem muita "mágica" ( execução fora de ordem , previsão de ramificação e muito mais), mas isso permite que várias instruções saiam mais rápido do que sem um pipeline (nota que os pipelines que são muito longos são muito difíceis de gerenciar, e incorrem em um custo maior apenas esperando entre os estágios). O outro lado é que se você fizer o pipeline ficar muito tempo, você pode obter uma velocidade de clock insana, mas perderá muito dos benefícios originais (de ter o mesmo tipo de lógica que pode existir em vários lugares e ser usado ao mesmo tempo ).
Resposta 2:
SIMD (múltiplos dados de instrução única) processadores (como a maioria das GPUs) fazem muito trabalho em muitos bits de informação , mas leva mais tempo para fazer. A leitura em todos os valores é mais demorada (significa um relógio mais lento, embora isso seja compensado por ter um barramento muito mais amplo até certo ponto), mas você pode obter muito mais instruções por vez (instruções mais efetivas por ciclo).
Resposta 3:
Porque você pode "trapacear" um alongamento artificial da contagem de ciclo para que você possa fazer duas instruções a cada ciclo (diminua a metade a velocidade do clock). Também é possível fazer algo a cada dois ticks em vez de um (dando uma velocidade de clock de 2x, mas não mudando nas instruções por segundo).