Você está na página 1de 20

Captulo 4

O Processador
4.1 Introduo
Aprendemos at o presente a utilizar uma linguagem de montagem e como esta linguagem convertida para linguagem de mquina, que efetivamente inteligvel ao processador. Com os conhecimentos adquiridos possvel descrever, no nvel funcional, o comportamento de uma mquina que executa as instrues que ns projetamos. Este captulo tem a inteno de mostrar como podemos projetar um hardware para tornar realidade um tal processador de instrues. Tambm introduziremos a questo do desempenho, que ser tratada de forma mais abrangente no captulo 5. Aqui a abordagem ser meramente a construo de um pipeline que permita que as instrues sejam executadas por partes, promovendo uma melhor utilizao dos recursos e diminuindo o tempo necessrio para execuo de um programa. Finalmente veremos, na viso do software, como podemos especificar uma organizao de um computador de forma mais sofisticada utilizando ArchC.

4.2 Componentes da via de dados


Para construirmos uma via de dados capaz de executar as instrues que ns projetamos preciso conhecer primeiro os componentes fundamentais de uma organizao de computador. Ns j nos deparamos com o modelo de memria como um grande repositrio de informaes endereveis. Como descreveremos em detalhes o sistema de memrias no captulo 6, vamos apenas considerar que uma memria uma caixa que possui duas informaes

97

98

Arquitetura de Computadores: a viso do software

de entrada: se haver uma leitura ou escrita; e qual o endereo ser lido/escrito. A Figura 4.1 mostra o modelo utilizado. Um sinal de controle W/R indica se haver uma leitura (02) ou escrita (12). O endereo posto pelo processador nos 32 bits que compem o endereo. No caso de uma leitura de informao, o dado requerido disponibilizado nos 32 bits que compem a entrada/sada da memria. No caso de uma escrita de informaes, o processador disponibiliza o dado e o endereo onde ele deve ser escrito e envia um sinal de escrita (W/R=12). Mencionamos no captulo 1 deste livro que na memria existem duas regies distintas: a de cdigo e a de dados. Esta distino meramente convencionada, mas existem tcnicas que permitem a utilizao simultnea das duas regies. Para o software como se existissem duas memrias separadas. Vamos seguir este modelo no desenvolvimento do restante de nossa construo da via de dados.
W/R
1

Endereo

32

Memria

32

Entrada/Sada Informao Figura 4.1: Representao de uma memria

O segundo componente da via de dados o banco de registradores. Ns j sabemos que uma instruo, por exemplo, aritmtica l dois registradores e escreve o resultado em terceiro registrador. Nosso banco de registradores ser capaz de ler dois registradores ao mesmo tempo e escrever em um terceiro (que pode inclusive ser um dos que acabou de ser lido). A Figura 4.2 mostra o projeto de um banco de registradores. O sinal de controle W/R anlogo ao presente na memria. Ele vai controlar leitura e escrita no banco. As duas especificaes de registradores a serem lidos so

Captulo 4: O processador

99

feitas utilizando-se de 5 bits. Ora, com esta quantidade de bits possvel enderear qualquer registrador em um banco de 32 registradores. Os dados que esto armazenados nos respectivos registradores sero disponibilizados em duas vias de 32 bits cada. No caso de uma escrita, a informao do dado a ser escrito disponibilizado e o sinal W/R setado, indicando uma escrita.
W/R
1

Reg. Leit. 1 Reg. Leit. 2 Reg, Escrita

5 5 5

32

Banco Registrador

32

Dado 1 Dado 2

32

Dado para Escrita Figura 4.2: Representao de um banco de registradores

O terceiro e ltimo componente da via de dados a unidade lgica e aritmtica. Este , certamente, o componente onde as operaes ocorrem. Ele controlado por uma srie de sinais que indicam qual operao deve ser realizada em um determinado instante. Soma, subtrao, and, or, slt etc. Todas as operaes so realizadas com operandos de 32 bits. Apenas dois operandos so utilizados por vez. O resultado da operao tambm dado em 32 bits. Existe ainda um bit de sada, informando se o resultado da operao realizada zero. Este sinal chamado de resultadozero. A Figura 4.3 mostra uma ALU tpica para um conjunto de instrues bem restrito (mais ainda do que aquele que apresentamos nos captulos anteriores). Existem 3 sinais de controle (op) para informar qual a operao a ser realizada. Dado 1 e Dado 2 sero os operandos e o resultado ficar em resultado. ResultadoZero valer 12 se o resultado da operao, seja ela qual for, valer 02.

100

Arquitetura de Computadores: a viso do software

ALUop
3 32

Dado 1
32

ResultadoZero Resultado

32

Dado 2

Figura 4.3: Representao de uma ALU

Existem ainda dois componentes muito importantes, mas que servem como interligao entre estas partes principais. O extensor de sinal um destes componentes. Como j dissemos, a ALU opera sempre com dados de 32 bits, mas as instrues do tipo I portam em sua codificao, dados de 16 bits. preciso convert-los para 32 bits para que possam ser operados pela ALU. Agora, a ttulo de recordao, vamos ver como um nmero negativo representado em diversas quantidades de bits. Por exemplo, o nmero -2 em 16 bits vale 11111111111111102. J em 32 bits este valor representado como, 111111111111111111111111111111102. Transformar um dado de 16 bits em 32 bits simplesmente replicar o seu bit de sinal para as 16 casas binrias que restam nos 32 bits. Isto tambm funciona perfeitamente com nmeros positivos. A Figura 4.4 mostra um extensor de sinal de 16 bits para 32 bits. Finalmente temos o multiplexador, MUX. Este circuito funciona como um seletor de canais, controlado eletronicamente. Um MUX com 4 canais implica em um seletor de 2 bits. Um MUX com 8 canais, em um seletor de 3 bits. A Figura 4.5 mostra a operao de um MUX com 4 canais. Observe que os canais no necessariamente possuem apenas um bit. A propsito, na figura so mostrados canais de 32 bits.
16

Extensor de sinal

32

Figura 4.4: Extensor de sinal (16 bits para 32 bits)

Captulo 4: O processador

101

Canal 0 1 2 3
2 2

Canal 0 1 2 3
2

Canal 0 1 2 3
2

Canal 0 1 2 3

002 seleo

MUX
32

012 seleo

MUX
32

102 seleo

MUX
32

112 seleo

MUX
32

sada

sada

sada

sada

Figura 4.5: Operao de um MUX

4.3 Interligao dos componentes da via de dados


Agora que j conhecemos os componentes que compem a via de dados e os seus funcionamentos, vamos interlig-los de tal forma que possamos realizar as instrues do MIPS. Por simplicidade, vamos trabalhar com um pequeno subconjunto de instrues. Vamos comear pela implementao da via de dados para realizar a instruo add $8, $9, $10. Bem, preciso fazer duas leituras no banco de registradores, realizar a soma na ALU e escrever o resultado de volta no banco de registradores. A Figura 4.6 mostra a interligao dos componentes para formar a via de dados. A instruo a ser executada est em um registrador especial chamado IR. A partir dele os campos dos registradores so extrados.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

function

W/R
1 5 32 9

ALUop
3

sa

Dado 1 Dado 2

5 5

rd

Banco 10 Registrador
8

ResultadoZero Resultado

32

32

rt

32

Opcode

Dado para Escrita IR Figura 4.6: Via de dados para instruo add

rs

102

Arquitetura de Computadores: a viso do software

Os registradores especificados em rs e rt so lidos do banco de registradores. O dados vo direto para as entradas da ALU, onde a operao de soma selecionada e o resultado disponibilizado para escrita de volta no banco de registradores. Esta escrita ser realizada no registrador especificado no campo rd da instruo. Os sinais de controle sero estudados oportunamente. Agora vamos ver como seria a via de dados para execuo da instruo lw $8, 16($4). Nesta instruo, so utilizadas: a memria, para leitura do dado; o banco de registradores para ler $4 e escrever o dado retirado da memria em $8; e o extensor de sinais para converter o campo imediato da instruo em um valor de 32 bits. Este valor ser somado na ALU com o contedo do registrador $4 para formar o endereo do dado a ser lido. A Figura 4.7 mostra esta nova via de dados.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

W/R
1
immediate

ALUop
3 32

W/R
1

5 4 5 5

Dado 1

ResultadoZero
1 32

Banco Registrador
8

32

32

Endereo

Memria

rt

16
rs

Extensor de sinal Dado para Escrita

32

Opcode

IR

Entrada/Sada Informao

Figura 4.7: Via de dados para instruo lw

Agora vamos ver uma parte da via de dados que comum a todas as instrues: o clculo de PC e a busca de instrues na memria. Em verdade, o PC sempre somado a 4, salvo em caso de instrues de salto. Vamos considerar inicialmente que no existem saltos e verificar como ficaria o circuito para calcular o PC. Ora, j sabemos que a ALU capaz de realizar somas, subtraes, operaes lgicas etc. Uma ALU mais simples, que realiza apenas somas com o valor 4, ento utilizada para clculo do PC. O valor do PC incrementado e a instruo seguinte lida na memria. A Figura 4.8 mostra esta parte do circuito.

Captulo 4: O processador
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

103 PC W/R
1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Memria
32

32

+
4

IR

Figura 4.8: Clculo do PC e busca de instrues na via de dados

Finalmente vamos verificar como ficaria a via de dados para podermos realizar uma instruo beq $8, $9, alvo. Sabemos que esta instruo compara $8 com $9 e se eles forem iguais salta para o endereo representado por alvo. O clculo do endereo envolve somar o valor de PC com o valor do campo imediato da instruo (multiplicado por 4) para encontrarmos o novo valor de PC. Entretanto, este valor calculado de PC s ser gravado no mesmo se a condio para o salto acontecer. Ento uma parte da via de dados precisa se certificar que $8 e $9 so iguais. Bem, para saber se dois nmeros so iguais basta subtrair o primeiro do segundo. Se o resultado for 0, significa que os dois nmeros so idnticos, caso contrrio eles diferem. Uma boa opo seria utilizarmos a ALU principal para fazer esta operao e mais uma vez utilizarmos uma outra ALU menor, que realiza apenas somas, para clculo do alvo do desvio. A Figura 4.9 mostra como ficaria a via de dados para dar suporte a esta instruo. Veja que o valor de PC pode ser tanto PC+4 como o endereo alvo calculado usando o campo immediate da instruo e o prprio PC. Para selecionar uma das duas possibilidades usamos um MUX. O sinal de seleo do MUX vem exatamente da ALU principal. Se a comparao (subtrao) resultar em um valor 1, ou seja, se os operandos forem idnticos, ento selecionado como novo valor de PC o endereo do alvo. Caso contrrio, o PC simplesmente incrementado de 4. Ainda, o clculo do endereo envolve uma multiplicao por 4 que implementada com um deslocador de 2 posies.

104

Arquitetura de Computadores: a viso do software

PC
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

W/R
1

32

Memria

32 4 M U X

Opcode

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

W/R
1
immediate

ALUop
3 32

5 8 5 5

Banco Registrador
9

32

rt

16
rs

Extensor de sinal <<2


32

Endereo alvo

IR

Figura 4.9: Via de dados para instruo beq

At o presente projetamos vias de dados particulares para cada instruo. Observe, entretanto, que algumas ligaes entre as partes so comuns a mais de uma instruo. Para evitar desperdiar recursos de hardware vamos tentar reaproveitar os componentes e suas interligaes. Vamos por exemplo projetar uma via de dados que execute tanto a instruo add como a instruo lw. Observando as figuras 4.6 e 4.7 vamos perceber que a primeira diferena entre as duas refere-se segunda entrada da ALU (doravante usaremos apenas ALU para designar ALU principal). Ela pode vir do Extensor de sinal ou do banco de registradores. Outra escolha que precisa ser feita quanto ao dado a ser escrito no banco de registradores. Ou ele vem da memria, ou ele vem da ALU. Finalmente a terceira diferena refere-se a qual campo da instruo especifica o registrador onde, o resultado da soma ou a carga do dado, ser escrito. Para fazer estas escolhas podemos utilizar MUXs controlados por sinais de seleo vindos da unidade de controle. A Figura 4.10 mostra como feita a fuso das duas vias de dados em apenas uma.

Resultadozero

Captulo 4: O processador
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

105 W/R
1

function

ALUop
3 32

5
sa

Dado 1 Dado 2

5 5

rd

Banco Registrador

ResultadoZero Resultado

32

32

rt

32

Opcode

Dado para Escrita IR W/R


1

rs

ALUop
3 32

W/R
1

immediate

5 5 5

Dado 1

ResultadoZero
1 32

Banco Registrador

32

32
rt

Endereo

Memria

16
rs

Extensor de sinal Dado para Escrita

32

Opcode

IR

Entrada/Sada Informao ALUop


3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

function

W/R REGsrc
1 1 32

W/R
1

sa

Dado 1 Dado 2 ALUsrc


1 M U X 32

ResultadoZero
1 32

M U X

rt

rd

Banco Registrador

32

Memria

16
rs

Extensor de sinal Dado para Escrita

REGdata
1 M U X 32

Opcode

IR

Entrada/Sada Informao

Figura 4.10: Via de dados para instrues add e lw

106

Arquitetura de Computadores: a viso do software

Agora, quando a instruo a ser executada for uma soma os sinais de controle devem refletir esta escolha, ou seja, REGdst = 02, REGdata = 02 e ALUsrc = 02. Ao contrrio, quando a instruo for uma lw, os sinais de controle devem ser: REGdst = 12, REGdata = 12 e ALUsrc = 12. A fuso desta nova via de dados com aquela projetada para instruo beq tambm muito simples. Nenhum novo MUX acrescentado, somente o clculo de PC e a carga da instruo. A Figura 4.11 ilustra a nova via de dados. Perceba que a memria foi dividida em memria de instrues e memria de dados. Esta diviso lgica implementada na prtica atravs do uso de duas caches. Estudaremos a hierarquia de memrias mais tarde. Um outro componente acrescentado na via de dados foi a porta AND. Ora, imagine que esta via de dados est realizando uma soma de dois valores iguais a zero. O resultado seria zero e a ALU setaria a sada ResultadoZero. Isto faria com que o PC fosse carregado com um valor qualquer. Esta sada da ALU s tem significado quando a instruo a ser executada for uma beq, por isto a porta AND e o sinal de controle BEQ? foram acrescentados. Agora que j conhecemos a metodologia para acrescentar funcionalidades via de dados, resta-nos pensar em como implementar as demais instrues que estudamos. O caminho sempre montar uma via de dados para a instruo em particular e depois anex-la com as demais.

ResultadoZero

PC
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

BEQ?
function

W/R
1

32

Memria Instrues

32 4 M U X

Opcode

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

W/R REGdst
1 1 32

ALUop
3

W/R
1

sa

Dado 1 Dado 2
1

M U X

rd

Banco Registrador

32

ALUsrc
1 M U X

32

Memria Dados

rt

16
rs

Extensor de sinal

REGdata
1 M U X 32

32

IR

<<2

Figura 4.11: Via de dados para instrues add, lw e beq

Captulo 4: O processador

107

4.4 Unidade de controle


A Unidade de Controle responsvel por gerar os sinais de deciso para a via de dados, a fim de promover a correta execuo das instrues. Alm dos sinais de controle dos MUXs, ainda existem outros sinais de controle nas unidades que compem a via de dados. O sinal de escrita nas memrias e no banco de registradores e o sinal BEQ?. Para decidir quais sinais de controle devem ser setados e quais devem ser ressetados preciso conhecer a instruo que se pretende executar. Para isto a unidade de controle l o campo opcode e o campo function e a partir deles gera os sinais adequados. Vamos exemplificar como seria construda a unidade de controle para as trs instrues utilizadas acima na construo da via de dados. Por razes de simplicidade vamos considerar que as memrias e o banco de registradores esto sempre lendo e no momento em que precisam escrever um dado que o sinal de escrita deve ser setado. Vamos tambm considerar que para a ALU realizar uma soma, os dados a serem inseridos em ALUop valem 0102 e para que seja realizada uma subtrao ALUop deve conter 1102. A forma mais simples de construir esta unidade de controle gerar uma tabela verdade com todas as entradas e sadas. A unidade de controle seria modelada como um circuito combinacional simples. Na prtica, as unidades de controle so microprogramadas ou hardwired. Para nossa abordagem poderamos esquecer os detalhes de implementao e devotar o nosso tempo escolha dos sinais de controle adequados para cada instruo. A Tabela 4.1 mostra a tabela verdade implementada na unidade de controle para as nossas instrues. Os sinais de controle so ento setados de acordo com a necessidade de cada instruo. W/R REG, por exemplo, vale 12 quando a instruo precisar escrever no banco de registradores. W/R MD vale 12 se for necessrio escrever na memria de dados (caso da instruo sw, no exemplificada at o presente). Observe que o sinal W/R MI deve ser sempre 02, pois no h sentido, para um usurio, escrever na memria de instrues.
Entradas
instruo opcode function

Sadas
W/R MI 0 0 0 REGdst 0 1 0 W/R REG 1 1 0 ALUsrc 0 1 0 BEQ? 0 0 1 REGdata 0 1 0 ALUop 010 010 110 W/R MD 0 0 0

add 000000 100000 lw 100011 XXXXXX beq 000100 XXXXXX

Tabela 4.1: tabela verdade da unidade de controle

108

Arquitetura de Computadores: a viso do software

ResultadoZero

W/R REG

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Memria Instrues

Opcode

M U X

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

REGdst

ALUop

W/R MI

function

sa

16
rs

Extensor de sinal

32

IR

<<2

Figura 4.12: Via de dados com Unidade de Controle para instrues add, lw e beq

A Figura 4.12 mostra como a unidade de controle se acopla ao hardware da via de dados. medida que novas instrues vo sendo implementadas novos MUXs vo surgindo e a complexidade aumentando. Isto significa que a unidade de controle, que realiza a decodificao (interpretao da instruo), vai ficando mais e mais difcil de ser implementada com lgica combinacional. Esta nossa implementao, embora funcional, carece de uma importante varivel: o tempo. Neste modelo todas as instrues gastam o mesmo tempo para serem executadas. Esta implementao chamada monociclo. O ciclo a que se refere o nome o ciclo de clock. O clock uma onda quadrada que atua como uma espcie de maestro das tarefas de um processador. Ele dita em quanto tempo uma tarefa executada. A freqncia do clock o inverso do ciclo de clock. Isto significa que quanto mais alta a freqncia, mais instrues o processador ser capaz de realizar em um determinado intervalo de tempo.

REGdata

M U X

rd

Banco Registrador

ALUsrc

M U X

rt

M U X

W/R MD Memria Dados

PC

BEQ?

Unidade de Controle

Captulo 4: O processador

109

A busca da tecnologia por freqncias mais altas esbarra em um efeito colateral muito indesejado: a dissipao de potncia em forma de calor. Hoje um processador opera com um ventilador (cooler) acoplado a ele para permitir que ele opere em freqncias mais altas.

4.5 Via de dados mono e multi-ciclos


parte destas implicaes vamos ver como a nossa via de dados sofre a influncia desta nova varivel. Nossa implementao no se importou com os atrasos em cada componente do circuito, mas de fato, eles existem. Por exemplo, a leitura nas memrias pode custar 6ns, enquanto o acesso ao banco de registradores custa 2ns. A ALU realiza uma operao em 4 ns. O tempo de leitura e escrita nos registradores PC e IR so desprezveis e tambm o tempo para as somas nas ALUs auxiliares. Para estes nmeros, por exemplo, o clico de clock seria: 6ns (acesso a MI) + 2ns (Leitura REG) + 4ns (ALU) + 6ns (acesso a MD) + 2ns (escrita no REG) = 20ns. Ou seja, mesmo que uma instruo no utilize todos os componentes da via de dados, preciso garantir que o ciclo de clock acomode a execuo de qualquer instruo. Nesta situao, o pior caso quem dita a regra. A freqncia de operao desta mquina no poderia ser maior que 50 MHz, um valor longe de nossa realidade atual (de cerca de 3GHz). Uma possibilidade para melhorar estas perdas seria utilizar uma abordagem multiciclos. Neste caso o ciclo de clock seria a menor unidade de tempo necessria para realizar uma tarefa em qualquer dos componentes da via de dados, ou seja, poderamos, no exemplo acima, especificar o ciclo de clock como sendo 2ns. Seriam necessrios ento 3 ciclos de clock para acesso memria e 2 ciclos de clock para operao da ALU. As operaes de leitura e escrita no banco de registradores consumiria apenas 1 ciclo de clock cada. Agora, instrues que no utilizam todos os componentes da via de dados poderiam terminar sua execuo mais rapidamente (em menos ciclos). Infelizmente existem alguns requisitos para que esta idia possa se tornar realidade. Precisamos dividir as tarefas do processador para executar uma instruo em etapas. A primeira seria buscar a instruo na memria (Instruction Fetch). A segunda seria decodificar esta instruo e ler os registradores adequados (Instruction Decode). Depois seria feito o envio dos dados para a ALU (instruction issue) e sua seqente execuo (Instruction Execution). Em alguns casos seria necessrio ler ou escrever um dado na memria (Memory Access) e finalmente seria necessrio escrever o dado lido no banco de registradores (Write-Back). Estas cinco etapas precisariam ser blindadas em hardware para que o clock pudesse comandar as atividades de

110

Arquitetura de Computadores: a viso do software

cada uma delas. Esta blindagem feita utilizando-se de registradores entre estgios de execuo. Deste ponto em diante j no vamos mais tecer detalhes sobre a implementao, bastando ao leitor o entendimento dos conceitos e das implicaes em adot-los. Naturalmente sintam-se encorajados a saber mais em uma literatura mais volvida para organizao de computadores. Vamos analisar as vantagens, em termos de tempo, de uma implementao multi-ciclo sobre uma mono-ciclo. Considerando uma seqncia de instrues, add, lw e beq e sabendo que na abordagem monociclo cada instruo executada em 20 ns, precisaramos de 60ns para que esta seqncia fosse terminada. Numa abordagem multi-ciclo a instruo add utiliza 7 ciclos de 2ns cada, ou seja, ela consome 14ns. lw precisa passar por todas as etapas e portanto utiliza os mesmos 20ns como no original. beq utiliza 6 ciclos de 2ns, ou seja 12ns. A execuo das 3 em um sistema multiciclos demanda apenas 46 ns. A Figura 4.13 mostra a execuo das instrues nas duas abordagens. Veja que a execuo da instruo add passa pela memria de instrues, banco de registradores, ALU e banco de registradores. lw utiliza memria, banco de registradores, ALU, memria e banco de registradores. beq utiliza memria, banco de registradores e ALU.

Mono-ciclo add lw beq

add

lw

beq

Multi-ciclo tempo

20ns

40ns

60ns

Figura 4.13: Execuo de instrues em implementaes mono e multi-ciclos

Poderia existir ento algum mtodo mais rpido para executar instrues que a implementao multi-ciclos? A resposta sim, fazendo

Captulo 4: O processador

111

reutilizao dos componentes presentes em cada parte da execuo da instruo.

4.6 Pipeline
A idia por trs do pipeline uma linha de montagem de automveis. Enquanto o uma equipe est trabalhando na pintura, outra est trabalhando no sistema eltrico e outra no motor. Quando as trs equipes terminam sua tarefa, o primeiro carro est totalmente montado, o segundo, que estava na parte eltrica, vai para a parte de pintura, e o terceiro, que estava no motor vai para parte eltrica. Assim, podemos manter ocupadas todas as partes de um processador sem precisar esperar que a instruo fique pronta. A diviso do trabalho feita de forma semelhante ao mostrado anteriormente: um estgio de busca (F, fetch), um de decodificao (D, decode), um de execuo (E, execution,), um de memria (M, memory) e o ultimo de escrita (W, write). Nesta abordagem, a equipe (o estgio do pipeline) mais lenta quem dita a regra. Seguindo a mesma temporizao dos exemplos anteriores poderamos definir um ciclo de clock de 6ns, pois a leitura da memria a parte mais demorada do processo e gasta exatamente 6ns. Durante o primeiro ciclo de clock a instruo add buscada na memria. No segundo ciclo de clock, a instruo add vai para o estgio de decodificao e a instruo lw buscada na memria. No terceiro ciclo de clock, add vai para execuo, lw vai para decodificao e beq buscada na memria. E assim, sucessivamente. A Figura 4.14 mostra a execuo das instrues.

Fadd

Dadd

Eadd

Madd

Wadd

Flw

Dlw

Elw

Mlw

Wlw

Fbeq

Dbeq

Ebeq

Mbeq

Wbeq

tempo 54ns 60ns

18ns

36ns

Figura 4.14: Execuo de instrues em pipeline

112

Arquitetura de Computadores: a viso do software

Agora a execuo foi concluda com 42ns. Melhor que a implementao multi-ciclo. Esta vantagem se amplia muito se considerarmos que outras instrues vo entrando no pipeline e a tendncia que tenhamos uma instruo terminada a cada 6ns, uma taxa prxima de 1 instruo por ciclo de clock (IPC, Intruction Per Cicle). Apesar destes avanos, vamos perceber na viso do software que o pipeline sofre um mal que exige muita ateno: a dependncia de dados..

4.7 A viso do software O pipeline


O pipeline parece ser uma grande vantagem em termos de desempenho para os processadores. Entretanto existem algumas dificuldades que tornam a aplicao do pipeline um pouco menos eficiente que o limite terico. Vamos ver um exemplo bastante simples. Depois de executar algumas instrues o pipeline mostrado na Figura 4.15 pretende ao mesmo tempo escrever no banco de registradores para instruo add e ler o banco de registradores para instruo sub. Ora, isto gera um conflito de recursos. O meu banco de registradores capaz de ler duas instrues por vez, mas no est projetado para ler e escrever ao mesmo tempo. Um conflito de recursos definido como sendo a tentativa de utilizao de um mesmo componente por mais de uma instruo ao mesmo tempo. Neste caso especfico, como a leitura no banco de registradores ocorre em 2ns e o ciclo de clock de 6ns, conforme o exemplo que ns estamos trabalhando desde o incio de nossa abordagem, possvel fazer uma escrita e uma leitura dos dados dentro do mesmo perodo do clock. Ento, utilizada a primeira metade do ciclo de clock para escrita no banco de registradores e a segunda metade para fazer as leituras. Poderia ser ao contrrio, mas assim mais eficiente. Um segundo problema a ser enfrentado neste pipeline a dependncia de dados. Observe que o simples trecho de cdigo abaixo gera um enorme problema para o pipeline. add $8, $9, $10 sub $11, $12, $8 Aqui a instruo sub utiliza o resultado da instruo add como um de seus operandos. Ora, pensando em pipeline, o resultado de add s vai estar pronto no quinto ciclo de clock, mas sub precisa dele j no terceiro ciclo de

A viso do software

Captulo 4: O processador

113

clock. Este tipo de conflito ns chamamos de conflito de dados. Ele est ilustrado na Figura 4.16.

Fadd

Dadd

Eadd

Madd

Wadd

Flw

Dlw

Elw

Mlw

Wlw

Fbeq

Dbeq

Ebeq

Mbeq

Wbeq

Fsub

Dsub

Esub

Msub

Wsub

Figura 4.15: Dependncia Estrutural no pipeline

Fadd

Dadd

Eadd

Madd

Wadd

Fsub

Dsub

Esub

Msub

Wsub

Figura 4.16: Dependncia de dados no pipeline

Por fim, existe ainda um tipo de conflito muito comum: conflito de controle. Imagine a execuo de uma instruo de salto. Como o processador s vai saber se a condio de salto foi atingida ou no no estgio de execuo, duas instrues que seguem no pipeline nos primeiros estgios podem correr o risco de serem descartadas. Se o salto for tomado, certamente haver penalidades por isto. A Figura 4.17 mostra um beq que se fosse tomado deveria executar a prxima instruo sw e se no o fosse seguiria com lw. Como o teste s foi realizado no final do estgio de

A viso do software

114

Arquitetura de Computadores: a viso do software

execuo, as duas instrues que vinham aps foram descartadas e a instruo correta passou a ser buscada.

Fbeq

Dbeq

Ebeq

Mbeq

Wbeq

Flw

Dlw Fsub

Fsw

Dsw

Figura 4.16: Dependncia de controle no pipeline

A viso do software

Apesar destas dificuldades existem tcnicas que buscam resolver o problema e praticamente o eliminam. As tcnicas de forwarding e de delay slot so muito eficazes para solucionar conflitos. Uma outra tcnica para melhorar o desempenho usar um circuito preditor de desvio. Este circuito memoriza se um salto foi tomado ou no e caso ele tenha sido tomado freqentemente, a instruo que ser retirada da memria aps a instruo do salto ser que se encontra em seu endereo alvo e no a sua subseqente. Conhecer os conflitos gerados nos pipelines podem nos ajudar a programar melhor em HLL. A primeira dica tentar evitar o uso de instrues que dependam imediatamente do resultado da anterior. A segunda, construir estruturas de controle como laos de tal forma que eles sejam o mximo possvel uniforme, ou seja, que sempre tome um caminho, variando muito pouco o seu comportamento. Construir estruturas de deciso que ficam alternando os caminhos de processamento das instrues perder desempenho.

Captulo 4: O processador

115

4.8 Concluses
Estudamos neste captulo a construo de um processador simples capaz de executar as instrues em cdigo de mquina vistas no captulo anterior. Vimos tambm que existem algumas maneiras de interligar os componentes de um processador de tal forma que obtenhamos o melhor desempenho possvel. A propsito, as mtricas de desempenho sero abordadas em nosso prximo captulo.

4.9 Prtica com Simuladores


O EWB uma ferramenta interessante para construo de circuitos. A prtica com este simulador leva o leitor a conhecer bem o material do curso. Ns propomos aqui dois projetos. A construo de uma ALU com portas lgicas e igualmente a construo de um banco de registradores. Depois tente interconect-los.

4.10 Exerccios
4.1 Pesquise na web e produza um resumo sobre unidade de controle microprogramada. 4.2 Pesquise na web e produza um resumo sobre unidade de controle hardwired. 4.3 Pesquise na web e produza um resumo sobre forwarding em pipelines. 4.4 Pesquise na web e produza um resumo sobre delay slots em pipelines. 4.5 Crie um via de dados para executar a instruo sw. 4.6 Anexe a via de dados criada no exerccio 2.5 na via de dados mais completa apresentada neste captulo. 4.7 Crie um via de dados para executar a instruo j. 4.8 Anexe a via de dados criada no exerccio 2.7 na via de dados mais completa apresentada neste captulo. 4.9 Crie um via de dados para executar a instruo jal. 4.10 Anexe a via de dados criada no exerccio 2.9 na via de dados mais completa apresentada neste captulo. 4.11 Crie um via de dados para executar a instruo addi. 4.12 Anexe a via de dados criada no exerccio 2.11 na via de dados mais completa apresentada neste captulo.

116

Arquitetura de Computadores: a viso do software

Você também pode gostar