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