15.05.2013 Views

Arquitetura de Computadores - Instituto de Informática - UFG

Arquitetura de Computadores - Instituto de Informática - UFG

Arquitetura de Computadores - Instituto de Informática - UFG

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Arquitetura</strong> <strong>de</strong> <strong>Computadores</strong><br />

Prof. Fábio M. Costa<br />

<strong>Instituto</strong> <strong>de</strong> <strong>Informática</strong> – <strong>UFG</strong><br />

1o. Semestre / 2005<br />

Fundamentos<br />

Parte 2


Princípios <strong>de</strong> Projeto <strong>de</strong><br />

<strong>Computadores</strong>


Três áreas <strong>de</strong> aplicação com<br />

características diferentes<br />

Computação em <strong>de</strong>sktop<br />

custo / <strong>de</strong>sempenho – sistema <strong>de</strong>dicado<br />

Servidores<br />

custo / <strong>de</strong>sempenho em relação a:<br />

confiabilida<strong>de</strong>, disponibilida<strong>de</strong>, throughput,<br />

escalabilida<strong>de</strong><br />

<strong>Computadores</strong> embarcados<br />

custo, consumo <strong>de</strong> energia (potência)


A tarefa do projetista...<br />

Determinar:<br />

requisitos funcionais<br />

metas <strong>de</strong> preço, potência e <strong>de</strong>sempenho<br />

Influências importantes<br />

mercado, quantida<strong>de</strong> <strong>de</strong> software existente<br />

Otimizar o projeto<br />

<strong>de</strong> acordo com as métricas adotadas<br />

custo/<strong>de</strong>sempenho (<strong>de</strong>sktop)<br />

throughput e disponibilida<strong>de</strong> (servidor)<br />

consumo <strong>de</strong> energia (sistemas embarcados)<br />

etc.


A tarefa do projetista<br />

Combinando:<br />

<strong>Arquitetura</strong> do conjunto <strong>de</strong> instruções<br />

nível ISA – interface hardware/software<br />

Organização do computador<br />

componentes funcionais e sua interconexão<br />

Implementação <strong>de</strong> hardware<br />

circuitos, tecnologias <strong>de</strong> integração, etc.


Evolução do custo <strong>de</strong><br />

Memórias DRAM


Evolução do custo: Caso do<br />

Pentium III


Custo <strong>de</strong> um circuito integrado<br />

Intel Pentium 4


Custo <strong>de</strong> um circuito integrado<br />

Wafer 8”<br />

564 processadores<br />

MIPS64 R20K<br />

processo: 0.18µm


Distribuição do custo em um<br />

sistema <strong>de</strong> computação<br />

Gabinete: 6%<br />

folha metálica, plástico: 2%<br />

fonte <strong>de</strong> alimentação, ventoinhas: 2%<br />

cabos, porcas, parafusos: 1%<br />

caixa <strong>de</strong> transporte, manuais: 1%<br />

Placa do processador: 37%<br />

processador: 22%<br />

DRAM (128MB): 5%<br />

Placa <strong>de</strong> ví<strong>de</strong>o: 5%<br />

Placa-mãe (E/S e re<strong>de</strong> on-board): 5%<br />

:Dispositivos <strong>de</strong> E/S: 37%<br />

teclado e mouse: 3%<br />

monitor: 19%<br />

disco rígido: 9%<br />

unida<strong>de</strong> <strong>de</strong> DVD: 6%<br />

SO + pacote office básico: 20%<br />

Fonte: H&P, 2003


Custo X preço


Desempenho <strong>de</strong> Sistemas <strong>de</strong><br />

Computação


Métricas...<br />

tempo <strong>de</strong> resposta: sistema<br />

<strong>de</strong>dicado<br />

throughput: sistema compartilhado<br />

Medida mais confiável: tempo gasto<br />

na execução <strong>de</strong> programas reais<br />

Tempo <strong>de</strong> execuçãoY = n => Computador X é n vezes mais<br />

Tempo <strong>de</strong> execuçãoX rápido que Y


Métricas: tempo<br />

Inclui:<br />

acessos a disco<br />

acessos à memória<br />

ativida<strong>de</strong>s <strong>de</strong> entrada / saída<br />

tempo <strong>de</strong> escalonamento<br />

tempo <strong>de</strong> CPU<br />

tempo <strong>de</strong> usuário<br />

tempo <strong>de</strong> sistema: overhead do SO<br />

ex.: Unix time utility:<br />

TUser TSys Latency %Utiliz.<br />

90,7µs 12,9µs 2:39 65%


Métodos para medição <strong>de</strong><br />

<strong>de</strong>sempenho<br />

Aplicações reais<br />

Ex.: Word, Photoshop<br />

Aplicações modificadas<br />

scripts para simular interação, remoção <strong>de</strong> E/S<br />

Kernels<br />

fragmentos <strong>de</strong> uma aplicação ou programa real, usados<br />

para isolar o <strong>de</strong>sempenho <strong>de</strong> características individuais<br />

da máquina<br />

Benchmarks <strong>de</strong> brinquedo<br />

exs.: quicksort, quebra-cabeças<br />

Benchmarks sintéticos<br />

código “artificial”, correspon<strong>de</strong> a um perfil médio <strong>de</strong><br />

execução


Benchmarks mais conhecidos:<br />

<strong>de</strong>sktop<br />

SPEC (Standard Performance Evaluation<br />

Corporation)<br />

CPU: SPEC CPU2000, SPEC CPU 2004(?)<br />

Gráficos:<br />

SPECviewperf: OpenGL<br />

SPECapc: problemas específicos <strong>de</strong> mo<strong>de</strong>lagem <strong>de</strong><br />

sólidos e CAD 3D<br />

Processamento <strong>de</strong> alto <strong>de</strong>sempenho<br />

Java<br />

Servidores (e-mail, arquivos, Web)<br />

www.spec.org


Benchmarks mais conhecidos:<br />

servidores<br />

SPEC:<br />

SPECrate – throughput <strong>de</strong> processamento<br />

SPECFS – servidor <strong>de</strong> arquivos<br />

SPECWeb – servidores Web<br />

Consi<strong>de</strong>ram as especificida<strong>de</strong>s da arquitetura <strong>de</strong><br />

servidores (E/S eficiente, multiprocessamento)<br />

Processamento <strong>de</strong> transações<br />

TPC (Transaction Processing Council)<br />

processamento <strong>de</strong> consultas em BDs, sistemas <strong>de</strong><br />

apoio a <strong>de</strong>cisão, transações baseadas na Web<br />

www.tpc.org


Benchmarks mais conhecidos:<br />

sistemas embutidos<br />

Dificulda<strong>de</strong> em se ter um único benchmark<br />

<strong>de</strong> uso amplo<br />

EEMBC (EDN Embed<strong>de</strong>d Microprocessor<br />

Benchmark Consortium) – 5 classes:<br />

automotiva / industrial<br />

eletrônica <strong>de</strong> consumo<br />

re<strong>de</strong><br />

automação <strong>de</strong> escritório<br />

telecomunicações


Princípios <strong>de</strong> projeto...<br />

Tornar rápido o caso comum<br />

gastar mais tempo otimizando as partes do<br />

sistema que são usadas com mais<br />

freqüência<br />

Lei <strong>de</strong> Amdahl:<br />

melhorias <strong>de</strong> <strong>de</strong>sempenho <strong>de</strong> partes <strong>de</strong> um<br />

sistema são diluídas no cálculo da melhoria<br />

incremental do sistema completo<br />

Tempo <strong>de</strong> execução novo = Tempo <strong>de</strong> execução antigo X (1-Fração aperfeiçoada) +<br />

Fração aperfeiçoada<br />

Aceleração aperfeiçoada


A lei <strong>de</strong> Amdahl: Exemplo<br />

Suponha que um programa gaste 100s para<br />

executar em uma certa máquina, com<br />

operações <strong>de</strong> multiplicação respon<strong>de</strong>ndo por<br />

80s do total. Por quanto <strong>de</strong>vemos melhorar a<br />

velocida<strong>de</strong> <strong>de</strong> operações <strong>de</strong> multiplicação se<br />

quisermos que o programa execute 4 vezes<br />

mais rápido?<br />

E para executar 5 vezes mais rápido?<br />

Tempo <strong>de</strong> execução novo = Tempo <strong>de</strong> execução antigo X (1-Fração aperfeiçoada) +<br />

Fração aperfeiçoada<br />

Aceleração aperfeiçoada


Princípios <strong>de</strong> projeto<br />

Melhorar a equação <strong>de</strong> <strong>de</strong>sempenho da<br />

CPU:<br />

Instruções Ciclos <strong>de</strong> clock Segundos<br />

X X = Tempo <strong>de</strong> CPU(seg/progr.)<br />

Programa Instrução Ciclo <strong>de</strong> clock<br />

Dependências<br />

tempo <strong>de</strong> ciclo <strong>de</strong> clock: tecnologia <strong>de</strong><br />

hardware e organização<br />

CPI (ciclos por instrução): organização e<br />

arquitetura do conjunto <strong>de</strong> instruções<br />

Contagem <strong>de</strong> instruções (por programa):<br />

arquitetura do conjunto <strong>de</strong> instruções e<br />

tecnologia <strong>de</strong> compiladores


Ciclos <strong>de</strong> clock<br />

Relatar o <strong>de</strong>sempenho em termos do número <strong>de</strong> ciclos gastos ao<br />

invés <strong>de</strong> tempo:<br />

segundos ciclos segundos<br />

= X<br />

programa programa ciclo<br />

“Tics” <strong>de</strong> clock indicam quando iniciar alguma ativida<strong>de</strong><br />

Tempo <strong>de</strong> ciclo = tempo entre ticks = segundos por ciclo<br />

Taxa <strong>de</strong> clock (freqüência) = ciclos por segundo<br />

(1Hz = 1 ciclo/segundo)<br />

Ex.: processador <strong>de</strong> 2.4GHz tem um tempo <strong>de</strong> ciclo <strong>de</strong>:<br />

1<br />

2.4 x 10 9<br />

time<br />

= 0,42 x 10 9 s = 0,42ns


Formas <strong>de</strong> melhorar a<br />

eficiência<br />

segundos ciclos segundos<br />

= X<br />

programa programa ciclo<br />

Reduzir o número <strong>de</strong> ciclos por programa<br />

otimizações feitas pelo compilador<br />

conjunto <strong>de</strong> instruções otimizado<br />

Reduzir o tempo <strong>de</strong> clock (i.e., aumentar a<br />

freqüência)<br />

tecnologia <strong>de</strong> hardware<br />

organização da máquina


Número <strong>de</strong> ciclos gastos em<br />

um programa<br />

Po<strong>de</strong>ria assumir que o número <strong>de</strong> ciclos é igual ao número <strong>de</strong><br />

instruções do programa:<br />

Mas:<br />

1st instruction<br />

2nd instruction<br />

3rd instruction<br />

4th<br />

5th<br />

6th<br />

...<br />

algumas instruções são mais complexas do que outras, gastando mais<br />

tempo<br />

instruções diferentes gastam tempos diferentes em máquinas diferentes


Diferentes números <strong>de</strong> ciclos<br />

para diferentes instruções<br />

Multiplicação gasta mais tempo do que<br />

adição<br />

Operações <strong>de</strong> ponto flutuante gastam mais<br />

tempo que operações <strong>de</strong> inteiros<br />

Acesso à memória toma mais tempo do que<br />

acesso a registradores


Exercício: tempo <strong>de</strong> clock<br />

“Our favorite program runs in 10 seconds on computer A,<br />

which has a 400 Mhz. clock. We are trying to help a<br />

computer <strong>de</strong>signer build a new machine B, that will run<br />

this program in 6 seconds. The <strong>de</strong>signer can use new (or<br />

perhaps more expensive) technology to substantially<br />

increase the clock rate, but has informed us that this<br />

increase will affect the rest of the CPU <strong>de</strong>sign, causing<br />

machine B to require 1.2 times as many clock cycles as<br />

machine A for the same program. What clock rate<br />

should we tell the <strong>de</strong>signer to target?”


SPECint<br />

10<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

Tempo <strong>de</strong> clock e <strong>de</strong>sempenho<br />

Dobrar a freqüência <strong>de</strong> clock dobra o <strong>de</strong>sempenho?<br />

Po<strong>de</strong> uma máquina com clock mais lento ter um <strong>de</strong>sempenho melhor?<br />

50<br />

100<br />

150<br />

Clock rate (MHz)<br />

200 250<br />

Pentium<br />

Pentium Pro<br />

SPECfp<br />

10<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

50<br />

100<br />

Clock rate (MHz)<br />

150<br />

200 250<br />

Pentium<br />

Pentium Pro


Exercício: CPI<br />

Suponha que temos duas máquinas implementando a<br />

mesma arquitetura <strong>de</strong> conjunto <strong>de</strong> instruções<br />

Para um certo programa:<br />

a máquina A tem um período <strong>de</strong> clock <strong>de</strong> 10ns e uma CPI = 2,0<br />

a máquina B tem um período <strong>de</strong> clock <strong>de</strong> 20ns e uma CPI = 1,2<br />

Qual das duas máquinas é mais rápida para este<br />

programa? Qual a diferença entre elas?<br />

Se duas máquinas têm a mesma ISA, qual das seguintes<br />

quantida<strong>de</strong>s é sempre idêntica?<br />

freqüência <strong>de</strong> clock, CPI, tempo <strong>de</strong> execução, número <strong>de</strong> instruções por<br />

programa, MIPS


Exemplo: Número <strong>de</strong><br />

instruções por programa<br />

Um projetista <strong>de</strong> compilador está tentando se <strong>de</strong>cidir<br />

entre duas seqüências <strong>de</strong> código para uma máquina<br />

particular.<br />

Baseado na implementação <strong>de</strong> hardware, há três classes<br />

distintas <strong>de</strong> instruções: Classe A, Classe B e Classe C,<br />

que requerem respectivamente um, dois e três ciclos <strong>de</strong><br />

clock.<br />

A primeira seqüência tem 5 instruções: 2 <strong>de</strong> A, 1 <strong>de</strong> B e 2 <strong>de</strong> C<br />

A segunda seqüência tem 6 instruções: 4 <strong>de</strong> A, 1 <strong>de</strong> B e 1 <strong>de</strong> C<br />

Qual seqüência será mais rápida? Qual a diferença?<br />

Qual é a CPI para cada seqüência?


MIPS<br />

Milhões <strong>de</strong> instruções por segundo<br />

mais alto para programas que usam<br />

instruções simples


Exemplo: MIPS<br />

Dois compiladores diferentes estão sendo testados para uma<br />

máquina <strong>de</strong> 100MHz com três classes diferentes <strong>de</strong> instruções:<br />

Classe A, Classe B, e Classe C, que requerem 1, 2 e 3 ciclos <strong>de</strong><br />

relógio respectivamente. Ambos os compiladores são usados para<br />

produzir código para um programa em gran<strong>de</strong> escala.<br />

O código do primeiro compilador usa 2 milhões <strong>de</strong> instruções<br />

Classe A, 1 milhão <strong>de</strong> instruções Classe B, e 2 milhões <strong>de</strong><br />

instruções Classe C.<br />

O código do segundo compilador usa 4 milhões <strong>de</strong> instruções<br />

Classe A, 1 milhão <strong>de</strong> instruções Classe B e 1 milhão <strong>de</strong><br />

instruções classe C.<br />

Qual seqüência será mais rápida <strong>de</strong> acordo com MIPS?<br />

Qual seqüência será mais rápida <strong>de</strong> acordo com o tempo <strong>de</strong> exec.?


Resumindo<br />

Desempenho é específico para cada programa<br />

o tempo <strong>de</strong> execução total é a medida <strong>de</strong> <strong>de</strong>sempenho consistente<br />

Para uma dada arquitetura, melhorias <strong>de</strong> <strong>de</strong>sempenho<br />

resultam <strong>de</strong>:<br />

melhoria na freqüência <strong>de</strong> relógio<br />

melhorias na arquitetura e na organização do processador para<br />

reduzir a contagem <strong>de</strong> CPI<br />

melhorias nos compiladores para reduzir tanto a CPI quanto a<br />

contagem <strong>de</strong> instruções/programa<br />

Armadilha: esperar que melhorias no <strong>de</strong>sempenho <strong>de</strong> um<br />

aspecto da máquina vão afetar seu <strong>de</strong>sempenho global na<br />

mesma proporção


Outros princípios <strong>de</strong> projeto<br />

visando <strong>de</strong>sempenho<br />

Explorar o “princípio da localida<strong>de</strong>”<br />

Explorar as oportunida<strong>de</strong>s <strong>de</strong><br />

paralelismo<br />

Empregar técnicas <strong>de</strong> otimização no<br />

compilador


Bibliografia<br />

Hennessy & Patterson<br />

Cap. 1: Fundamentos do<br />

Projeto <strong>de</strong> <strong>Computadores</strong><br />

Patterson & Hennessy<br />

Cap. 2: O Papel da Performance

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!