Aula 11

Data de publicação: Nov 28, 2013 10:16:5 PM

Técnicas de processamento paralelo

Aumentar a velocidade de relógio interno de um processador levou sobretudo a um problema incontornável: o sobreaquecimento.

Por outro lado, desenvolver um processador de um único núcleo para velocidades muito elevadas seria quase sempre subaproveitado, especialmente para o caso do utilizador comum (desperdício energético).

Um processador executa cada programa de forma sequencial, passo a passo. Na presença de duas instruções sequenciais, mas sem dependências entre elas, seria vantajoso que ambas fossem realizadas em simultâneo. A primeira abordagem denominou-se de pipelining (representa o método que permite ao processador não necessitar de esperar o término de uma instrução para processar uma nova.

Vejamos as diferenças de um CPU com e sem pipelining na execução das duas somas anteriores:

Pipelining

Em termos do ciclo fetch-decode-execute (procura-descodifica-executa) é que residem as grande diferenças entre um CPU com e sem pipelining.

Vejamos como são atendidas duas instruções por um processador sem pipelining.

CPU sem pipelining

Como se pode verificar a segunda instrução apenas é atendida quando a primeira termina de ser executada.

As mesmas instruções poderiam ser atendidas por um processador com pipelining da seguinte forma:

CPU com pipelining

Na figura anterior, verifica-se que as mesmas instruções foram executadas em menos ciclos que a abordagem anterior, devido ao paralelismo de atendimento das instruções.

Se houvesse uma terceira instrução e um terceiro estágio de pipelining ela começaria a ser processada no terceiro ciclo juntamente com a fase de execução (primeira instrução) e descodificação (segunda instrução).

A partir dessa altura, seria possível realizar uma instrução por cada ciclo aumentado a "velocidade de processamento" (throughput)

Três estágios de pipelining

Quanto mais estágios de pipelining mais instruções poderiam ser atendidas em simultâneo desde que estas também fossem partidas no mesmo número de estágios, ou seja, em vez da instrução ser partida em 3 partes (fetch-decode-execute) seria dividida em mais partes, passando naturalmente menos tempo de relógio em cada parte da instrução (apesar do tempo total ser o mesmo). No entanto, era possível ter em paralelo N número de instruções a serem processadas. Isto aumentava a velocidade de processamento (em termos de throughput) num fator igual ao número de estágios. O aumento de estágios denomina-se de profundidade de pipeline (pipeline deep).

O pentium4 Prescot contava com 31 pipelines, mas os processadores seguintes optaram por baixar esse número.

A profundidade era também um inconveniente quando algo corria mal, sendo necessário esvaziar (flush) o conteúdo do pipeline que demorava tanto mais tempo conforme maior fossem o número de estágios. Esta é outra das razões que levou os microprocessadores atuais a baixarem o número de estágios. Atualmente esse número encontra-se entre os 10 e os 20.

Outra técnica implementada para aumentar o rendimento de um processador foi o Hyper-Threading (HT), pela primeira vez introduzido no Pentium IV HT. Basicamente o HT permite dividir um processador físico em dois processadores lógicos, que aos olhos do SO passa a ser visto como um processador de dois núcleos (dual core). Assim, o mesmo programa é dividido em threads que são tratados em simultâneo pelos dois núcleos virtuais, permitindo um melhor aproveitamento do CPU. Porém, para que isso aconteça o programa a correr tem de prever a divisão em threads, algo que é realizado pelos programadores durante a implementação do código. Hoje em dia, cada vez mais a programação é orientada a multi-thread e também para multiprocessamento para que possa haver um melhor aproveitamento do processador.

Claramente não é possível obter os mesmos resultados através de uma simulação de vários processadores lógicos (aproximadamente mais 20 a 25%) como seria possível obter com o mesmo número de processadores físicos. No entanto, o custo é consideravelmente menor implementando um tecnologia HT face ao custo de microprocessadores físicos.

A Intel deixou de implementar esta técnica na série Core2, mas voltou em força agora com a série Core i. Assim, por exemplo, um processador da série Core i de 4 núcleos no SO aparecerá com 8 núcleos.

8 núcleos, Core i7 HT

PROPOSTA DE TRABALHO

Abra o Gestor de Tarefas e verifique quantos processadores o seu SO detecta.