domingo, 6 de fevereiro de 2011

Arquitectura Superescalar

O termo superescalar refere-se a uma arquitectura de processador que tenha mais de uma unidade de execução ou pipelines. Estas unidades são nada mais nada menos que os locais do processador onde são processados os dados e as instruções.

No caso de uma arquitectura simples, as instruções são executadas numa só pipeline, enquanto que numa arquitectura superescalar as instruções são executadas em duas ou mais pipelines.

Vamos ver com um pequeno exemplo como isso se processa, tomando o caso dos processadores i486 e Pentium, sendo o primeiro um processador convencional e o segundo um superescalar de grau dois, isto é, capaz de executar duas instruções simultaneamente.

Imaginemos um programa com duas instruções seguidas:  A+B e C+D. Como as instruções não têm qualquer dependência entre elas, executar C+D antes de A+B não têm qualquer interferência no resultado final. Assim sendo, o processador pode executá-las simultaneamente, isto é, podem ser executadas paralelamente, uma em cada canal ou pipeline. Com isto podemos obter o dobro do desempenho em relação a outros processdores anteriores ao Pentium, já que foi o primeiro superescalar da Intel.

No entanto, se o nosso programa tiver instruções dependentes, isto é, a continuação de uma dependa do resultado da outra, a operação já se processa de outro modo.

Se tivermos a instrução A+B e (A+B)+C, podemos ver que esta segunda instrução não pode ser executada sem que a primeira forneça um resultado, pelo que cada instrução será executada pela sua ordem lógica, como aconteceria em qualquer processador convencional anterior ao Pentium.

Comparativamente com a execução simples, ou sequencial, o pipelining leva-nos a um aumento da performance do processador. Teoricamente, quantos mais estágios tivermos numa pipeline, maior será a velocidade que podemos tirar dela. Por exemplo, suponhamos que são necessários 12 ciclos de relógio para processar todos os passos necessários de uma instrução; se usarmos uma pipeline de quatro estágios, o máximo que ela consegue processar será uma instrução por cada três ciclos, mas se usarmos uma pipeline de seis estágios, já conseguimos uma instrução em cada dois ciclos. Como é lógico, isto é somente um exemplo muito simplificado.

Sem comentários:

Enviar um comentário