Na verdade, projetei alguns processadores (há muitos anos) e tenho um pouco de experiência nas compensações.
Para aumentar as instuções por ciclo (ou, mais provavelmente, reduzir os ciclos por instrução) você geralmente precisa "jogar o hardware" no problema - adicionar mais portas, trincos e multiplexadores. Além de um certo ponto (que foi aprovado cerca de uma década atrás), você deve "pipeline" e estar trabalhando em várias instruções ao mesmo tempo. Esse aumento na complexidade não apenas aumenta os custos básicos (como o custo de um chip está relacionado à área que ocupa), mas também aumenta a probabilidade de um bug passar pela revisão inicial do projeto e resultar em um chip ruim que deve ser "respun" - um grande custo e cronograma atingido. Além disso, o aumento da complexidade aumenta as cargas, de modo que, na ausência de ainda mais hardware, a duração de um ciclo realmente aumenta. Você pode encontrar a situação em que a adição de hardware diminui a velocidade. (De fato, vi isso acontecer em um caso.)
Além disso, o "pipelining" pode encontrar condições em que o pipeline está "quebrado" devido a ramificações frequentes (e imprevistas) e outros problemas desse tipo, fazendo com que o processador fique lento para rastrear. Portanto, há um limite para quanto disso pode ser feito produtivamente.
Para acelerar os ciclos individuais, é necessário fazer uma de três coisas:
- Use uma tecnologia mais rápida (um "acéfalo" se a tecnologia estiver disponível, mas tecnologias novas e mais rápidas não estão aparecendo com a frequência que costumavam)
- De alguma forma, remova a lógica do "caminho crítico" (possivelmente excluindo instruções complexas do conjunto de instruções ou adicionando outras limitações no nível do software).
- Reduza o atraso de propagação pelos caminhos de dados mais lentos (o que geralmente significa "jogar o hardware" no problema novamente - e novamente com a chance de que isso sair pela culatra e atrasar as coisas).
Portanto, são muitas trocas e um pouco de sapateado através de um campo minado.