Segundo a Wikipedia, o poder de processamento está fortemente vinculado à lei de Moore:
http://en.wikipedia.org/wiki/Moore's_law
O número de transistores que podem ser colocados de forma barata em um circuito integrado dobrou aproximadamente a cada dois anos. A tendência continua por mais de meio século e não se espera que pare até 2015 ou mais tarde. As capacidades de muitos dispositivos eletrônicos digitais estão fortemente ligadas à lei de Moore: velocidade de processamento, capacidade de memória, sensores e até o número e tamanho de pixels nas câmeras digitais. Tudo isso também está melhorando a taxas exponenciais (aproximadamente).
Como alguém que tem alguma experiência em arquitetura de computadores, não entendo por que a introdução de mais transistores em uma CPU aumentaria sua potência, já que, em última análise, as instruções são aproximadamente lidas / executadas sequencialmente. Alguém poderia explicar qual parte estou faltando?
Respostas:
Muitas coisas que lhe dão mais potência exigem apenas mais transistores para construí-las. Barramentos mais amplos aumentam a contagem de transistores em quase todos os componentes do processador. Os caches de alta velocidade adicionam transistores de acordo com o tamanho do cache. Se você prolongar um pipeline, precisará adicionar estágios e unidades de controle mais complexas. Se você adicionar unidades de execução para ajudar a mitigar um gargalo no pipeline, cada um deles exigirá mais transistores e, em seguida, os controles para manter as unidades de execução alocadas adicionam ainda mais transistores.
O problema é que, em um circuito eletrônico, tudo acontece em paralelo. No mundo do software, o padrão é que as coisas sejam sequenciais, e os designers de software esforçam-se ao máximo para incorporar o paralelismo no software, para que ele possa tirar proveito da natureza paralela do hardware. Paralelismo significa apenas mais coisas acontecendo ao mesmo tempo, o que equivale aproximadamente à velocidade; quanto mais coisas puderem ser feitas em paralelo, mais rápido você poderá fazer as coisas. O único paralelismo real é o que você obtém quando possui mais transistores no trabalho.
fonte
As primeiras instruções não são necessariamente "executadas sequencialmente", mesmo em um ISA não-VLIW, a execução precisa apenas parecer sequencial. Uma implementação superescalar em ordem pode executar mais de uma instrução em paralelo com outra. Para fazer isso de forma eficaz, o hardware para instruções de decodificação deve ser aumentado (ampliado), o hardware deve ser adicionado para garantir a independência dos dados das instruções a serem executadas em paralelo, os recursos de execução devem ser aumentados e o número de portas dos arquivos de registro geralmente aumentado. Todos esses adicionam transistores.
Uma implementação fora de ordem, que permite que instruções posteriores sejam executadas antes de versões anteriores, desde que não haja dependências de dados, usa hardware adicional para lidar com o agendamento de instruções assim que os dados ficam disponíveis e adiciona registros e hardware de renomeação para mapeamento, alocando e liberando-os (mais transistores) para evitar riscos de gravação após leitura e gravação após gravação. A execução fora de ordem permite que o processador evite o bloqueio.
A reordenação de cargas e armazenamentos em um processador fora de ordem exige a garantia de que os armazenamentos anteriores à ordem do programa encaminhem os resultados para carregamentos posteriores do mesmo endereço. Isso implica lógica de comparação de endereços, bem como armazenamento para os endereços (e tamanho) das lojas (e armazenamento para os dados) até que a loja tenha sido confirmada na memória (o cache). (Para um ISA com um modelo de consistência de memória menos fraco, também é necessário verificar se as cargas estão ordenadas corretamente em relação aos armazenamentos de outros processadores - mais transistores.)
O pipelining adiciona algum controle adicional e sobrecarga de buffer e evita a reutilização da lógica para diferentes partes do manuseio de instruções, mas permite que as diferentes partes do manuseio de uma instrução se sobreponham no tempo para instruções diferentes.
Pipelining e execução superescalar aumentam o impacto dos riscos de controle (ou seja, ramificações e saltos condicionais). O pipelining (e também a execução fora de ordem) pode atrasar a disponibilidade do destino mesmo de saltos incondicionais, portanto, adicionar hardware para prever destinos (e direção para ramificações condicionais) permite que a busca de instruções continue sem aguardar a parte de execução do processador para disponibilizar os dados necessários. Preditores mais precisos tendem a exigir mais transistores.
Para um processador fora de ordem, pode ser desejável permitir que uma carga da memória seja executada antes que os endereços de todos os armazenamentos anteriores tenham sido computados; portanto, é necessário algum hardware para lidar com essa especulação, incluindo potencialmente um preditor.
Os caches podem reduzir a latência e aumentar a largura de banda dos acessos à memória, mas adicionam transistores para armazenar os dados e armazenar tags (e comparar tags com o endereço solicitado). Também é necessário hardware adicional para implementar a política de substituição. A pré-busca de hardware adicionará mais transistores.
A implementação da funcionalidade no hardware, em vez do software, pode aumentar o desempenho (enquanto exige mais transistores). Por exemplo, gerenciamento TLB, operações complexas, como operações de multiplicação ou ponto flutuante, operações especializadas, como zeros à esquerda na contagem. (A adição de instruções também aumenta a complexidade da decodificação de instruções e, geralmente, também a complexidade da execução - por exemplo, para controlar quais partes do hardware de execução serão usadas.)
As operações SIMD / vetor aumentam a quantidade de trabalho realizado por instrução, mas exigem mais armazenamento de dados (registros mais amplos) e geralmente usam mais recursos de execução.
(O multithreading especulativo também pode permitir que vários processadores executem um único programa encadeado mais rapidamente. Obviamente, adicionar processadores a um chip aumentará a contagem de transistores.)
Ter mais transistores disponíveis também pode permitir que os arquitetos de computadores forneçam ao ISA mais registros visíveis ao software, reduzindo potencialmente a frequência de acessos à memória, que tendem a ser mais lentos que os acessos a registros e envolvem algum grau de indireção (por exemplo, adicionar um deslocamento à pilha ponteiro) que aumenta a latência.
A integração - que aumenta o número de transistores em um chip, mas não no sistema - reduz a latência da comunicação e aumenta a largura de banda, obviamente permitindo um aumento no desempenho. (Também há uma redução no consumo de energia que pode ser traduzida em aumento de desempenho.)
Mesmo no nível de execução das instruções, adicionar transistores pode aumentar o desempenho. Por exemplo, um somador de seleção de transporte adiciona bits superiores duas vezes em paralelo com diferentes suposições da transferência a partir dos bits inferiores, selecionando a soma correta de bits superiores quando a execução a partir dos bits inferiores está disponível, obviamente exigindo mais transistores do que um simples o ripple carrega o adicionador, mas reduz o atraso na produção da soma total. Da mesma forma, um multiplicador com uma única linha de adicionadores de carry-save usa menos transistores (mas é mais lento) do que um multiplicador de árvore Dadda (ou Wallace) e não pode ser canalizado (portanto, teria que ser replicado para permitir que outro multiplicador inicie a execução enquanto um anterior multiplicar estava em andamento).
O exposto acima pode ser cansativo, mas não exaustivo!
fonte
O número de transistores não se correlaciona necessariamente com mais poder de processamento; no entanto, com mais transistores, o processador pode executar instruções cada vez mais complicadas do que antes. Por exemplo, um processador com SSE usará transistores adicionais para implementar essas instruções complexas (adicionando muitos números em um ciclo, por exemplo).
fonte
Outro fator: à medida que você empurra mais transistores para uma determinada área, eles ficam menores, tornando-os mais rápidos.
fonte
Os microprocessadores avançaram significativamente nos últimos anos, coisas como pipelines mais longos, ramificação predicativa e cache de chip foram adicionados às complexidades associadas a um processador.
Certifique-se de que o básico do processamento da CPU, busca, decodificação, ALU, gravação ainda é o mesmo, mas para acelerar as coisas, pipelines mais longos são usados. Pipelnes mais longos aumentam o desempenho para execução contínua de código, mas também incorrem em tempos de acerto maiores quando as ramificações do código prejudicam o desempenho. Remédio, ramificação preditiva. A ramificação preditiva é um segredo comercial, que a Intel normalmente não divulga o funcionamento completo, basta usá-la para manter o desempenho o mais alto possível em suas CPUs.
A memória cache é muito mais rápida que a RAM, mas o que mover da RAM para o cache e do cache de volta para a RAM ??? Novamente, são coisas proprietárias, mas são necessários transistores novamente para serem implementados.
Assim, os transistores extras entram em coisas como o pipeline mais longo, algoritmos preditivos de ramificação, memória cache e algoritmos de memória.
Isso sem mencionar processadores com vários núcleos e controladores de acesso à memória / recursos compartilhados.
fonte