por msamsoniuk » 19 Mai 2008 13:36
bom, eh uma historia meio longa mas...
qualquer processador moderno processa uma instrucao em uma sequencia de eventos internos, que chamamos de pipeline, eh tipo uma linha de montagem. vc tem q buscar a instrucao, decodificar um endereco fonte, por exemplo, puxar o operando, tratar o operando e fazer alguma coisa com esse operando. tudo isso faz parte de uma instrucao e cada estagio consome, digamos, um ciclo de clock. entao uma unica instrucao consome varios ciclos! como vc poderia encolher isso ? bom, vc poderia ter varias instrucoes entrando pelo pipeline como em uma linha de montagem, cada uma defasada um clock da outra, assim quando uma instrucao estivesse buscando um operando, outra estaria usando a alu e outra estaria armazenando o operando.
em um exemplo simples, se vc tiver 5 estagios, vc pode ter 5 instrucoes encaminhadas dentro deles e obter 5 resultados em 5 clocks. se o pipeline estiver sempre cheio, vc vai obter o pico de aproximadamente 1 instrucao por clock... o problema eh que as vezes uma instrucao precisa de um operando q esta em uso por outra instrucao, por exemplo, uma instrucao MUL D0,D1 e outra ADD D2,D1, se ambas estao no pipeline, eh de se esperar que um ADD consiga terminar antes de um MUL, mesmo que tenha entrado depois no pipeline! para evitar isso ativam-se automaticamente interlocks q param o pipeline ateh que o resultado esteja disponivel. isso causa uma queda de performance e vc comeca a nao ter aquela relacao de 1 instrucao por 1 clock...
a mips resolveu isso eliminando os interlocks. entao quando se compila algo, o compilador automaticamente reordena as instrucoes de modo que a instrucao ADD vai entrar lah embaixo, bem depois da instrucao MUL ter disponivel o resultado. no meio, ele simplesmente sobe coisas q nao ativam interlocks e que podem ser colocadas em qualquer posicao. com isso vc garante que chega perto de 1 instrucao para 1 clock a maior parte do tempo, aproveitando totalmente o pipeline do processador, em contrapartida torna a ordenacao das instrucoes altamente especializada, ou seja, vc depende de um compilador que conheca profundamente o processador e saiba como se safar da ausencia de interlock.
bom, as coisas existem pq tem um diferencial nao eh ? se o processador mips nao tem mais o diferencial da ausencia de interlock (o q torna impossivel a programacao manual em asm), realmente o destino dele eh ser esquecido e ir para a lata do lixo! sobrevive soh quem tem algum diferencial ou eh muito importante...