Arquitetura de Computadores - Instituto de Informática - UFG
Arquitetura de Computadores - Instituto de Informática - UFG
Arquitetura de Computadores - Instituto de Informática - UFG
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