Introdução

Propaganda
Capítulo 1
Introdução
1.1 OBJETIVO DESTE LIVRO
O objetivo deste livro é ser utilizado como um texto de acompanhamento para cursos introdutórios sobre arquitetura de computadores, em nível de graduação ou em cursos de pós-graduação. O seu público principal são estudantes de cursos com disciplinas de arquitetura de computadores que estejam interessados em explicações adicionais,
problemas práticos e exemplos a serem utilizados para melhorar a sua compreensão do material, ou na preparação
de exercícios.
1.2 CONHECIMENTOS PRESUMIDOS
Este livro presume que o leitor tenha conhecimentos equivalentes àqueles de alunos de segundo ou terceiro ano de
Engenharia Elétrica, ou de programas de Ciência da Computação que ainda não tenham tido uma disciplina sobre
organização ou arquitetura de computadores. Presume-se uma familiaridade básica com a operação de computadores e sua terminologia, assim como alguma familiaridade com programação em linguagens de alto nível.
1.3 ESCOPO
Este livro cobre uma gama de tópicos ligeiramente mais ampla que a maioria das disciplinas sobre arquitetura de
computadores, com um semestre de duração, a fim de aumentar a sua utilidade. Os leitores descobrirão que o material adicional é útil como uma revisão ou como uma introdução para tópicos mais avançados. O livro começa com
uma discussão sobre representação de dados e aritmética de computadores, seguida por capítulos sobre a organização de computadores e os modelos de programação. Três capítulos são dedicados à discussão de projeto de processadores, incluindo pipelining e paralelismo ao nível da instrução. Estes são seguidos por três capítulos sobre sistemas de memória, incluindo memória virtual e caches. Os dois últimos capítulos discutem E/S e fornecem uma introdução aos multiprocessadores.
12
ARQUITETURA DE COMPUTADORES
1.4 OBJETIVOS DO CAPÍTULO
A meta deste capítulo é preparar o leitor para os conteúdos apresentados em capítulos posteriores, ao discutir as tecnologias básicas que determinam o desempenho de computadores e as técnicas utilizadas para medir e discutir o
desempenho. Após ler este capítulo e completar os exercícios, o estudante deverá:
1.
2.
3.
Compreender e ser capaz de discutir as taxas históricas do aperfeiçoamento da densidade de transistores,
do desempenho de circuitos e do desempenho geral de sistemas.
Compreender métodos comuns para avaliar o desempenho de computadores.
Ser capaz de calcular como as modificações em uma parte de um sistema de computadores afetam o desempenho geral.
1.5 TENDÊNCIAS TECNOLÓGICAS
Desde o início da década de 1980, o desempenho dos computadores tem sido impulsionado por aperfeiçoamentos
nas capacidades dos circuitos integrados utilizados para implementar microprocessadores, nos chips de memória e
em outros componentes de computadores. Ao longo do tempo, os circuitos integrados foram aperfeiçoados em densidade (quantos transistores e ligações podem ser colocados em uma área fixa em um chip de silício), velocidade
(a rapidez com que as portas lógicas básicas e dispositivos de memória operam) e a área (o tamanho físico do maior
circuito integrado que pode ser fabricado).
O impressionante crescimento do desempenho de computadores ao longo das últimas duas décadas foi impulsionado pelo fato de que a velocidade e a densidade dos chips foram aperfeiçoados geometricamente, em vez de linearmente. Isto significa que uma melhoria no desempenho de um ano com relação ao seguinte tem sido uma parcela relativamente constante do desempenho do ano anterior, em vez de um valor absoluto constante. Em média, o
número de transistores que podem ser produzidos sobre um chip de silício aumentou cerca de 50% ao ano, e a velocidade dos transistores aumentou tanto que o atraso de uma porta lógica básica (E, OU, etc.) diminuiu 13% ao
ano. A observação de que o desempenho dos computadores melhora geometrica e não linearmente é freqüentemente citada como a Lei de Moore.
Exemplo A quantidade de dados que pode ser armazenada em um chip de memória RAM dinâmica (DRAM)
quadruplicou a cada três anos desde o final da década de 1970, em uma taxa de crescimento anual de 60%.
Do final da década de 1970 até o final da década de 1980, o desempenho dos microprocessadores foi impulsionado principalmente pelos aperfeiçoamentos na tecnologia de fabricação e foi melhorado a uma taxa de 35% ao
ano. Desde então, a taxa de aperfeiçoamento efetivamente cresceu para mais de 50% ao ano, embora a taxa do progresso na fabricação de semicondutores tenha permanecida relativamente constante. O aumento na taxa de desempenho tem sido devido a melhorias na arquitetura e na organização de computadores – os projetistas de computadores têm sido capazes de tirar proveito da crescente densidade dos circuitos integrados para acrescentar recursos
aos microprocessadores e aos sistemas de memória, os quais proporcionam um desempenho acima do aumento da
velocidade dos transistores que os implementam.
1.6 MEDINDO O DESEMPENHO
Neste capítulo, já discutimos como o desempenho dos computadores melhorou ao longo do tempo, mas sem dar
uma definição formal do que é desempenho. Isso se deve, em parte, ao fato de o termo desempenho ser muito vago
quando utilizado no contexto de sistemas de computadores. Geralmente, o desempenho descreve a rapidez com a
qual um determinado sistema pode executar um programa ou programas. Sistemas que executam programas em
menos tempo são ditos de melhor desempenho.
A melhor medida para o desempenho de um computador é o tempo de execução de um programa, ou programas, que o usuário deseja executar. Mas geralmente é impraticável testar todos os programas que serão executados
em um dado sistema antes de decidir qual computador comprar, ou quando se toma decisões de projeto. Assim, os
projetistas de computadores produziram um certo número de unidades para descrever o desempenho de computadores, algumas das quais serão discutidas neste capítulo. Os projetistas também imaginaram uma certa quantidade
de unidades para o desempenho de subsistemas individuais dos computadores, as quais serão discutidas nos capítulos que tratam desse assunto.
CAPÍTULO 1 • INTRODUÇÃO
13
Tenha em mente que, além do desempenho, muitos fatores podem influenciar decisões de projeto ou de compra. Facilidade de programação é uma preocupação importante, pois o tempo e os gastos necessários para desenvolver programas que sejam úteis podem ser mais significativos do que a diferença nos tempos de execução dos
mesmos, uma vez que eles tenham sido desenvolvidos. A questão da compatibilidade também é importante; a maioria dos programas é vendida como imagens binárias que somente poderão ser executadas em uma família de processadores em particular. Se o programa que você precisa não é executável em um dado sistema, não importa a rapidez com que o sistema execute outros programas.
MIPS
Uma medida antiga do desempenho de computadores é a taxa pela qual a máquina executa instruções. Isto é calculado dividindo-se o número de instruções executadas em um programa pelo tempo necessário para executá-lo, e é
tipicamente expresso em milhões de instruções por segundo (MIPS). Essa medida caiu em desuso porque não leva
em conta o fato de que diferentes sistemas freqüentemente precisam de números diferentes de instruções para implementar um dado programa. A taxa de MIPS de um computador nada diz a respeito de quantas instruções são necessárias para executar uma dada tarefa, tornando-a menos útil do que outras unidades para comparar o desempenho de diferentes sistemas.
CPI/IPC
Outra unidade utilizada para descrever o desempenho de computadores é o número de ciclos de relógio necessário
para executar cada instrução, conhecido como ciclos por instrução, ou CPI. O CPI de um programa, em um sistema, é calculado dividindo-se o número de ciclos de relógio necessários para executar o programa pelo número de
instruções executadas. Para sistemas que podem executar mais de uma instrução por ciclo, o número de instruções
executadas por ciclo, ou IPC, é freqüentemente utilizada, em vez do CPI. O IPC é calculado dividindo-se o número de instruções executadas, ao se executar um programa, pelo número de ciclos de relógio necessários para executar o programa, e é o recíproco do CPI. Essas duas unidades fornecem a mesma informação e a escolha de qual usar
geralmente é baseada em qual dos valores é maior do que o número 1. Quando se utiliza o IPC e o CPI para comparar sistemas, é importante lembrar que valores altos de IPC indicam que o programa de referência demorou menos ciclos para ser executado do que valores baixos de IPC, enquanto que valores altos de CPI indicam que foram
necessários mais ciclos do que valores baixos de CPI. Assim, um IPC alto tende a indicar bom desempenho, um
CPI alto indica um desempenho fraco.
Exemplo Um dado programa consiste de um laço de 100 instruções que é executado 42 vezes. Se demora
16.000 ciclos para executar o programa em um dado sistema, quais são os valores de CPI e de IPC do sistema para este programa?
Solução
O laço de 100 instruções é executado 42 vezes, de modo que o número total de instruções executadas é 100 × 42 =
4200. Demora 16.000 ciclos para executar o programa, de modo que o CPI é 16.000/4200 = 3,81. Para calcular o IPC,
dividimos 4200 instruções por 16.000 ciclos, obtendo um IPC de 0,26.
Em geral, o IPC e o CPI são medidas ainda menos úteis do desempenho de sistemas atuais do que o MIPS, porque eles não contêm qualquer informação a respeito da freqüência do relógio do sistema ou de quantas instruções
o sistema exige para executar uma tarefa. Se você conhece a taxa de MIPS de um sistema em um programa, você
pode multiplicá-la pelo número de instruções executadas nele para determinar quanto tempo demorou para ser completado. Se você conhece o CPI de um sistema em um dado programa, você pode multiplicá-lo pelo número de instruções para obter o número de ciclos que demorou para completar o programa, mas você tem que saber o número
de ciclos por segundo (a freqüência de relógio do sistema) para converter isto na quantidade de tempo necessário
para executar o programa.
Como resultado, o CPI e o IPC raramente são utilizados para comparar sistemas de computadores atuais. No
entanto, são unidades muito comuns na pesquisa de arquitetura de computadores, porque a maior parte desse tipo
de pesquisa é feita utilizando programas que simulam uma arquitetura em especial, para estimar quantos ciclos um
dado programa irá utilizar para ser executado naquela arquitetura. Esses simuladores geralmente são incapazes de
prever o ciclo de tempo dos sistemas que eles simulam, de modo que o CPI/IPC é a melhor estimativa de desempenho disponível.
14
ARQUITETURA DE COMPUTADORES
Conjuntos de Benchmark
Como discutimos, tanto o MIPS quanto o CPI/IPC têm limitações significativas como medidas de desempenho de
computadores. Conjuntos de benchmark (medição de desempenho) são uma terceira medida de desempenho de
computadores e foram desenvolvidas para resolver as limitações do MIPS e do CPI/IPC.
Um conjunto de benchmark consiste de uma série de programas que acredita-se ser o correspondente típico de
programas que serão executados no sistema. A pontuação de um sistema no conjunto de benchmark é baseada em
quanto tempo o sistema demora para executar todos os programas que o compõem. Existem muitos conjuntos de
benchmark diferentes, que geram estimativas do desempenho de um sistema com diferentes tipos de aplicações.
Um dos conjuntos de benchmark mais conhecidos é a suíte SPEC, produzida pela Standard Performance Evaluation Corporation. Sua versão atual, por ocasião da publicação deste livro, é a “SPEC CPU2000 benchmark”, a
terceira principal revisão desde que o conjunto de benchmark SPEC foi publicado em 1989.
Os conjuntos de benchmark fornecem várias vantagens sobre MIPS e CPI/IPC. Primeiro, os seus resultados de
desempenho são baseados em tempos totais de execução, não na taxa de execução de instruções. Segundo, elas fazem uma média do desempenho do sistema por vários programas, de modo a gerar uma estimativa da sua velocidade média. Isto torna a avaliação geral do sistema em um conjunto de benchmark um indicador melhor do seu desempenho geral do que é a avaliação MIPS em qualquer programa isolado. Além disto, muitos benchmarks exigem
que os fabricantes publiquem os resultados dos seus sistemas com programas individuais do benchmark, bem como a pontuação geral do sistema no conjunto de benchmark, tornando possível fazer uma comparação direta de resultados individuais do benchmark, se você sabe que um sistema será utilizado para uma aplicação em especial.
Média Geométrica versus Média Aritmética
Muitos conjuntos de benchmark utilizam a média geométrica, em vez da média aritmética, para fazer a média dos
resultados dos programas contidos no conjunto de benchmark porque um único valor extremo tem um impacto menor sobre a média geométrica de uma série do que sobre a média aritmética. Utilizar a média geométrica torna mais
difícil para um sistema atingir uma pontuação alta no benchmark, ao atingir um bom desempenho em apenas um
dos programas do conjunto, fazendo com que a pontuação geral do sistema seja um indicador melhor do seu desempenho com a maioria dos programas.
A média geométrica de n valores é calculada multiplicando-se os n valores e tirando-se a raiz enésima do produto. A média aritmética, ou média de um conjunto de valores, é calculada somando-se todos os valores e dividindo-se o resultado pelo número de valores.
Exemplo
Quais são as médias aritmética e geométrica dos valores 4, 2, 4, 82?
Solução
A média aritmética desta série é
4 þ 2 þ 4 þ 82
¼ 23
4
A média geométrica é
p
ffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffiffi
4
4 2 4 82 ¼ 7,16
extreme
Note que a inclusão de um valorclusion
extremoofnaone
série
teve umvalue
efeitoinmuito maior sobre a média aritmética do que sobre a média geométrica.
1.7 ACELERAÇÃO
Freqüentemente, os projetistas de computadores utilizam o termo aceleração para descrever como o desempenho
de uma arquitetura muda à medida que diferentes melhoramentos são feitos naquela arquitetura. A aceleração é
simplesmente a razão entre os tempos de execução antes e depois que a mudança é feita, de modo que:
Aceleração ¼
Tempo de execução antes
Tempo de execuçãodepois
ple, if a program takes 25 seconds to run o
CAPÍTULO 1 • INTRODUÇÃO
15
Por exemplo, se um programa demora 25 segundos para ser executado em uma versão de uma arquitetura e 15
segundos para ser executado em uma nova versão, a aceleração geral é de 25 segundos/15 segundos = 1,67.
1.8 A LEI DE AMDAHL
A regra mais importante para projetar sistemas de computadores de alto desempenho é faça com que o mais comum seja rápido. Qualitativamente, isto significa que o impacto de um dado aperfeiçoamento sobre o desempenho geral depende tanto de quanto o aperfeiçoamento melhora o desempenho quando ele é utilizado, como de
com que freqüência esse aperfeiçoamento é utilizado. Quantitativamente, esta regra foi expressa pela Lei de Amdahl, que define which states
Parcela usada
Tempo de execução novo ¼ Tempo de execução antigo Parcela não_usada þ
Aceleração usada
In this equation, Frac
is the fraction of time (not instructions) that the
Na equação, Parcelanão_usada é a parcela de tempo (não instruções) na qual o aperfeiçoamento não está em uso,
Parcelausada é a parcela de tempo na qual o aperfeiçoamento está em uso e Aceleraçãousada é a aceleração que acontece quando o aperfeiçoamento é usado (isto seria a aceleração geral se o aperfeiçoamento fosse utilizado o tempo
todo). Note que Parcelanão_usada e Parcelausada são calculados utilizando o tempo de execução antes que as modificações sejam aplicadas. Calcular estes valores utilizando o tempo de execução depois que a modificação fosse aplicada daria resultados incorretos.
A Lei de Amdahl pode ser reescrita utilizando a definição de aceleração para dar
Aceleração ¼
Tempo de execução antigo
¼
Tempo de execuçãonovo
1
Parcela não_usada þ
Parcelausada
Aceleração usada
Exemplo Suponha que uma dada arquitetura não tenha suporte de hardware para multiplicações, de modo que as
multiplicações tenham que ser feitas por meio de adições repetidas (este é o caso de alguns dos primeiros microprocessadores). Se demora 200 ciclos para executar uma multiplicação por software e quatro ciclos para executar a multiplicação por hardware, qual é a aceleração geral produzida pelo hardware para suporte de multiplicações, se um
programa gasta 10% do seu tempo fazendo multiplicações? E com um programa que gasta 40% do seu tempo fazendo multiplicações?
Solução
Em ambos os casos, quando é utilizado hardware para multiplicações a aceleração é 200/4 = 50 (razão entre o tempo
para fazer uma multiplicação sem e com o hardware). No caso em que o programa gasta 10% do seu tempo fazendo
multiplicações, Parcelanão_usada = 0,9 e Parcelausada = 0,1. Colocando estes valores na Lei de Amdahl, temos: Aceleração
= 1/[0,9 + (0,1/50)] = 1,11. Se o programa gasta 40% do seu tempo fazendo multiplicações, antes que o hardware para
multiplicações seja acrescentado, então Parcelanão_usada = 0,6 e Parcelausada = 0,4 e obtemos Aceleração = 1/[0,6 + (0,4/50)]
= 1,64.
Este exemplo ilustra o impacto sobre o desempenho geral que tem a parcela de tempo na qual um aperfeiçoamento é utilizado. À medida que a Aceleraçãousada vai para o infinito, a aceleração geral converge para 1/Parcelanão_usada, porque o aperfeiçoamento nada pode fazer a respeito do tempo de execução da parcela do programa
que não utiliza o aperfeiçoamento.
1.9 RESUMO
Este capítulo teve por objetivo fornecer um contexto para o resto do livro, ao explicar algumas das forças tecnológicas que impulsionam o desempenho de computadores, e fornecer um arcabouço para a discussão e avaliação do
desempenho de sistemas, que será utilizado por todo o livro.
Os conceitos importantes que o leitor deve entender, após ter estudado este capítulo, são:
16
ARQUITETURA DE COMPUTADORES
1.
2.
3.
4.
A tecnologia de computadores é impulsionada por aperfeiçoamentos na tecnologia de fabricação de semicondutores, e estes aperfeiçoamentos progridem geometrica e não linearmente.
Há muitos modos de medir o desempenho de computadores, e as medidas mais efetivas do desempenho
geral são baseadas no desempenho de um sistema com uma ampla variedade de aplicações.
É importante compreender como uma dada unidade de desempenho é gerada, de modo a entender qual é a
sua utilidade para prever o desempenho de um sistema, em uma determinada aplicação.
O impacto que uma mudança em uma arquitetura tem sobre o desempenho geral depende não apenas de
quanto esta mudança melhora o desempenho quando ela é utilizada, mas com qual freqüência esta modificação é útil. A conseqüência disto é que o impacto de um aperfeiçoamento sobre o desempenho geral é
limitado pela parcela de tempo que o aperfeiçoamento não está em uso, independentemente de quanta aceleração este aperfeiçoamento traz quando ele é utilizado.
Problemas Resolvidos
Tendências Tecnológicas (I)
1.1 Para ilustrar a rapidez com que a tecnologia de computadores está sendo aperfeiçoada, vamos considerar o que teria acontecido se tivesse acontecido o mesmo com os automóveis. Assuma que o carro médio, em 1977, tinha uma
velocidade máxima de 160 quilômetros por hora e que o consumo médio de combustível era de 6,4 km por litro
(km/l). Se tanto a velocidade máxima como a eficiência fossem aperfeiçoadas a uma taxa de 35% ao ano, de 1977
a 1987, e a 50% ao ano, de 1987 a 2000, acompanhando o desempenho dos computadores, qual seria a velocidade
máxima e o consumo de combustível de um carro em 1987? E em 2000?
Solução
Em 1987:
O período que vai de 1977 a 1987 é de 10 anos; assim, ambas as características teriam sido aperfeiçoadas por um fa10
tor de (1,35) = 20,1, dando uma velocidade máxima de 3216 km/h e um consumo de combustível de 128,6 km/l.
Em 2000:
13
Um período de mais 13 anos, desta vez a uma taxa de aperfeiçoamento de 50% ao ano, para um fator total de (1,5) =
194,6 sobre os valores de 1987. Isto dá uma velocidade máxima de 625.833,6 km/h e um consumo de combustível de
25.025,6 km/l. Isto é rápido o suficiente para cobrir a distância entre a Terra e a Lua em menos de 40 minutos e fazer
a viagem de ida e volta com menos de 40 litros de gasolina.
Tendências Tecnológicas (II)
1.2 Desde 1987, o desempenho dos computadores tem aumentado a uma taxa de aproximadamente 50% ao ano, com
as melhorias na tecnologia de fabricação respondendo por cerca de 35% ao ano e os aperfeiçoamentos na arquitetura por, aproximadamente, 15% ao ano.
1. Se o desempenho do melhor computador disponível em 1/1/1988 fosse definido como sendo 1, qual seria o desempenho esperado do melhor computador disponível em 1/1/2001?
2. Suponha que não tivesse havido aperfeiçoamentos na arquitetura dos computadores desde 1987, fazendo com
que a tecnologia de fabricação fosse a única fonte de melhorias no desempenho. Qual seria o desempenho esperado do melhor computador disponível em 1/1/2001?
3. Agora, suponha que não tivesse havido aperfeiçoamentos na tecnologia de fabricação, tornando as melhorias na
arquitetura a única fonte de melhoras no desempenho. Qual seria o desempenho esperado do computador mais rápido em 1/1/2001?
Solução
1. O desempenho melhora a 50% ao ano e de 1/1/1988 até 1/1/2000 são 13 anos, de modo que o desempenho esperado da máquina de 1/1/2001 é 1 × (1,5)13 = 194,6.
2. Aqui, o desempenho melhora apenas 35% ao ano, de modo que o desempenho esperado é 49,5.
3. A melhora no desempenho é de 15% ao ano, dando um desempenho esperado de 6,2.
CAPÍTULO 1 • INTRODUÇÃO
17
Aceleração (I)
1.3 Se a versão de 1998 de um computador executa um programa em 200 s e a versão fabricada no ano 2000 executa o
mesmo programa em 150 s, qual é a aceleração que o fabricante obteve ao longo de um período de dois anos?
Solução
Aceleração ¼
Tempo de execução antes
Tempo de execuçãodepois
r éexample,
if a sprogram
takes 25 seconds
to runestá
on bem
one abaixo
v
Assim, a aceleração
de 200 s/150
= 1,33. Claramente,
este fabricante
da taxa de crescimento de
desempenho da indústria em geral.
Aceleração (II)
1.4 Para atingir uma aceleração de 3 em um programa que originalmente demorava 78 s para ser executado, para quanto deve ser reduzido o tempo de execução do programa?
Solução
Aqui, temos os valores para a Aceleração e o Tempo de execuçãoantes. Substituindo estes valores na fórmula para a aceleração e resolvendo para o Tempo de execuçãodepois, temos que o tempo de execução precisa ser reduzido para 26 s, de
modo a atingir uma aceleração de 3.
Medindo o Desempenho (I)
1.5 1. Quais são os programas e os conjuntos de benchmark utilizados para medir o desempenho de computadores?
2. Por que existem vários benchmarks que são utilizados pelas arquiteturas de computadores, ao invés de um
benchmark “melhor”?
Solução
1. Sistemas de computadores são utilizados para executar uma ampla variedade de programas, alguns dos quais podem não existir por ocasião da compra ou construção do sistema. Assim, geralmente não é possível medir o desempenho de um sistema sobre um conjunto de programas que será executado na máquina. Ao invés disto, programas e conjuntos de benchmark são utilizados para medir o desempenho de um sistema com uma ou mais aplicações que acredita-se serem representativas do conjunto de programas que será executado na máquina.
2. Existem vários programas/conjuntos de benchmark porque os computadores são utilizados para uma ampla variedade de aplicações, cujo desempenho pode depender de muitos aspectos diferentes do sistema de computador. Por
exemplo, o desempenho de aplicações de banco de dados e processamento de transações tende a depender fortemente do desempenho do subsistema de E/S do computador. Em contraste, aplicações para cálculos científicos dependem
principalmente do desempenho do processador e do sistema de memória do sistema. Da mesma forma que as aplicações, os conjuntos de benchmark variam em termos da quantidade de esforço que elas colocam sobre cada subsistema
do computador e é importante utilizar um benchmark que exija esforços dos mesmos subsistemas que as aplicações
pretendidas. Utilizar um benchmark exigente quanto ao processador a fim de avaliar computadores com relação ao
processamento de transações não daria uma boa estimativa da taxa pela qual esses sistemas poderiam processar transações, pois o fator limitante é o subsistema de E/S.
Medindo o Desempenho (II)
1.6 Quando está executando um programa em particular, o computador A atinge 100 MIPS e o computador B atinge 75
MIPS. No entanto, o computador A demora 60 segundos para executar o programa, enquanto que o computador B
demora apenas 45 segundos. Como isto é possível?
Solução
MIPS medem a taxa pela qual um processador executa instruções, mas arquiteturas diferentes de processadores exigem números diferentes de instruções para executar um determinado cálculo. Se, para completar o programa, o computador A tem que executar muito mais instruções do que o computador B, seria possível que o computador A demorasse mais para executar o programa do que o processador B, independentemente do fato de que o computador A executa mais instruções por segundo.
18
ARQUITETURA DE COMPUTADORES
Medindo o Desempenho (III)
1.7 Em um conjunto de benchmark, o computador C obtém uma pontuação de 42 e o computador D, 35 (pontuações
maiores são melhores). Ao executar o seu programa, você descobre que o computador C demora 20% a mais que o
computador D. Como isso é possível?
Solução
A explicação mais provável é que o seu programa seja altamente dependente de algum aspecto do sistema que não está sendo exigido pelo conjunto de benchmark. Por exemplo, ele pode executar um grande número de cálculos de ponto flutuante e o conjunto de benchmark enfatiza o desempenho com inteiros, ou vice-versa.
CPI
1.8 Quando executado em um dado sistema, um programa demora 1.000.000 de ciclos. Se o sistema atinge um CPI de
40, quantas instruções foram executadas no programa?
Solução
CPI = (número de ciclos)/(número de instruções). Portanto, (número de instruções) = (número de ciclos)/CPI.
1.000.000 ciclos/40 CPI = 25.000. Assim, ao executar o programa, 25.000 instruções foram executadas.
IPC
1.9 Qual é o IPC de um programa que executa 35.000 instruções e exige 17.000 ciclos para ser completado?
Solução
IPC = (número de instruções)/(número de ciclos), de modo que o IPC deste programa é de 35.000 instruções/17.000
ciclos = 2,06.
Média Geométrica versus Média Aritmética
1.10 Dado o seguinte conjunto de pontuações de benchmarks individuais para cada um dos programas na parte de inteiros do benchmark SPEC2000, calcule as médias aritmética e geométrica de cada conjunto. Observe que estas pontuações não representam um conjunto real de medições feitas sobre uma máquina. Elas foram selecionadas para ilustrar o impacto que a utilização de métodos diferentes de cálculo da média tem sobre pontuações de benchmark.
Benchmark
Pontuação antes do
aperfeiçoamento
Pontuação depois do
aperfeiçoamento
1.64.gzip
175.vpr
176.gcc
181.mcf
186.crafty
197.parser
252.eon
253.perlbmk
254.gap
255.vortex
256.bzip2
300.twolf
10
14
23
36
9
12
25
18
30
17
7
38
12
16
28
40
12
120
28
21
28
21
10
42
Solução
Existem 12 benchmarks no conjunto, de modo que a média aritmética é calculada somando-se todos os valores em cada conjunto e dividindo o resultado por 12, enquanto que a média geométrica é calculada tirando-se a raiz 12ª do produto de todos os valores em um conjunto. Isto dá os seguintes os valores:
Antes do aperfeiçoamento: média aritmética = 19,92; média geométrica = 17,39
Depois do aperfeiçoamento: média aritmética = 31,5; média geométrica = 24,42
CAPÍTULO 1 • INTRODUÇÃO
19
O que vemos, a partir disto, é que a média aritmética é muito mais sensível a mudanças grandes em um dos valores do
conjunto que a média geométrica. A maioria dos benchmarks individuais vêem mudanças relativamente pequenas à
medida que acrescentamos aperfeiçoamentos à arquitetura, mas o benchmark 197.parser mostra um aperfeiçoamento
com um fator de 10. Isto faz com que a média aritmética aumente em praticamente 60%, enquanto que a média geométrica aumenta apenas 40%. Esta sensibilidade reduzida a valores individuais é o motivo pelo qual os especialistas
preferem a média geométrica para fazer a média dos resultados de vários benchmarks, uma vez que um resultado muito bom ou um resultado muito ruim, em um conjunto de benchmarks, tem menos impacto sobre a pontuação geral.
Lei de Amdahl (I)
1.11 Suponha que, ao executar um dado programa, um computador gaste 90% do seu tempo tratando um tipo especial
de cálculo, e que os seus fabricantes façam uma mudança que melhore o seu desempenho, naquele tipo de cálculo,
por um fator de 10.
1. Se o programa demorava, originalmente, 100 s para ser executado, qual será o seu tempo de execução depois da
modificação?
2. Qual é a aceleração do sistema novo com relação ao antigo?
3. Qual parte do seu tempo de execução o novo sistema gasta executando o tipo de cálculo que foi aperfeiçoado?
Solução
1. Isto é uma aplicação
direta da Lei de Amdahl:
which states
Tempo de execução novo ¼ Tempo de execução antigo Parcela não_usada þ
Parcela usada
Aceleração usada
In this equation, Frac
is the fraction of time (not instructions) that the
Tempo de execuçãoantigo = 100 s, Parcelausada = 0,9, Parcelanão_usada = 0,1 Aceleraçãousada = 10
Isto dá um Tempo de execuçãonovo de 19 s.
2. Utilizando a definição de aceleração, temos uma aceleração de 5,3. Alternativamente, poderíamos substituir os valores da parte 1 na versão de aceleração da Lei de Amdahl e obter o mesmo resultado.
3. A Lei de Amdahl não nos dá um meio direto para responder a esta pergunta. O sistema original gastava 90% do seu
tempo executando o tipo de cálculo que foi aperfeiçoado, de modo que ele gastava 90 segundos, de um programa de 100
segundos, executando aquele tipo de cálculo. Uma vez que o cálculo foi aperfeiçoado por um fator de 10, o sistema
aperfeiçoado gasta 90/10 = 9 segundos executando aquele tipo de cálculo. Como 9 segundos é 47% de 19 segundos, o
novo tempo de execução, o novo sistema gasta 47% do seu tempo executando o tipo de cálculo que foi aperfeiçoado.
Poderíamos também ter calculado o tempo que o sistema original gastava executando os cálculos que não tinham
sido aperfeiçoados (10 segundos). Uma vez que estes cálculos não foram modificados quando o aperfeiçoamento foi
feito, o tempo total gasto neles, pelo novo sistema, é o mesmo que no sistema antigo. Isto poderia ser então utilizado
para calcular o percentual de tempo gasto nos cálculos que não foram aperfeiçoados e, subtraindo aquele valor de 100,
calcular o percentual de tempo gasto nos cálculos que foram aperfeiçoados.
Lei de Amdahl (II)
1.12 Um computador gasta 30% do seu tempo acessando a memória, 20% executando multiplicações e 50% executando outras instruções. Como projetista de computadores, você tem que escolher entre aperfeiçoar a memória, o hardware de multiplicação ou a execução das instruções que não são de multiplicação. Só existe espaço no chip para um
aperfeiçoamento, e cada um dos aperfeiçoamentos irá melhorar o seu componente de computação associado por um
fator de 2.
1. Sem fazer cálculos, qual aperfeiçoamento você esperaria que desse o maior aumento de desempenho. Por quê?
2. Qual seria a aceleração ao se fazer cada uma dessas três mudanças?
Solução
1. Aperfeiçoar a execução das instruções que não são de multiplicação deve produzir o maior benefício. Cada benefício aumenta o desempenho da sua área afetada pelo mesmo fator e o sistema gasta mais tempo executando instruções
que não são de multiplicação do que com qualquer uma das outras categorias. Uma vez que a Lei de Amdahl diz que
20
ARQUITETURA DE COMPUTADORES
o impacto geral de um aperfeiçoamento cresce à medida que a parcela de tempo que aquele aperfeiçoamento é utilizado cresce, aperfeiçoar as instruções que não são de multiplicação daria o melhor resultado.
2. Substituindo na fórmula de aceleração da Lei de Amdahl os valores do percentual de tempo utilizado e do aperfeiçoamento quando utilizado, mostra que aperfeiçoar o sistema de memória dá uma aceleração de 1,18, aperfeiçoar a
multiplicação dá uma aceleração de 1,11 e aperfeiçoar as instruções que não são de multiplicação dá uma aceleração
de 1,33, confirmando a intuição da parte 1.
Comparando Diferentes Modificações em uma Arquitetura
1.13 Qual aperfeiçoamento propicia a maior redução no tempo de execução: um que é utilizado 20% do tempo, mas melhora o desempenho por um fator de 2 quando utilizado, ou um que é utilizado 70% do tempo, mas melhora o desempenho apenas por um fator de 1,3 quando é utilizado?
Solução
Aplicando a Lei de Amdahl, obtemos a seguinte equação para o primeiro aperfeiçoamento:
0,2
Tempo de execuçãonovo ¼ Tempo de execuçãoantigo 0,8þ
2
Assim, o tempo de execução com o primeiro aperfeiçoamento é 90% do tempo de execução sem o aperfeiçoamento.
Inserindo os valores para o segundo aperfeiçoamento na Lei de Amdahl, tem-se que o tempo de execução com o segundo aperfeiçoamento é 84% do tempo de execução sem o aperfeiçoamento. Assim, o segundo aperfeiçoamento terá um impacto maior sobre o tempo geral de execução, independentemente do fato de que ele dá uma melhoria menor
quando em uso.
Convertendo Aperfeiçoamentos Individuais para Impacto Geral sobre o Desempenho
1.14 Um projetista de computadores está desenvolvendo o sistema de memória para a próxima versão de um processador. Se a versão atual do processador gasta 40% do seu tempo processando referências à memória, de quanto o projetista precisa acelerar o sistema de memória para atingir uma aceleração global de 1,2? E uma aceleração de 1,6?
Solução
Para resolver isto, aplicamos a Lei de Amdahl para acelerações, tendo a Aceleraçãousada como desconhecida, ao invés
de Aceleração geral. Parcelausada é 0,4, uma vez que o sistema original gasta 40% do seu tempo tratando referências à
memória, de modo que Parcelanão_usada é 0,6. Para um aumento de 20% no desempenho geral, isto dá:
Aceleração ¼ 1,2 ¼
0,6 þ
1
0,4
Aceleração usada
Resolvendo para Aceleraçãousada, obtemos
Aceleração usada ¼
0,4
¼ 1,71
1
0,6
1,2
Para encontrar o valor da Aceleraçãousada necessária para dar uma aceleração de 1,6, o único valor que muda na
equação acima é a Aceleração. Resolvendo novamente, obtemos Aceleraçãousada = 16. Aqui, novamente, vemos os retornos decrescentes que decorrem de aperfeiçoar repetidamente apenas um aspecto do desempenho do sistema. Para
aumentar a aceleração geral de 1,2 para 1,6, temos que aumentar a Aceleraçãousada por um fator de praticamente 10, porque os 60% do tempo que o sistema de memória não está em uso começam a dominar o desempenho geral, à medida
que melhoramos o desempenho do sistema de memória.
CAPÍTULO 1 • INTRODUÇÃO
21
Aperfeiçoando Instruções
1.15 Considere uma arquitetura que tem quatro tipos de instruções: somas, multiplicações, operações de memória e desvios. A tabela abaixo dá o número de instruções que pertencem a cada tipo, no programa com o qual estamos preocupados, o número de ciclos que demora para executar cada tipo de instrução e a aceleração na execução do tipo de
instrução, a partir de um aperfeiçoamento proposto (cada aperfeiçoamento afeta apenas um tipo de instrução). Avalie os aperfeiçoamentos para cada um dos tipos de instrução, em termos do seu impacto sobre o desempenho geral.
Tipo de instrução
Número
Soma
Multiplicação
Memória
Desvio
10 milhões
30 milhões
35 milhões
15 milhões
Tempo de execução
Aceleração para o tipo
2,0
1,3
3,0
4,0
2 ciclos
20 ciclos
10 ciclos
4 ciclos
Solução
Para resolver este problema, primeiro precisamos calcular o número de ciclos gastos ao executar cada tipo de instrução, antes que os aperfeiçoamentos sejam aplicados, e a parcela do total de ciclos gastos executando cada tipo de instrução (Parcelausada para cada um dos aperfeiçoamentos). Isto permitirá que utilizemos a Lei de Amdahl para calcular a
aceleração geral para cada aperfeiçoamento proposto. Multiplicar o número de instruções em cada tipo pelo tempo de
execução por instrução resulta no número de ciclos gastos para executar cada tipo de instrução, e somar estes valores
fornece o número total de ciclos para executar o programa. Os valores estão apresentados na tabela abaixo (o tempo
total de execução é de 1.030 milhões de ciclos):
Tipo de
instrução
Número
Tempo de
execução
Aceleração
para o tipo
Número de
ciclos
Parcela dos
ciclos
Soma
Multiplicação
Memória
Desvio
10 milhões
30 milhões
35 milhões
15 milhões
2 ciclos
20 ciclos
10 ciclos
4 ciclos
2,0
1,3
3,0
4,0
20 milhões
600 milhões
350 milhões
60 milhões
2%
58%
34%
6%
Então, podemos colocar estes valores na Lei de Amdahl, usando a parcela do ciclos como Parcelausada, para obter a aceleração geral a partir de cada aperfeiçoamento.
Assim, melhorar as operações de memória dá a melhor aceleração geral, seguido por melhorar as multiplicações,
os desvios e as somas:
Tipo de
instrução
Número
Tempo de
execução
Aceleração
para o tipo
Número de
ciclos
Soma
Multiplicação
Memória
Desvio
10 milhões
30 milhões
35 milhões
15 milhões
2 ciclos
20 ciclos
10 ciclos
4 ciclos
2,0
1,3
3,0
4,0
20 milhões
600 milhões
350 milhões
60 milhões
Parcela dos Aceleração
geral
ciclos
2%
58%
34%
6%
1,01
1,15
1,29
1,05
Download