Você está na página 1de 46

Captulo 1

Organizao de Computadores

1.1. Organizao de um Computador


As partes componentes de um computador podem ser divididas de acordo com os blocos mostrados na fig. 1. A parte operativa (datapath) responsvel pela execuo de funes lgicas e aritmticas tais como soma, subtrao, deslocamentos, funes E e OU bita-bit. A parte de controle comanda a parte operativa, a memria e os dispositivos de entrada e sada informando as aes que eles devem tomar e quando estas aes devem ser tomadas para executar a seqncia de instrues especificada por um programa. A memria armazena programas e dados necessrios para a operao do computador. Os dispositivos de entrada capturam informao do meio externo e os dispositivos de sada fornecem informao para o meio externo. Nos computadores modernos a memria pode ser dividida em Dynamic Random Access Memory (DRAM) e Memria Cache. A DRAM possui um baixo custo por bit armazenado, mas possui um tempo de acesso relativamente elevado. A memria cache normalmente construda com memrias SRAM (Static Random Access Memories) que possuem um custo maior por bit armazenado, mas que so bem mais rpidas. Em conseqncia, memrias caches so usualmente de pequena capacidade de armazenamento e servem como um "amortecedor" entre a memria principal (DRAM) e o processador. Todos os componentes de um computador podem ser descritos de forma hierrquica em vrios nveis de abstrao. Esta estratificao importante para permitir que o projetista trabalhando em um nvel ignore detalhes de descrio de camadas inferiores. Assim, um projetista de computadores trabalhando a nvel de sistemas s precisa saber o tamanho da memria (espao de endereamento), a sua forma de organizao e o seu tempo de acesso. 1

Ele no precisa saber qual a tecnologia de semicondutores ou quantos transistores (tamanho fsico) foram utilizados para fabricar aquela memria.

Sistema Operacional

I nt er f ace

Processador

Parte Controle M em r i a

Ent r ada

Parte Operativa

Sada

Fig. 1.1. Principais Blocos de um Computador.

Fig. 1.2. Fotografia de uma estao de trabalho (workstation). A tela do tubo de raios catdicos (CRT) o dispositivo de sada usual, enquanto que o teclado e o "mouse" so os dispositivos de entrada principais.

Fig. 1.3. Fotografia do interior de um "mouse".

Fig. 1.4. Tela de um tubo de raios catdicos (Cathode Ray Tube - CRT). Um feixe de eltrons acelerado atravs do vcuo contra uma tela revestida com fsforo. O feixe de eltrons guiado em direo tela atravs de uma bobina colocada na parte traseira do CRT. Este tipo de sistema, que o mesmo usado em televiso e computadores, pinta atravs de uma srie de pontos (pixels) uma linha de cada vez na tela. A tela reanimada (refresh) de 30 60 vezes por segundo.

Fig. 1.5. Cada coordenada no "buffer de quadro" na esquerda, determina o nvel de cinza da coordenada correspondente para a tela do CRT, na direita. O pixel(X0, Y0) contem o padro de bit 0011, o qual um nvel de cinza mais claro que o determinado pelo padro de bit 1101 no pixel(X1, Y1).

A fig. 1.6 mostra as tecnologias mais utilizadas ao longo dos tempos, com uma estimativa da performance relativa por custo unitrio para cada uma destas tecnologias. Desde 1975, a tecnologia de circuitos integrados (CIs) define o que e com que rapidez os computadores so capazes de fazer. Assim, profissionais na rea de computao devem se familiarizar com os conceitos bsicos envolvendo circuitos integrados. Um transistor simplesmente uma chave on/off controlada por eletricidade. Um CI, pode conter algumas centenas ou at mesmo alguns milhes de transistores. A taxa de aumento da integrao tem sido irremarcavelmente estvel ao longo dos ltimos anos. A fig. 1.7 mostra o aumento da capacidade de memrias DRAM entre 1976 e 1992. A indstria de semicondutores tem quadruplicado a capacidade destes CIs a cada trs anos. Esta incrvel taxa de evoluo na relao custo/performance e na capacidade das memrias tem governado o projeto de hardware e software de computadores e por isto, tornado obrigatrio o conhecimento das tecnologias de CIs. A fabricao de um chip comea com silcio (Si), uma substncia encontrada na areia. O Si chamado de semicondutor porque ele no conduz muito bem a eletricidade. Atravs de processos qumicos, possvel se adicionar materiais ao Si, permitindo a sua transformao em:
i) excelente condutor de eletricidade (similar ao cobre e ao alumnio), ou ii) excelente isolante (como plstico ou vidro), ou iii) reas que conduzem ou isolam, de acordo com algumas condies especiais (como transistores, diodos, etc...).

O processo de manufatura de CIs comea com um lingote (de 5 8 polegadas de dimetro e 12 de comprimento) de cristal de silcio, o qual cortado em fatias (wafers) de cerca de 0,1 polegada de espessura. Os wafers passam ento por uma srie de etapas, durante as quais cria-se no Si vrios elementos como transistores, diodos, capacitores, resistores, etc... Dado que um wafer custa aproximadamente o mesmo preo no importando o que est 3

construdo em cima, poucos CIs implicam em altos custos porque grandes pastilhas de CIs so mais propcias a conter defeitos e assim ter de ser rejeitadas, o que reduz o rendimento do processo (process yield). Assim, projetistas de CIs tem que conhecer bem a tecnologia que est sendo utilizada para ter certeza de que o aumento no custo para produzir CIs maiores se justifica por uma melhoria na performance destes CIs.

(a)

(b)

(c) Fig. 1.6. (a) Performance relativa por custo unitrio para as tecnologias mais usadas em computadores ao longo dos tempos. (b) Geraes de computadores so normalmente determinadas pela mudana de tecnologia dominante. Tipicamente, cada gerao oferece a oportunidade para desenvolver uma nova classe de computadores e de criar novas empresas. Muitos pesquisadores acreditam que o processamento paralelo para aplicaes de alta performance (high-end computers) e computadores portteis para aplicaes menos crticas (low-end computers) sero a base para uma quinta gerao de computadores. (c) Caractersticas de computadores comerciais desde 1950, em dlares da poca, e em dlares corrigidos pela inflao para 1991.

O custo de um CI pode ser expresso em trs simples equaes: custo da pastilha = custo do wafer . pastilhas por wafer x rendimento rea do wafer rea da pastilha . [i]

pastilhas por wafer =

[ii]

rendimento =

1 . 2 (1 + defeitos por rea x rea da pastilha) 2

[iii]

A primeira equao obtida diretamente. A segunda uma aproximao, dado que ela no subtrai a rea prxima borda do wafer que no pode acomodar pastilhas retangulares. A equao [iii] baseada em anos de observaes empricas dos rendimentos de processos em fbricas de CIs, onde o expoente indica o nmero de etapas crticas no processo de manufatura.

Fig. 1.7. Aumento da capacidade de chips DRAM. O eixo y medido em Kbits (onde K = 1024 bits ou 210). A indstria de semicondutores tem quadruplicado a capacidade das memrias a cada trs anos, ou 60% a cada ano, por mais de 15 anos.

Fig. 1.8. Vista geral da placa do processador de uma estao de trabalho. Esta placa utiliza o MIPS R4000, o qual est localizado no lado direito, ao centro da placa. O R4000 contem memrias cache de alta velocidade implemententadas dentro da sua prpria pastilha. A memria principal est contida nas placas menores, instaladas perpendicularmente placa-me, no canto esquero superior. Os chips de memria DRAM esto montados nestas placas perpendiculares (chamadas SIMMs: Single In-line Memory Module) e em seguida ligados aos conectores. Os connectores na parte inferior da placa so para dispositivos de I/O externos, tais como rede (Ethernet), teclado, e vdeo.

Fig. 1.9. Fotografia do microprocessador MIPS R3000 encapsulado.

Fig. 1.10. Fotografia de trs verses diferentes do microprocessador R4000, mostrado na forma de pastilha, esquerda no alto. Para reduzir o custo do chip, um encapsulamento menor usado em aplicaes que no necessitam alta qualidade, enquanto que um maior encapsulamento utilizado para aplicaes que necessitam alta performance: servidores e estaes de trabalho. O encapsulamento grande possui pouco mais de 400 pinos, enquanto que o menor, cerca de 150 pinos. Os pinos permite um caminho de acesso mais largo entre o processador e a memria principal, e assim, permitindo transferncias de dados mais rpidas e endereamento de memrias maiores.

1.2. Clocks e Lgica Seqencial


Clocks so necessrios para decidir quando um elemento que armazena o estado atual de um sistema deve ser atualizado. O sinal de clock possui um perodo (medido em segundos) fixo; a freqncia do clock (medida em Hertz) o inverso do seu perodo. A fig. 1.11. mostra um sinal de clock identificando o seu perodo, sua borda de subida e sua borda de decida. Ns assumimos que todos os sinais de clocks utilizados nos sistemas que estudarmos sero acionados pelas bordas. Isto , todas as mudanas de estado tero incio quando o sinal 6

de clock mudar e valor baixo para valor alto (borda de subida) ou de valor alto para valor baixo (borda de descida).
Borda de Subida Borda de Descid

Perodo do Clock

Fig. 1.11. Sinal de clock.

Um sistema baseado em clock denominado sistema sncrono. Os valores que sero escritos nos elementos de estado (tambm chamados elementos de memria) do sistema tem que estar vlidos quando ocorrer a borda do clock que ativa a escrita. Um sinal considerado vlido quando ele est estvel (seu valor no est mudando) e o valor no vai mudar mais enquanto as entradas da lgica que gera o sinal no mudarem. A fig. 1.12. mostra a relao entre os elementos de estado, a lgica combinacional e o sinal de clock em um sistema sncrono. O perodo do clock tem que ser suficientemente longo para garantir que as sadas da lgica combinacional (entradas do elemento de estado 2) tenham tempo para estabilizar desde a ltima mudana ocorrida no elemento de estado 1. Note que neste tipo de circuito, no h laos de realimentao dos elementos de memorizao das sadas primrias para as entradas do circuito. Assim, o estado seguinte da lgica combinacional depende somente dos valores das suas entradas. Este tipo de circuito denominado circuito combinacional sncrono.
entradas Elemento de Estado 1 Lgica Combinacional Elemento de Estado 2 sadas

Clock

Fig. 1.12. Circuito Combinacional Sncrono.


entradas Elemento de Estado 1 Lgica Combinacional Elemento de Estado 2 sadas

Fig. 1.13. Circuito Seqencial Sncrono.

Os mesmos elementos de estado podem ser utilizados como entrada e sada do circuito de lgica combinacional. Assim, o estado seguinte da lgica combinacional depende dos valores das suas entradas e de 1 ou mais das suas sadas. Uma organizao deste tipo chamada de circuito seqencial sncrono. (Veja fig. 1.13).

1.3. Instrues: a Linguagem da Mquina


Para comandar o hardware de um computador, devemos falar a sua lngua. As palavras de uma linguagem de mquina so chamadas instrues e o seu vocabulrio chamado de conjunto de instrues.

A representao simblica de instrues de um computador chamada de linguagem assembler e a representao numrica destas instrues, no formato que ser executado pela mquina, chamado de linguagem de mquina. A traduo da linguagem assembler para a linguagem de mquina realizada por um programa chamado Assembler. Ver fig. 1.14, onde um programa escrito em C primeiramente traduzido pelo compilador para um programa em linguagem assembler. Em seguida, o Assembler traduz o programa em linguagem assembler para a linguagem de mquina. O programa que coloca o programa em linguagem de mquina dentro da memria para ser executado chamado de carregador (loader). O compilador um programa que realiza a interface HW/SW do computador (fig. 1.15). Ele: i) mapeia variveis definidas pelo programador em linguagem de alto nvel diretamente para os registradores do microprocessador. ii) aloca espaos de memria para estruturas de dados simples e complexas (variveis, arrays, matrizes,...). iii) define endereos iniciais de arrays e matrizes. iv) cria desvios e rtulos no programa compilado em linguagem de mquina antes de armazen-lo na memria principal.

Fig. 1.14. Hierarquia de traduo. Um programa em linguagem de alto nvel primeiramente compilado para um programa em linguagem assembler e em seguida traduzido para um programa em linguagem de mquina. O carregador tem como funo colocar o cdigo de mquina dentro dos respectivos endereos da memria do computador para ser executado.

O compilador associa variveis de um programa aos registradores de um microprocessador. Exemplo 1: Considere o seguinte trecho de programa em linguagem C e o respectivo cdigo assembler para o MC68000: b = 10; c = 20; c = b + c; MOVE.W MOVE.W ADD 8 #10, D0; #20, D1; D0, D1;

O compilador associou a varivel b ao registrador D0 e a varivel c ao registrador D1. Alm de associar variveis registradores, o compilador tambm aloca espao na memria principal para armazenar estruturas de dados como arrays e matrizes. Assim, o compilador define o endereo inicial de estruturas complexas para as instrues de transferncia de dados.

Fig. 1.15. Programa C compilado para linguagem assembler e em seguida compilado para linguagem de mquina. Embora a traduo da linguagem de alto-nvel para a linguagem de mquina seja apresentada em 2 passos, alguns compiladores eliminam a etapa intermediria e produzem a linguagem de mquina diretamente.

Exemplo 2: no segmento do cdigo C abaixo, f, g, h, i, j so variveis. if (i == j) goto L1; f = g + h; f = f - i;

L1:

Assumindo que as 5 variveis esto associadas aos 5 registradores de $16 $20, qual o cdigo assembler para o MIPS? beq $19, $20, L1 add $16, $17, $18 sub $16, $16, $19 # if (i == j) goto L1 (salta para L1 se i = j) # f = g + h (no executado se i = j) # f = f - i (sempre executado)

L1: Exit:

Exemplo 3: compiladores freqentemente criam desvios e rtulos quando eles no aparecem em linguagens de programao. Usando as mesmas variveis e registradores do exemplo anterior, o cdigo C: if (i == j) f = f - i; else f = g + h;

compilado para a linguagem assembler do processador MIPS da seguinte forma: bne $19, $20, Else sub $16, $16, $19 j Exit Else: add $16, $17, $18 Exit: # salta para Else se i j # f = f - i (no executado se i j) # salta para Exit # f = g + h (no executado se i = j)

Linguagens assembler so muito similares, quem sabe programar em assembler de um processador pode rapidamente aprender a programar no assembler de outros processadores. Para quem s conhece linguagens de alto nvel, tais como C e Pascal, importante entender algumas distines fundamentais entre estas linguagens e as linguagens assembler. Saber responder adequadamente as seguintes perguntas importante: Como existe um nmero limitado de registradores em um processador, o nmero de variveis que podem ser definidas em um programa em assembler tambm limitado. Existe tambm um nmero limitado de "nomes" que estas variveis podem receber. Normalmente os nomes das variveis em assembler so os prprios nomes dos registradores. Por exemplo, o microprocessador MC68000 fabricado pela Motorola possui oito registros de dados que so chamados D0, D1, ..., D7. Portanto dados em programas assembler do MC68000 somente podem ser armazenados em uma destas variveis (D0 a D7). Historicamente, nos primeiros microprocessadores implementados, a limitao era o nmero de registradores que podiam ser implementados dentro do chip. No entanto, mesmo depois do desenvolvimento de tecnologias de alta integrao em silcio, o nmero de registradores implementados dentro de um microprocessador permaneceu reduzido. Um grande nmero de registradores implica nos sinais de clock terem que ser transmitidos por longas distncias para ir de um registro a outro, resultando em um aumento do perodo de clock e assim tornando o microprocessador mais lento. Linguagens de programao apresentam variveis simples contendo estruturas de dados simples como nos exemplos 1, 2 e 3, mas tambm podem apresentar estruturas de dados complexas, tais como arrays e matrizes. Estas estruturas de dados complexas podem conter muito mais dados do que o nmero de registradores no microprocessador. Como o microprocessador armazena e acessa tais estruturas complexas? Uma vez que o microprocessador pode acessar somente uma pequena parte dos dados nos registradores, estruturas de dados como arrays e matrizes so armazenados na memria principal. Operaes aritmticas ocorrem somente entre registradores no microprocessador MIPS. Assim o MIPS inclui, alm de instrues aritmticas, instrues de transferncia de dados. Para acessar uma palavra na memria, a instruo de transferncia de dados deve fornecer o seu endereo. A instruo de transferncia de dados chamada load (lw para o MIPS). O formato da instruo de load o nome da operao seguido pelo registrador a ser carregado, o endereo de incio do array e finalmente o registrador que contm o index do elemento do array a ser carregado. Assim, o endereo da memria contendo o elemento do array formado pela soma da parte constante da instruo com o registrador. Exemplo 4: assuma que A um array de 100 elementos cujo espao de memria j foi alocado pelo compilador, e que o compilador associa as variveis g, h, e i aos registradores

10

$17, $18 e $19. Assuma tambm que o compilador associou o endereo Astart como o endereo inicial para o array na memria. Traduza a linha de programa em C: g = h + A[i]; para o cdigo assembler do MIPS.

lw $8, Astart ($19) add $17, $18, $8

# registrador temporrio $8 recebe A[i] #g = h + A[i], onde $17 = g, $18 = h, $8 = A[i]

A instruo load, lw, soma o endereo de incio do array Astart ao index i armazenado no registrador $19 para formar o endereo do elemento A[i]. O processador ento l a memria com o endereo A[i] (Astart ($19)) e coloca-o no registrador $8. A instruo add soma o contedo do registrador $18 (varivel h) ao elemento do array na posio $19 (armazenado em $8). A instruo complementar de load store. Ela transfere dados de um registrador para a memria. O formato de store similar ao do load: o nome da operao, seguido do registrador cujo contedo deve ser armazenado, o endereo de incio do array, e finalmente o registrador que contem o index para a posio do elemento no array a ser armazenado. Exemplo 5: assuma que a varivel L est associada ao registrador $18. Assuma tambm que o registrador $19 contem o valor de index. Qual o cdigo assembler para o MIPS do seguinte comando em C: A[i] = L + A[i]; Cdigo assembler: lw $8, Astart ($19) add $8, $18, $8 sw $8, Astart ($19)

# registrador temporrio $8 recebe A[i] # registrador temporrio $8 recebe L + A[i], onde L = $18 # armazenar L + A[i] de volta em Astart ($19)

Note que foram necessrias 3 operaes para somar 2 elementos, visto que operaes aritmticas s so realizadas entre registradores no MIPS. Assim, se um dos operandos est na memria principal, ele deve ser trazido para um dos registradores do microprocessador antes de ser somado. O nmero mximo de variveis em um programa assembler igual ao nmero de registradores no processador. Como a maioria dos programas escritos em linguagem de alto nvel possuem mais variveis do que o nmero de registradores disponveis nos microprocessadores, o compilador precisa gerenciar o transbordamento de variveis para a memria. Um compilador bem construdo procura manter as variveis utilizadas mais freqentemente nos registradores e coloca as variveis restantes na memria. A otimizao de um compilador consiste em minimizar o nmero de vezes em que uma varivel armazenada na memria acessada, porque o acesso memria muito mais lento do que o acesso a um registrador. Ao mover uma varivel para a memria para abrir espao no conjunto de registradores para uma nova varivel o compilador deve tentar mover a varivel que tem a menor probabilidade de ser utilizada no futuro prximo.

11

1.4. Organizao da Memria


Desde os primrdios da computao, projetistas e programadores sempre desejaram grandes quantidades de memria extremamente rpida. Existem vrias tcnicas que permitem atingir este objetivo. Algumas destas tcnicas sero apresentadas neste polgrafo, a fim de ajudar projetistas e programadores a atingir este objetivo de memria rpida e ilimitada. Definies: i) Localidade Temporal: se um item referenciado, ele tende a ser referenciado novamente em um futuro prximo. ii) Localidade Espacial: se um item referenciado, itens cujos endereos so vizinhos a este tendem a ser referenciados tambm em um futuro prximo. Localidade temporal aparece em programas a partir de estruturas simples e naturais, por exemplo, muitos programas contm loops, de forma que instrues e dados tendem a ser acessados repetidamente, mostrando altos nveis de localidade temporal. Uma vez que instrues so acessadas seqencialmente, programas mostram um alto grau de localidade espacial, por exemplo, acessos a elementos de um array. iii) Palavra: a unidade mais comum de trabalho de um microprocessador. Diferentes microprocessadores podem ter palavras de diferentes tamanhos (1, 2 e 4 bytes so tamanhos tpicos). Ns podemos tirar vantagem do princpio de localidade para implementar uma memria de computador baseada em hierarquia. Uma hierarquia de memria consiste de mltiplos nveis de memria com diferentes velocidades e tamanhos. As memrias mais rpidas so mais caras por bit do que as memrias mais lentas e portanto elas so normalmente menores. A memria principal normalmente implementada a partir de DRAMs (Dynamic Random Access Memories), enquanto que memrias em nveis inferiores, mais prximos do processador (memrias CACHE), so implementadas em SRAMs (Static Random Access Memories). Memrias DRAM so mais baratas por bit que as SRAM, embora as memrias dinmicas sejam sensivelmente mais lentas. A diferena de preo se justifica porque DRAMs utilizam um menor nmero de transistores por bit e assim, estas memrias possuem maior capacidade de armazenar informao para a mesma rea em silcio. A diferena em velocidade se justifica porque as clulas das SRAMs armazenam informao atravs do chaveamento de portas inversoras que esto ligadas entre si (cross-coupled), criando uma ao de realimentao extremamente rpida, menos susceptvel ao rudo e com maior capacidade de drive de corrente das linhas de bit-line, e assim, sendo mais rpidas para se ler e escrever que as pequenas clulas das memrias DRAM. Devido s diferenas de custo e de tempo de acesso, vantagoso construir memrias como em hierarquia de nveis, com a memria mais rpida mais prxima do processador e a mais lenta colocada mais distante do processador (fig. 1.16). Atualmente existem trs tecnologias principais para se construir hierarquias de memrias: SRAM, DRAM e disco 12

magntico. O tempo de acesso e o preo por bit variam largamente entre estas tecnologias, tal como a fig. 1.17 mostra para valores tpicos de 1993.

Fig. 1.16. Estrutura bsica de uma hierarquia de memria. Atravs da implementao de um sistema de memria hierrquico, o usurio tem a iluso de que a memria to grande quanto a memria presente no nvel mais baixo, ao mesmo tempo que ela pode ser acessada na mesma velocidade que a memria no nvel mais alto da hierarquia.

Fig. 1.17. Tempo de acesso e preo por bit para as trs principais tecnologias usadas na concepo de sistemas hierrquicos de memrias.

Fig. 1.18. Hierarquia de memria com dois nveis: inferior (mais lento, porm com maior capacidade de armazenamento de informaes) e superior (mais rpido, porm com pouca capacidade).

1.5. Quatro Princpios para Projeto de Processadores


i) Simplicidade favorece regularidade: Deve-se procurar projetar conjuntos de instrues em que as instrues possuam mesmo tamanho. Os segmentos do programa em C abaixo possuem 10 variveis (a,b,c,d,e,f,g,h,i,j): 13

Segmento 1: a = b + c; d = a - e; Segmento 2: f = (g + h) - (i + j);

Cdigo assembler para o MIPS: add a, b, c sub d, a, e Cdigo assembler para o MIPS: add t0, g, h # varivel temporria t0 contem g + h add t1, i, j # varivel temporria t1 contem i + j sub f, t0, t1 # f armazena t0 - t1

Note que o compilador teve que criar 2 novas variveis (temporrias), t0 e t1, e 2 linhas adicionais de cdigo para traduzir o segmento 2 do programa em C para a linguagem assembler a fim de poder manter a simplicidade e a regularidade do seu conjunto de instrues atravs do formato: [instruo] [registro de destino/origem] [op.1] [op.2]. Ou seja, se a maioria das instrues do computador apresentarem o mesmo formato e se cada linha conter apenas 1 instruo, o hardware que implementa tais funes bem mais simples. ii) Menor mais rpido: Um nmero elevado de registradores resulta em acesso mais lento a estes registradores. Portanto, dentro dos limites de cada tecnologia, um nmero reduzido de registradores resulta em uma arquitetura mais rpida. iii) Bom projeto implica em compromissos: Em todo projeto de engenharia existem objetivos conflitantes, o bom projetista de computadores aquele que consegue obter o melhor compromisso entre estes objetivos. Por exemplo, a incluso de hardware dedicado para a execuo de instrues em ponto flutuante acelera o processamento, porm aumenta a rea em silcio necessria para implement-la e torna o projeto das partes de Controle e Operativa relativamente mais complexo. Outros exemplos:

1. um conjunto maior de instrues em um processador permite que ele trate mais


rapidamente instrues especficas de deferentes aplicaes, porm este conjunto no pode ser muito grande pois a implementao do hardware/software necessrios ficariam muito complexos, comprometendo demasiadamente a velocidade de execuo do processador. 2. multiplexao do nmero de pinos de I/O de um processador: por exemplo, um processador que multiplexa 32 de seus pinos entre dados (32 bits) e endereos (32 bits); ou ento um processador que trabalha com barramento interno de dados de 64 bits e com barramento externo de 32 bits. Note que quanto maior o nmero de pinos, mais caro o encapsulamento do chip, porm maior o paralelismo obtido, resultando em um processamento mais rpido. iv) Fazer o caso comum rpido: Nada adianta fazer com que uma instruo complicada, que raramente executada, seja rpida. O importante que o caso comum que executado freqentemente seja executado com rapidez.

14

1.6. Notas Histricas (Evoluo das Arquiteturas)


Ao longo da histria dos computadores, podem ser identificadas algumas caractersticas que tipificam algumas eras. Os microprocessadores podem ser classificados de acordo com a quantidade de registradores e a funo destes registradores: i) Arquiteturas de Acumulador: a caracterstica dos primeiros microprocessadores era a existncia de um registrador chamado de acumulador. Este registrador acumulava os resultados de todas as operaes aritmticas realizadas no microprocessador. Nestas mquinas as operaes aritmticas eram sempre realizadas entre o valor do acumulador e um valor armazenado em memria. ii) Registradores Dedicados: (HL do 8086) no lugar de um nico registrador com a funo especfica de acumulador, estas mquinas possuem vrios registradores com funes especficas. (Ex: o par de registradores HL do 8086 utilizado como um ndice para enderear a memria). iii) Registros de Uso Geral: a evoluo dos registradores de uso dedicado resultou nas arquiteturas com registradores de uso geral. Nestes microprocessadores todos os registradores so idnticos e podem ser usados sem restrio. As arquiteturas de registradores de uso geral se sub-dividem em: a) Registro-Memria: permitida a realizao de operaes aritmticas em que um dos operandos est na memria e o outro em um registrador. b) Carrega-Armazena: todas as operaes so feitas exclusivamente com operandos que esto em registradores. No possvel combinar um acesso memria com uma operao aritmtica na mesma operao. Apesar desta arquitetura requerer um nmero maior de instrues para realizao de uma mesma tarefa, o ganho em velocidade devido simplicidade da arquitetura compensa o nmero maior de instrues executadas.

15

Captulo 2

Anlise de Desempenho

2.1. Definio de Desempenho


Avio Capacidade (# de passageiros) 101 470 132 146 Alcance (kilometros) 1.008 6.640 6.400 13.952 Velocidade Cruzeiro) (km/h) 957 976 2.160 870 Capacidade de Transporte (pass. x km/h) 96.637 458.720 285.120 127.078

Boeing 737-100 Boeing 747 BAC/Sud Concorde Douglas DC-8-50

Tabela 2.1. Capacidade, alcance e velocidade para avies.

A tabela 2.1 apresenta a capacidade medida em nmero de passageiros, o alcance medido em quilmetros, a velocidade cruzeiro medida em km/h e a capacidade de transporte medida em passageiros x km/h. A partir dos dados da tabela 2.1 pergunta-se qual o avio com melhor desempenho? Ao depararmo-nos com esta pergunta a primeira dvida que surge como se define desempenho. Trs possibilidades podem ser consideradas para definir o avio com maior desempenho: A maior velocidade cruzeiro do Concorde; O avio com maior alcance o DC-8; O avio com maior capacidade o 747; Se optarmos por definir desempenho em termos de velocidade, ainda restam duas possibilidades:

16

1. O avio mais rpido aquele que possui a maior velocidade cruzeiro, levando um nico passageiro de um ponto a outro (Concorde). 2. O avio mais rpido aquele que consegue transportar um grande nmero de passageiros de um ponto a outro no menor intervalo de tempo (Boeing 747). De maneira similar, para o usurio de um computador, o computador mais rpido aquele que termina seu programa primeiro. Para o gerente de um centro de processamento de dados com vrios computadores, aquele que completa mais programas num curto espao de tempo.

Tempo de resposta tempo decorrido entre o incio e o trmino de uma tarefa, incluindo acessos a disco, acessos memria, atividades de entrada/sada, execuo de outros programas no caso de multiprogramao, onde vrios programas so executados concorrentemente, etc... Tambm chamado tempo de execuo. Capacidade de processamento Quantidade total de trabalho realizado em um
determinado intervalo de tempo (throughput). Ao estudar desempenho, vamos nos concentrar no tempo de resposta ou tempo de execuo de um computador. O tempo de execuo e o desempenho so inversamente proporcionais: Desempenho (x) = ________1__________ Tempo de Execuo (x) (1)

Comparando uma mquina x que possui maior desempenho do que uma mquina y, obtemos que o tempo de execuo de y maior do que o tempo de execuo de x: Desempenho (x) > Desempenho (y) ________1__________ > ________1__________ Tempo de Execuo (x) Tempo de Execuo (y) Tempo de Execuo (y) > Tempo de Execuo (x) (2) (3)

(4)

Para obter uma medida comparativa de desempenho, ns dizemos que x n vezes mais rpida do que y, significando que: Desempenho (x) = n (5) Desempenho (y) Se x n vezes mais rpida do que y, ento o tempo de execuo de y n vezes mais longo do que o tempo de x. Desempenho (x) = Tempo de Execuo (y) = n Desempenho (y) Tempo de Execuo (x) (6)

17

2.2. Relacionando Medidas (tempo de CPU, ciclos de clock, frequncia)


Tempo de CPU de um Programa = # ciclos de clock X perodo de clock Tempo de CPU de um Programa = # ciclos de clock Freqncia do clock (7) (8)

O projetista pode aumentar o desempenho reduzindo o perodo de clock ou o nmero de perodos de clock necessrio para executar o programa. O nmero mdio de clock por instruo normalmente abreviado por CPI (clocks per instruction). # de ciclos de clock = # de instrues no programa X CPI Tempo de CPU = # de instrues X CPI X perodo de clock Tempo de CPU = # de instrues x CPI Freqncia de clock (9) (10) (11)

Projetistas podem obter o nmero de ciclos de CPU de um programa atravs da seguinte equao: # Ciclos de CPU = n
i=1

(CPIi.Ci)

(12)

onde Ci o nmero de instrues tipo i no programa, CPIi o nmero mdio de perodos de clock por instruo do tipo i e n o nmero total de classes de instruo.

2.3. Medidas de Desempenho


Vrias mtricas foram criadas para substituir o tempo como medida de desempenho de um computador. Mtricas simples que so vlidas em um contexto limitado so comumente usadas de forma errada.

2.3.1. MIPS
MIPS (Million Instructions per Second) a medida da freqncia de execuo de uma dada instruo em uma mquina especfica. Tambm chamada de MIPS nativa.
MIPS

# de instrues Tempo de CPU X 10


6

# de instrues
# ciclos CPU X perodo clock X 10
6

(13)

MIPS

# de instrues X Freqncia do clock

Freqncia do clock CPI X 10


6

(14)

# de instrues X CPI X 10

Portanto: MIPS =
Freqncia do clock

(15)

CPI X 106 18

MIPS mede a freqncia de execuo de instrues, portanto MIPS especifica o desempenho inversamente ao tempo de CPU. Mquinas mais rpidas possuem um MIPS mais elevado. O uso de MIPS como medida para comparar mquinas diferentes apresenta trs problemas:
MIPS especifica a freqncia de execuo de instrues. Ele depende do conjunto de instrues da mquina. No pode-se comparar mquinas com diferentes conjuntos de instrues pois o nmero de instrues executadas ser certamente diferente. MIPS varia entre programas do mesmo computador uma vez que ele depende do tipo das instrues executadas. Portanto, a mesma mquina pode apresentar vrias medidas de MIPS. MIPS pode variar inversamente com o desempenho. Exemplo: considere uma mquina com hardware dedicado para operaes em ponto flutuante. Programas de ponto flutuante rodando no hardware opcional ao invs do hardware simples levam menos tempo de CPU, mas tem uma medida de MIPS inferior.

Isto ocorre porque programas em ponto flutuante quando executados via software (isto , rodando em HW simples) executam instrues simples depois de compilados (portanto CPI baixo, resultando em uma medida de MIPS elevada). Por outro lado, leva-se mais ciclos de clock por instruo em ponto flutuante em HW dedicado do que para uma instruo em inteiros em HW simples (portanto CPI elevado) resultando em uma medida de MIPS baixa.

2.3.2. MFLOPS
MFLOPS (Million Floating-Point Operations per Second) mede o desempenho de operaes em ponto flutuante.
MFLOPS

# Operaes de Ponto Flutuante Tempo de CPU x 10


6

(19)

Uma operao de ponto flutuante uma adio, subtrao, multiplicao ou diviso aplicada a um nmero representado em ponto flutuante. 19

O uso de MFLOPS como medida para comparar mquinas diferentes apresenta trs problemas:
MFLOPS depende do programa. Programas diferentes requerem a execuo de diferentes nmeros de operaes de ponto flutuante. MFLOPS no pode ser aplicado para programas que no usam ponto flutuante. MFLOPS no uma boa medida pois o conjunto de operaes de ponto flutuante disponvel em cada mquina diferente. Ex: o Cray-2 no tem instruo de diviso, enquanto que o Motorola 68882 tem diviso, raiz quadrada, seno e cosseno. Assim, so necessrias ao Cray-2 vrias operaes de soma/subtrao em inteiros para realizar uma nica operao de ponto flutuante, enquanto que o Motorola 68882 necessita apenas uma nica instruo.

2.3.3. Speedup
Um dos conceitos mais utilizados na avaliao de desempenho de um sistema computacional o conceito de Speedup que pode ser traduzido simplesmente por aumento de velocidade. O speedup simplesmente definido como o quociente entre o desempenho de um sistema computacional depois e antes de uma melhoria:
Desempenho depois da melhoria _______________________________________ Desempenho antes da melhoria

Speedup =

Lembrando que o desempenho de um sistema computacional para uma determinada aplicao igual ao inverso do tempo necessrio para executar a aplicao no sistema, o speedup tambm pode ser medido como o quociente entre os tempos de execuo antes e depois da melhoria:
Tempo de Execuo antes da melhoria __________________________________________ Tempo de Execuo depois da melhoria

Speedup =

Uma das relaes mais conhecidas quando se trata da avaliao de performance de computadores, especialmente na rea de mquinas paralelas, a Lei de Amdahl. A lei de Amdahl contempla o fato de que uma melhoria realizada em um sistema computacional normalmente afeta apenas uma parte das operaes computacionais realizadas por aquele sistema. A Lei de Amdahl pode ser sumariada na seguinte relao: TEX/DEP = TEX/AFE + TEX/NAF QMEL Onde TEX/DEP o tempo de execuo depois da melhoria ser aplicada ao sistema, TEX/AFE o tempo de execuo afetado pela melhoria, QMEL a quantidade de melhoria obtida na parte do sistema afetada pela melhoria (por exemplo, QMEL = 3 indica que a poro do sistema afetada pela melhoria ficou trs vezes mais rpida) e TEX/NAF o tempo de execuo no afetado pela melhoria.

20

Captulo 3

Parte Operativa

3.1 Introduo 3.1.1. Notao em Complemento de 2


A notao em complemento de 2 a forma mais comumente utilizada para representar nmeros com sinal em computadores. Nesta notao, se o bit mais significativo (o bit mais esquerda quando o nmero escrito) igual a 0, o nmero considerado positivo e o seu valor decimal pode ser lido diretamente pela maneira convencional de converso de valores binrios para valores decimais. No entanto, se o bit mais significativo igual a um, o nmero negativo e a sua magnitude pode ser encontrada invertendo-se bit-a-bit a representao binria, somando-se 1 ao valor invertido e fazendo-se a converso normal de binrio para decimal. Esta operao ilustrada na fig. 3.1.
0010 + = +2 0010 + 1110 0000 = +2 = -2 = 0

1101 : inverte 1 : soma 1 1110 0001 + 1 0010 = -2 : inverte : soma 1 = +2

(a) Inverso de sinais

(b) Soma de nmeros complementares.

Fig. 3.1. Operaes em Complemento de 2.

21

3.1.2. Overflow
Overflow ocorre quando o nmero de bits do resultado maior do que a capacidade de representao da arquitetura. A fig. 3.2 mostra situaes de ocorrncia de overflow em aritmtica em complemento de dois em uma arquitetura de 8 bits. Overflow pode ocorrer tanto em operaes de adio quanto de subtrao. Uma situao de overflow pode ser detectada analisando-se os sinais dos operandos, o tipo de operao e o sinal do resultado. A tabela 3.1 apresenta as situaes em que ocorre overflow.
10000001 01111111 + 00000010 10000001 = + 127 =+2 = - 127 10000001 + 11111110 101111111 (a) Adio ||| = - 127 = -2 = + 127 - 00000010 = - 127 = +2

(b) Subtrao

Fig. 3.2. Ocorrncia de overfow em operaes aritmticas.


Operao A+B A+B A-B A-B A+B A+B A-B A-B Sinal do Operando A Sinal do Operando B + + + + + + + + Sinal do Resultado + + no no no no

Tabela 3.1. Condies para ocorrncia de overflow.

A deteco de overflow (transbordamento) e a deciso de o que fazer no caso de ocorrncia de overflow feita pelo projetista do processador. Pode-se gerar uma exceo forando-se assim o software a tomar uma ao no caso de ocorrncia de overflow, ou pode-se apenas setar um flag indicando que ocorreu overflow. Neste ltimo caso responsabilidade do programador verificar este flag e tomar alguma providncia no caso de ocorrncia de overflow.

3.2. Unidade Lgica e Aritmtica para Computadores (ULA)


A Unidade Lgica e Aritmtica o componente principal da parte operativa de qualquer microprocessador. Ela realiza operaes aritmticas como adio e subtrao e

22

operaes lgicas como "E" e "OU". A seguir, demonstramos como uma ULA pode ser construda a partir das 4 funes lgicas elementares mostradas na fig. 3.3.
1. Porta E : (c = a . b)

a 0 0 1 1

b 0 1 0 1

c=a.b 0 0 0 1

2. Porta OU : (c = a + b)

a 0 0 1 1

b 0 1 0 1

c=a+b 0 1 1 1

3. Inversor : (c = a) a
a 0 1 c = ^a 1 0

4. Multiplexador:

(Se d = 0

ento c a seno c b)

d 0 1

c a b

Fig. 3.3. Funes Lgicas Elementares.

Uma Unidade Lgica de um bit pode ser construda utilizando-se uma porta E, uma porta OU e um multiplexador como ilustrado na fig. 3.4. A prxima funo a incluir a soma. Para construir um somador de 1 bit, devemos considerar como a soma realizada. Conforme indicado na fig. 3.5, cada somador de 1 bit tem trs entradas: os 2 operandos e o vem-um (carry-in) que oriundo do transbordamento do bit imediatamente anterior, e produz duas sadas: 1 bit soma e 1 bit de vai-um (carry-out) que ser usado no somador do bit posterior. 23

A tabela verdade do somador de 1 bit apresentada na fig. 3.6. Observe que a sada "Vai-Um" ser igual a 1 se e somente se pelo menos duas das entradas forem 1 simultaneamente. A sada soma ser igual a um se e somente se um nmero mpar de entradas for igual a 1.

Fig. 3.4. Unidade Lgica de 1 bit para as operaes "E"e "OU".

B Carry-in

Carry-out

B Carry-out Soma

Soma

Somador Completo

(Full Adder)

Somador Parcial

(Half Adder)

Fig. 3.5. Somador de 1 bit.


Entradas b 0 0 1 1 0 0 1 1 Sadas Vem-um 0 1 0 1 0 1 0 1 Vai-um 0 0 0 1 0 1 1 1 Soma 0 1 1 0 1 0 0 1 Comentrios 0+0+0=00two 0+0+1=01two 0+1+0=01two 0+1+1=10two 1+0+0=01two 1+0+1=10two 1+1+0=10two 1+1+1=11two

a 0 0 0 0 1 1 1 1

Fig. 3.6. Tabela verdade do somador de 1 bit.

24

Juntando a unidade lgica de 1 bit e o somador de 1 bit, podemos construir uma Unidade Lgica e Aritmtica (ULA) de 1 bit conforme ilustrado na fig. 3.7. Observe que agora estamos utilizando um multiplexador com trs entradas, portanto precisaremos de dois bits para especificar a operao a ser realizada na ULA. A ULA mostrada na fig. 3.7 possui uma sria limitao: ela no subtrai. Lembrando que em notao de complemento de 2, pode-se obter o complemento de um nmero invertendo-se todos os bits e somando-se 1, podemos incluir a operao de subtrao conforme ilustra a fig. 3.8, utilizando um segundo multiplexador e um inversor. Agora para realizar a operao de subtrao devemos especificar a inverso do operando b e colocar 1 na entrada vem-um do somador.

Fig. 3.7. Unidade Lgica e Aritmtica de 1 bit.

Finalmente, 32 destas ULAs de 1 bit podem ser conectadas para formar uma ULA de 32 bits, conforme ilustrado na fig. 3.9.

Soma

Fig. 3.8. ULA de 1 bit que soma, subtrai e realiza as operaes lgicas "E" e "OU".

25

Inverte

Vem-Um

Operao

a0 b0

Vem-Um ALU0 Vai-Um Resultado 0

Vem-Um a1 b1 ALU1 Vai-Um Resultado 1

a2 b2

Vem-Um ALU2 Vai-Um Resultado 2

: :

: :

Vem-Um a31 ALU31 b31 Vai-Um Resultado 31

Fig. 3.9. ULA de 32 bits.

O smbolo mais comumente utilizado para representar uma ULA na representao em diagrama de blocos de o sistema mostrado na fig. 3.10.
Operao

3 a ALU b
Carry-out Linhas de Controle da ULA Funo Inverte Operao

Zero Resultado Overflow

0 0 0 1

00 01 10 10

E OU soma subtrai

Fig. 3.10. Smbolo para ULA (a linha "Operao" inclui as linhas "Inverte" e "Operao" da fig. 3.8).

3.3. Operao de Soma (Carry Lookahead)


O crescimento linear do delay com o tamanho da palavra de entrada (conforme visto anteriormente) pode ser melhorado atravs do clculo dos carries de cada estgio em paralelo. O carry do estgio Ci pode ser expresso como: 26

Ci = Gi + Pi.Ci-1 onde Gi = Ai.Bi Pi = Ai + Bi (generate signal) (propagate signal).

[1] [2] [3]

Expandindo [1], temos: Ci = Gi + PiCi-1 + PiPi-1Gi-2 + ... + Pi ... P1C0 A soma Si gerada por: Si = Ci-1 Ai Bi = Ci-1 Pi A quantidade de portas lgicas necessrias para implementar este somador pode claramente explodir exponencialmente. Como conseqncia, o nmero de estgios do lookahead normalmente limitado a quatro. Para um somador de quatro estgios (quatro bits), os termos apropriados so os seguintes: C1 = G1 + P1.C0 C2 = G2 + P2G1 + P2P1C0 C3 = G3 + P3G2 + P3P2G1 + P3P2P1C0 C4 = G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 Duas possveis implementaes para este somador carry lookahead podem ser vistas na fig. 3.11.

(a)

27

A1 G1 B1 P1

C0 P1 G1 P2 C1

A2 G2 B2 P2 P3 G3 B3 P3 G2

C2

A3

C3

G3
A1 B1 C0 S1

A2 B2 C1 A3 B3 C2

S2

S3

(b) Fig. 3.11. Somador Carry Lookahead de 4 bits.

3.4. Operao de Multiplicao


Nesta seo vamos estudar dois algoritmos de multiplicao. Comearemos com um algoritmo simples para compreender o fluxo de dados. Em seguida apresentaremos o Algoritmo de Booth, que um dos algoritmos mais utilizados na prtica. A escolha dos projetistas pelo Algoritmo de Booth se justifica pelo fato dele poder multiplicar nmeros positivos e negativos, independentemente dos seus sinais. Os dois operandos a serem multiplicados so chamados de multiplicando e multiplicador e o resultado chamado de produto: Multiplicando: Multiplicador: Produto: B x A . C

28

Para implementar um algoritmo de multiplicao em hardware necessitamos dois registradores: o registrador do Multiplicando e o do Produto. Se considerarmos uma multiplicao de nmeros com n bits, o registrador do Produto dever ter 2n bits. O registrador do Produto dividido em duas partes: produto(alto) e produto(baixo). A parte superior do registrador do Produto, produto(alto), com n bits, inicializada com 0s, enquanto que o multiplicando colocado no registrador do Multiplicando e o multiplicador colocado na parte inferior do registrador do Produto: produto(baixo). A operao deste primeiro algoritmo de multiplicao pode ser descrita conforme visto na fig. 3.12. MULTIPLICAO 1:
1. produto (alto) 2. produto (baixo) multiplicador 3. for i to 31 4. 5. 6. do if multiplicador () = 1 then produto (alto) produto (alto) + multiplicando produto produto >> 1 Fig. 3.12. Algoritmo Multiplicao 1.

Exemplo: 510 x 210 = 001012 x 000102, onde:

multiplicador: 00101 (510) multiplicando: 00010 (210)


Produto alto 00000 00010 00001 00001 00000 00010 00001 00001 00000 00000 00000 baixo 00101 00101 00010 00010 10001 10001 01000 01000 10100 10100 01010 0 0 0 1 0 1 Multiplicador(0)

Iterao

Operao

Multipli cando

0 1

Inicializao Prod Prod + Mult Prod Prod >> 1

00010 00010 00010 00010 00010 00010 00010 00010 00010 00010 00010

Sem operao Prod Prod >> 1

Prod Prod + Mult Prod Prod >> 1

Sem operao Prod Prod >> 1

Sem operao Prod Prod >> 1

1010 O hardware necessrio para implementar este algoritmo mostrado na fig. 3.13. Este algoritmo estudado faz a multiplicao de nmeros inteiros positivos. Para operar nmeros inteiros negativos, poderamos transform-los em positivos, realizar a multiplicao e negar o resultado se os operandos fossem de sinais opostos. Um algoritmo mais elegante para multiplicar nmeros com sinal o Algoritmo de Booth. Para entender este algoritmo, observamos que existem vrias maneiras para calcular o produto de dois nmeros. Ao encontrar uma seqncia de 1s no multiplicador, ao invs de 29

realizar uma soma para cada um dos 1s da seqncia, o Algoritmo de Booth faz uma subtrao ao encontrar o primeiro 1 e uma soma aps o ltimo.
MULTIPLICANDO 32 SOMA
ALU DE 32 BITS

32

32 PRODUTO PRODUTO 64 BITS

DESLOCA DIREITA

CONTROLE BIT

) Multiplicador(
Fig. 3.13. Hardware para Multiplicao 1.

000010 x 001110 000000 + 000010 + 000010 (soma) + 000010 (soma) 000000 000000 _ 00000011100 (soma)

000010 x 001110 000000 - 000010 000000 000000 + 000010

= 210 = 1410 (subtrao)

(soma) = 2810

000000 . 00000011100

(a)

(b)

Fig. 3.14. Multiplicao de +2 por +14 representados em 6 bits: (a) Mtodo tradicional; (b) Mtodo de Booth.

Observe no exemplo apresentado na fig. 3.14 que enquanto o mtodo tradicional necessitou de 3 operaes aritmticas para efetuar a multiplicao, o mtodo de Booth completou a multiplicao com apenas 2 duas. Podem-se construir exemplos em que o mtodo de Booth necessita mais operaes aritmticas. No entanto, como nmeros negativos representados em complemento de dois tendem a possuir uma longa seqncia de uns em sua representao, a multiplicao destes nmeros pelo mtodo de Booth em geral mais rpida. Na representao do algoritmo de multiplicao de Booth da fig. 3.15, produto(alto) representa a metade alta do registrador de produto, produto(baixo) representa a metade baixa do registrador de produto, produto(0) representa o bit menos significativo do registrador de produto e bit__direita representa um bit armazenado em hardware e que memoriza qual era o valor do bit direita do bit do multiplicador que est sendo processado. O smbolo >>aritmtico indica um deslocamento aritmtico direita. Quando um deslocamento aritmtico realizado, 0s so introduzidos esquerda se o bit mais significativo do nmero original era 0, e 1s so introduzidos esquerda se o bit era 1. Em outras palavras, o deslocamento preserva o sinal do operando.

30

BOOTH:
1. produto (alto) 2. produto (baixo) multiplicador 3. bit__direita 4. for i to 31 5. 6. 7. 8. 9. 10. do if bit__direita = and produto () = 1 then produto (alto) produto (alto) - multiplicando else if bit__direita = 1 and produto () = then produto (alto) produto (alto) + multiplicando bit__direita produto () produto produto >>aritmtico 1

Fig. 3.15. Algoritmo de Booth.

Lembrando que a operao de soma pode levar bastante tempo para ser realizada por causa do tempo necessrio para propagar o vai-um at o bit mais significativo, e lembrando tambm que a subtrao feita pelo mesmo circuito do somador, o Algoritmo de Booth oferece a vantagem de reduo do nmero de operaes na ULA quando o multiplicador possui uma seqncia longa de 1s. Verifique no hardware para o algoritmo de Booth apresentado na fig. 3.16 a presena de um bit extra de armazenamento. Este bit necessrio para lembrar o bit direita do bit que est sendo processado.
MULTIPLICANDO 32
SOMA/SUBTRAI

CONTROLE 32 32 PRODUTO
Bit Direita Produto(0)

DESLOCAMENTO

Fig. 3.16. Hardware para Algoritmo de Multiplicao de Booth.

No exemplo a seguir, o Algoritmo de Booth usado para multiplicar nmeros negativos expressos em notao complemento de 2. Exemplo 1: -310 x 210 = 0010 x 1101, onde: multiplicador: 1101 (-310) multiplicando: 0010 (210) Obs.: -210 = 1110.

31

Iterao 0 1

Operao

Multipli cando 0010 0010 0010 0010 0010 0010 0010 0010 0010

Produto alto baixo 0000 1110 1111 0001 0000 1110 1111 1111 1111 1101 1101 0110 0110 1011 1011 0101 0101 1010

Bit direita/ Produto(0) 0/1

Inicializao Prod(alto) Prod(alto) - Mult Prod Prod >>aritmtico 1

1/0

Prod(alto) Prod(alto) + Mult Prod Prod >>aritmtico 1

0/1

Prod(alto) Prod(alto) - Mult Prod Prod >>aritmtico 1

1/1

Sem operao Prod Prod >>aritmtico 1

1/0

6 Exemplo 2: -210 x -210 = 1110 x 1110, onde: multiplicador: 1110 (-210) multiplicando: 1110 (-210)
Iterao 0 1 Operao Multipli cando 1110 1110 1110 1110 1110 1110 1110 1110 1110 Produto alto baixo 0000 0000 0000 0010 0001 0001 0000 0000 0000 1110 1110 0111 0111 0011 0011 1001 1001 0100 1/0 1/1 1/1 0/1 Bit direita/ Produto(0) 0/0

Inicializao Sem operao Prod Prod >>aritmtico 1

Prod Prod - Mult Prod Prod >>aritmtico 1

Sem operao Prod Prod >>aritmtico 1

Sem operao Prod Prod >>aritmtico 1

3.5. Operao de Diviso


Dividendo = A |B C . R = Divisor = Quociente = Resto

A diviso pode ser computada com o mesmo hardware da multiplicao:


DIVISOR

Soma/Subtrai ALU DE 32 BITS

32
RESTO
Desloca

CONTROLE

32

E o algoritmo para a diviso pode ser visto na fig. 3.17. DIVISO:


1. resto (alto) 2. resto (baixo) dividendo 3. resto resto << 1 4. For i to 31 5. 6. 7. 8. 9. do resto (alto) resto (alto) - divisor if resto(alto) < then resto (alto) resto (alto) + divisor resto resto << 1 else resto resto <<aritmtico 1

10. resto(alto) resto(alto) >> 1

Fig. 3.17. Algoritmo de Diviso.

Exemplo 1: 710 210 = 0111 0010, onde: dividendo: 0111 (710) divisor: 0010 (210) Obs: -2 = 11102
Iterao 0 Inicializao Resto Resto << 1 1 Resto(alto) Resto(alto) - Divisor Resto < 0 : Resto(alto) Resto(alto) + Divisor Resto Resto << 1 2 Resto Resto - Divisor Resto(alto) < 0 : Resto(alto) Resto(alto) + Divisor Resto Resto << 1 3 Resto Resto - Divisor Resto > 0 : Resto Resto <<aritmtico 1 Resto Resto - Divisor Resto > 0 : Resto Resto <<aritmtico 1 Resto (alto) Resto (alto) >> 1 Operao Divisor 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 Resto alto baixo 0000 0111 0000 1110 1110 1110 0000 1110 0001 1100 1111 1100 0001 1100 0011 1000 0001 1000 0011 0001 0001 0001 0010 0011 0001 0011 Resto / Quoc.

Exemplo 2: 810 310 = 01000 00011, onde: dividendo: 01000 (810) divisor: 00011 (310) Obs: -3 = 111012

33

Iterao 0 Inicializao Resto Resto << 1 1 Resto Resto - Divisor Resto < 0 : Resto + Divisor Resto Resto << 1 2 Resto Resto - Divisor Resto < 0 : Resto + Divisor Resto Resto << 1 3 Resto Resto - Divisor Resto < 0 : Resto + Divisor Resto Resto << 1 4

Operao

Divisor 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011 00011

Resto alto baixo 00000 01000 00000 10000 11101 10000 00000 10000 00001 00000 11110 00000 00001 00000 00010 00000 11111 00000 00010 00000 00100 00000 00001 00000 00010 00001 11111 00001 00010 00001 00100 00010 00010 00010 Resto / Quoc.

Resto Resto - Divisor Resto > 0 : Resto Resto <<aritmtico 1 Resto Resto - Divisor Resto < 0 : Resto + Divisor Resto Resto << 1 Resto (alto) Resto (alto) >> 1

At o momento nmeros negativos foram ignorados na diviso. A maneira mais simples lembrar dos sinais do divisor e do dividendo e ento negar o quociente se os sinais so diferentes. Note que a seguinte equao deve ser verificada: Dividendo = Quociente x Divisor + Resto Assim, veja o exemplo: +7 +2: -7 +2: +7 -2: -7 -2:

quociente = +3 e resto = +1 quociente = -3 e resto = -1 quociente = -3 e resto = +1 quociente = +3 e resto = -1

Desta forma, no basta apenas inverter o sinal do quociente quando os sinais do dividendo e do divisor forem diferentes, tambm preciso notar que o sinal do resto sempre o mesmo do dividendo.

3.6. Notao em Ponto Flutuante


Permite a representao de nmeros reais e de nmeros com magnitudes muito diferentes em uma forma padro. A representao utilizada a notao cientfica em que o ponto decimal colocado direita do primeiro algarismo significativo e a magnitude do nmero armazenada no expoente.

34

35

36

37

38

Captulo 4

Arquiteturas em Pipeline

4.1. Organizao de uma Mquina Pipeline


A maioria das arquiteturas e processadores projetadas depois de 1990 possuem uma organizao chamada pipeline. A traduo literal de pipeline seria linha de dutos, uma traduo mais aproximada do significado que este termo assume em arquiteturas de computadores seria linha de montagem. Organizar a execuo de uma tarefa em pipeline significa dividir a execuo desta tarefa em estgios sucessivos, exatamente como ocorre na produo de um produto em uma linha de montagem. Em um microprocessador, a execuo de uma instruo tipicamente dividida em cinco estgios: busca da instruo, decodificao da instruo, execuo da instruo, acesso memria e escrita de resultados. Esta diviso da execuo em mltiplos estgios aumenta o desempenho do processador pois possvel ter uma instruo diferente executando em cada estgio ao mesmo tempo. A passagem de uma instruo atravs dos diferentes estgios do pipeline similar produo de um carro em uma linha de montagem. Existem algumas regras muito importantes que devem ser seguidas quando se projeta uma arquitetura em pipeline: 1. Todos os estgios devem ter a mesma durao de tempo. 2. Deve-se procurar manter o pipeline cheio a maior parte do tempo. 3. O intervalo mnimo entre o trmino de execuo de duas instrues consecutivas igual ao tempo de execuo do estgio que leva mais tempo. 4. Dadas duas arquiteturas implementadas com a mesma tecnologia, a arquitetura que construda usando pipeline no reduz o tempo de execuo de instrues, mas aumenta a freqncia de execuo de instrues (throughput). 39

A execuo que ocorre em cada um dos estgios descrita a seguir: 1) Busca de Instruo: O contador de programa usado para buscar a prxima instruo. As instrues so usualmente armazenadas em uma memria cache que lida durante o estgio de busca. 2) Decodificao de Instrues e Busca de Operandos: O cdigo da instruo buscado, os campos so analisados e os sinais de controle so gerados. Os campos das instrues referentes aos registradores so usados para ler os operandos no banco de registradores. 3) Execuo de Instrues: A operao especificada pelo cdigo de operao executada. Para uma instruo de acesso memria, o endereo efetivo da memria calculado. 4) Acesso Memria: Dados so carregados da memria ou escritos na memria. Uma cache de dados tipicamente utilizada. 5) Escrita de Resultados: O resultado da operao escrito de volta no banco de registradores.
IF Busca Instruo ID Decodifica Instruo EX Executa Instruo ME Acessa Memria WB Escreve nos Registradores

Fig. 4.1. Estrutura de uma mquina pipeline.

Cada um dos retngulos mostrados na fig. 4.1 representa um banco de flip-flops que so elementos de memria utilizados para armazenar os resultados no final de cada estgio do pipeline. Os pipelines utilizados em microprocessadores so sncronos, portanto um sinal de relgio no mostrado na fig. 4.1 habilita o elemento de memria a passar seus resultados para o estgio seguinte. Como existe um nico relgio para comandar o pipeline, o tempo gasto em todos os estgios do pipeline idntico e no pode ser menor o que o tempo gasto no estgio mais lento. Este tempo gasto em cada estgio o perodo do clock utilizado para comandar o pipeline e ele determina a velocidade de execuo das instrues. A latncia de um pipeline o tempo necessrio para uma instruo atravessar todo o pipeline. Portanto para calcular o tempo de latncia de uma mquina com pipeline basta multiplicar o perodo do clock pelo nmero de estgios no pipeline. A latncia importante apenas para se determinar quanto tempo a execuo da primeira instruo leva para ser completada.
Estgio do pipeline onde a instruo se encontra 2 3 4 5 6 EX ME WB ID EX ME WB IF ID EX ME WB IF ID EX ME

Ciclo de Clock Instruo 1 Instruo 2 Instruo 3 Instruo 4

0 IF

1 ID IF

WB

Fig. 4.2. Execuo de uma seqncia de instrues num pipeline.

40

4.2. Gerao de Bolhas no Pipeline


Uma "bolha" em um pipeline consiste em uma seqncia de um ou mais perodos de clock em que um estgio do pipeline est vazio. Se um estgio do pipeline estiver vazio no ciclo de clock n, consequentemente o estgio seguinte estar vazio no ciclo de clock n+1. Desta forma bolhas formadas na entrada de um pipeline propagam-se atravs do pipeline at desaparecerem no ltimo estgio. Situaes que geram bolhas em pipelines incluem: 1) a execuo de instrues de desvio, 2) o atendimento de interrupes, 3) o tratamento de excees, 4) o retardo na execuo de instrues devido a dependncias existentes com instrues que a precedem. No caso de atendimento de excees e interrupes no existem muitas tcnicas efetivas para minorar o problema da formao de bolhas no pipeline pois estas ocorrncias so bastante imprevisveis. No caso de execuo de desvios condicionais a formao de bolhas pode ser reduzida atravs da utilizao de predio de ocorrncia e desvio. No caso de dependncias, a formao de bolhas pode ser minorada atravs do reordenamento de instrues. Vamos examinar estas tcnicas nas prximas sees.

4.3 Previso de Desvios


O problema introduzido por desvios condicionais em arquiteturas organizadas em pipeline que quando o desvio decodificado na unidade de decodificao de instrues impossvel decidir se o desvio ser executado ou no. Isto , no pode-se determinar a priori qual a prxima instruo a ser executada. Existem duas possibilidades: a) a condio que determina o desvio falsa e o desvio no executado, neste caso a prxima instruo a ser executada a instruo seguinte instruo de desvio no programa; b) condio verdadeira e o endereo da prxima instruo a ser executada determinada pela instruo de desvio. Como determinar qual a prxima instruo a ser buscada quando uma instruo de desvio condicional decodificada? A forma mais simples e menos eficaz de tratar um desvio condicional consiste em simplesmente paralizar a busca de instrues quando uma instruo de desvio condicional decodificada. Com esta forma de tratamento de desvio garantimos que todo desvio condicional gerar uma bolha no pipeline pois a busca de instruo ficar paralizada at que se possa decidir se o desvio ser executado ou no. Esta tcnica s deve ser utilizada quando o custo de buscar e depois ter que descartar a instruo errada muito alto. Uma outra forma tentar prever o que vai acontecer com o desvio. Neste caso a previso pode ser esttica ou dinmica. A previso esttica aquela em que dada uma instruo de desvio em um programa ns vamos sempre fazer a mesma previso para aquela instruo. Observe que podemos fazer previses diferentes para diferentes instrues de

41

desvio no mesmo programa. Na previso dinmica podemos mudar a previso para uma mesma instruo de branch medida que o programa executado.

4.3.1 Previso Esttica


A forma mais simples de previso esttica aquela em que a mesma previso feita para um dado desvio condicional. Esta tcnica de previso simples de implementar e pode tomar duas formas:

Os desvios condicionais nunca ocorrem: Assumindo que os desvios condicionais nunca ocorrem, simplesmente se continua o processamento normal de instrues incrementando o PC e buscando a instruo seguinte. Se for determinado mais tarde que o programa deve desviar as instrues buscadas tero que ser descartadas e os efeitos de quaisquer operaes realizadas por elas devem ser anulados. Os desvios condicionais sempre ocorrem: Assumindo que os desvios condicionais sempre ocorrem necessrio calcular o endereo de desvio muito rapidamente j na Unidade de Decodificao de Instruo para dar tempo de buscar a nova instruo no endereo especificado pela instruo de desvio.
Algumas observaes feitas por projetistas de computadores aps analisar diversos programas indicam que um grande nmero de desvios ocorre no final de laos de programa. Se um lao de programa for executado n vezes, o desvio que se encontra no final do lao ir ocorrer n vezes e no ocorrer uma vez no final do lao. Alguns programadores tambm observaram que desvios condicionais originados por comandos IF em linguagens de ao nvel tendem a no ocorrer. Portanto, existe evidncias de que seria desejvel possuir-se a capacidade de fazer previso esttica diferenciada para diferentes instrues de desvio em um mesmo programa (ex: beq sempre ocorre, bne nunca ocorre, etc...). Uma soluo para esta situao consiste em adicionar um bit no cdigo de instrues de desvio condicional para informar o hardware se aquele desvio ser provavelmente executado ou provavelmente no executado. Este bit dever ser especificado pelo compilador. Como a determinao de que a previso ser de execuo ou no do desvio feita em tempo de compilao, este mtodo de previso tambm esttico.

4.3.2 Previso Dinmica


Na previso dinmica de desvios condicionais uma mesma instruo de desvio pode receber uma previso de ser ou no executada em diferentes momentos do programa. Uma soluo comum criar uma tabela de desvios em hardware. Esta tabela pode ser gerenciada na forma de uma cache (Content Addressable Memory - CAM). A cada vez que uma instruo de desvio executada ela adicionada tabela e um bit setado ou resetado para indicar se o desvio foi executado ou no. Na tabela tambm registrado o endereo para qual o desvio foi realizado. Desta forma na prxima vez que a mesma instruo de desvio for decodificada, esta tabela consultada e a previso feita de que a mesma coisa (execuo ou no execuo do desvio) vai ocorrer de novo. Se a previso for de execuo do desvio o endereo no qual a nova instruo deve ser buscada j se encontra nesta tabela.

42

4.4 Processamento de Excees


A ocorrncia de excees em um computador imprevisvel e portanto numa mquina em pipeline uma exceo normalmente resulta na formao de bolhas. Uma complicao adicional que como existem vrias instrues em diferentes estgios de execuo ao mesmo tempo, difcil decidir qual foi a instruo que causou a gerao da exceo. Uma soluo para minorar este problema categorizar as excees de acordo com o estgio do pipeline em que elas ocorrem. Por exemplo uma instruo ilegal s pode ocorrer na unidade de decodificao de instrues (ID) e uma diviso por zero ou uma exceo devida a overflow s pode ocorrer na unidade de execuo (EX). Algumas mquinas com arquitetura em pipeline so ditas ter excees imprecisas. Nestas mquinas no possvel determinar qual a instruo que causou a exceo. Uma outra complicao nas arquiteturas em pipeline o aparecimento de mltiplas excees no mesmo ciclo de clock. Por exemplo uma instruo que causa erro aritmtico pode ser seguida de uma instruo ilegal. Neste caso a unidade de execuo (EX) gerar uma exceo por erro aritmtico e a unidade de decodificao (ID) gerar uma exceo por instruo ilegal, ambas no mesmo ciclo de clock. A soluo para este problema consiste em criar uma tabela de prioridade para o processamento de excees.

4.5 Bolhas Causadas por Dependncias


Uma outra causa de formao de bolhas em arquiteturas com pipeline so as dependncias existentes entre instrues num programa. Para ilustrar estre problema, vamos considerar o exemplo de pseudo programa assembler apresentado a seguir. Este pseudo cdigo foi escrito com uma simbologia muito similar simbologia utilizada pela Motorola para os processadores da famlia MC68000. O trecho de programa abaixo permuta os valores armazenados nas posies $800 e $1000 da memria. inst.: A B C D

MOVE MOVE MOVE MOVE

$800, D0; $1000, D1; D1, $800; D0, $1000;

copia o valor do endereo $800 no registrador D0 copia o valor do endereo $1000 no registrador D1 copia o valor do registrador D1 no endereo $800 copia o valor do registrador D0 no endereo $1000
A B C D 5 B C D 7 C D C D D

WB ME EX ID IF Perodo clock

A 1

A B 2

A B C 3

A B C D 4

C D 6

10

Fig. 4.3. Formao de bolha devido dependncia entre instrues.

Observe na fig. 4.3 que no perodo de clock 6 quando a instruo C deveria executar no estgio de escrita na memria (ME) para escrever o valor de D1 no endereo $800, o valor lido do endereo $1000 ainda no est disponvel em D1 pois ele s ser escrito quando a instruo B tiver executado no estgio de escrita nos registradores (WB), o que ocorre 43

tambm no perodo de clock 6. Portanto a execuo da instruo C necessita ser atrasada por dois ciclos de relgio, gerando uma bolha no pipeline. Uma forma simples de resolver este problema consiste em reordenar as instrues no programa, conforme ilustrado a seguir. inst.: B A C D

MOVE MOVE MOVE MOVE

$1000, D1; $800, D0; D1, $800; D0, $1000;

copia o valor do endereo $1000 no registrador D1 copia o valor do endereo $800 no registrador D0 copia o valor do registrador D1 no endereo $800 copia o valor do registrador D0 no endereo $1000
B A C D 4 B A C D 5 A C D 6 C D C D D

WB ME EX ID IF Perodo clock

B 1

B A 2

B A C 3

10

Fig. 4.4. Minimizao de bolhas por reordenamento de instrues.

A fig. 4.4 ilustra que um simples reordenamento de instrues suficiente neste caso para minimizar a bolha gerada pela dependncia. Observe que o tempo total para a execuo da seqncia de instrues foi reduzido de 1 ciclo de clock. Existem situaes em que um simples reordenamento de instrues no suficiente para minimizar (ou eliminar) bolhas causadas por dependncias. Considere o programa abaixo que realiza a inverso de uma tabela de palavras localizada entre os endereos $1000 e $9000 da memria. A B C D E F G H I J K L
WB ME

LOOP

MOVEA #$1000, A0; inicializa A0 MOVEA #$9000, A1; inicializa A1 MOVE (A0), D0; copia em D0 dado apontado por AO MOVE (A1), D1; copia em D1 dado apontado por A1 MOVE D0, (A1); copia valor em D0 no end. indicado em A1 MOVE D1, (A0); copia valor em D1 no end. indicado em A0 ADDQ #2, A0; incrementa o valor de A0 SUBQ #2, A1; decrementa o valor de A1 CMPA A0, A1; compara os endereos em A0 e A1 BGT LOOP; enquanto A1 maior que A0, continua MOVE #$500, A0; inicia outro procedimento MOVE #$17000, A1; inicia outro procedimento
C D E 5 C D E F 6 C D E F 7 D E F G 8 E F G H 9 F G H I 10 G H I J 11 G H I J 12 H I J K 14 J K L 15 -

EX ID IF
Clk

A 1

A B 2

A B C 3

B C D 4

I J 13

C 16

C D 17

Fig. 4.5. Execuo do programa com loop.

44

Conforme ilustrado na fig. 4.5, o lao do programa que efetivamente transfere os dados para fazer a inverso da tabela de palavras necessita de 12 ciclos de clock para executar. Para inverter uma tabela com n palavras necessrio executar este lao n/2 vezes. Portanto o nmero de ciclos de clock necessrio para realizar a inverso da tabela 6n (supondo que cada instruo executada em apenas 1 ciclo de clock). A fig. 4.5 indica a formao de 3 bolhas dentro da execuo do loop: 1) a primeira bolha aparece no ciclo de clock 7 quando a instruo E tem que esperar at o fim do WB da instruo C. Em outras palavras, ela tem que aguardar at que o novo valor do registrador D0 produzido pela instruo C seja escrito no estgio de escrita em registradores WB, o que s vai ocorrer no ciclo de clock 6. Esta bolha tem o tamanho de 1 ciclo de clock. 2) a segunda bolha, com tamanho de 2 ciclos de clock, aparece no ciclo de clock 12 quando a instruo I tem que esperar at o fim do WB da instruo H. 3) a terceira bolha aparece no final do loop devido ao uso de uma previso de que o desvio no ser executado, o que faz com que o processador busque as instrues K e L que no sero executadas. Quando determinado que estas instrues no sero executadas, elas so eliminadas do pipe, gerando uma bolha de dois ciclos de clock. O programa foi reescrito para que fosse eliminada a dependncia entre as instrues de atualizao dos endereos em A0 e A1 e a instruo de comparao. Para que isto ocorresse a atualizao dos valores dos registradores foi feita no incio do lao e a inicializao de A0 e A1 foi alterada apropriadamente. O novo programa apresentado a seguir. A B C D E F G H I J K L MOVEA #$0FFE, A0; inicializa A0 MOVEA #$9002, A1; inicializa A1 ADDQ #2, A0; incrementa o valor de A0 SUBQ #2, A1; decrementa o valor de A1 MOVE (A0), D0; copia em D0 dado apontado por AO MOVE (A1), D1; copia em D1 dado apontado por A1 MOVE D0, (A1); copia valor em D0 no end. indicado em A1 MOVE D1, (A0); copia valor em D1 no end. indicado em A0 CMPA A0, A1; compara os endereos em A0 e A1 BGT LOOP; enquanto A1 maior que A0, continua MOVE #$500, A0; inicia outro procedimento MOVE #$17000, A1; inicia outro procedimento

LOOP

Para eliminar a bolha no final do loop, as instrues foram reordenadas dentro do lao e a previso esttica do desvio foi alterada para uma previso de que o desvio sempre ocorre. Assim obtemos a execuo mostrada na fig. 4.6.
WB ME

EX ID IF
Clk

A 1

A B 2

A B C 3

B C D 4

C D E 5

C D E F 6

C D E F 7

D E F G 8 E F G H 9

E F G H 10

F G H I 11 G H I J 12

H I J C 13

J C D 14

C D E 15

C D E F 16

C D E F 17

Fig. 4.6. Eliminao de bolhas dentro do loop.

45

Conforme mostrado na fig. 4.6, a modificao da previso esttica de desvio para desvio executado e a eliminao de bolha por reordenao de instrues dentro do lao causaram uma reduo de 30 no nmero de ciclos de clock necessrios para executar o lao. Com um lao de 8 ciclos de clock, uma tabela com n palavras pode ser invertida em 4n ciclos de clock. Observe que a instruo C no faz nada e foi inserida apenas como uma reserva de espao de tempo para que o lao pudesse comear ordenadamente. A insero da instruo C necessria por causa da dependncia existente entre a instruo B e a instruo D.

4.6. Mquinas Superpipeline, Superescalar


O perodo de clock de uma mquina pipeline determinado pelo estgio que leva maior tempo para ser executado. Uma tcnica utilizada para acelerar uma mquina pipeline subdividir os estgios mais lentos em subestgios de menor durao. Uma mquina com um nmero de estgios maior do que cinco chamada de superpipeline. A fig. 4.7 ilustra uma organizao superpipeline obtida pela diviso do estgio de busca de instrues (IF) em dois subestgios e do estgio de acesso memria em trs subestgios.
IF IF IF ID IF EX ID ME EX ME ME ME ME WB ME WB

Fig. 4.7. Arquitetura Superpipeline.

Uma outra tcnica para acelerar o processamento em mquinas pipeline a utilizao de mltiplas unidades funcionais que podem operar concorrentemente. Numa arquitetura deste tipo mltiplas instrues podem ser executadas no mesmo ciclo de clock. necessrio realizar anlise de dependncias para determinar se as instrues comeadas ao mesmo tempo no possuem interdependncias.
IF IF ID ID EX EX ME ME WB WB

Fig. 4.8. Arquitetura Superescalar.

A fig. 4.8. ilustra uma arquitetura superescalar com dois pipelines que podem operar em paralelo. Uma preocupao que surge com a implementao de mquinas superescalar a possibilidade de trmino de execuo fora de ordem. Isto ocorreria quando suas instrues so iniciadas ao mesmo tempo em dois pipelines e uma bolha surge em um deles causando que uma instruo leve mais tempo do que a outra. Uma soluo adotada para este problema consiste em criar um buffer de reordenao que armazena o resultado das instrues at que os resultados possam ser escritos na ordem correta. A maioria dos processadores RISC so arquiteturas superescalar e superpipelined. Isto eles possuem mais de cinco estgios no pipeline devido subdiviso de alguns estgios e eles possuem mltiplas unidades funcionais em cada estgio. Uma configurao tpica o uso de quatro unidades funcionais em cada estgio.

46