Faculdade de Computação Arquitetura e Organização de Computadores 2 1 a Lista de Exercícios entrega em 19/04/2018 Prof. Cláudio C. Rodrigues Problemas: P1) Explique o que há de errado com as métricas de desempenho listadas abaixo: a) IPC - Instructions per clock, b) Clock speed, c) CPI - Cycles per instruction. P2) A Tabela abaixo apresenta o mix de instruções de um determinado programa. Esse mix é típico de arquiteturas RISC (Reduced Instruction Set Computer). INSTRUÇÕES CICLOS DE CLOCK FREQUÊNCIA RELATIVA ALU 2 50% LOAD 4 20% STORE 4 10% BRANCH 3 20% Suponha que para a execução de tal programa são necessárias 10 milhões de instruções em linguagem de máquina. Qual o tempo de CPU gasto por este programa quando executado num computador com frequência de clock de 4 Ghz? P3) Considere um computador com frequência de clock de 2 Ghz, o qual gasta 16 ms para executar um programa do qual cada operação aritmética gasta 2 ciclos de clock. Sabe-se que 25% do tempo de execução desse programa referem-se a operações aritméticas. Qual deve ser a frequência de clock de um novo processador para que o mesmo programa rode em 12 ms, mas sabendo que no novo processador cada operação aritmética gasta 3 ciclos de clock? P4) Quando se projetam sistemas de memória, torna-se necessário conhecer as frequências de leitura e de escrita na memória, bem como as frequências de acesso a dados e de acesso a instruções. Usando as estatísticas para o conjunto de instruções MIPS mostradas na figura 1 para o programa spice, determine o seguinte: (a) A porcentagem de todos os acessos à memória que são acessos de escrita. (b) A porcentagem de todos os acessos à memória que são acessos de leitura. Suponha, neste caso, que todas as transferências de dados sejam feitos através de instruções do tipo load. Dica: Lembre-se que, durante a execução de um programa, a memória é acessada para leitura de dados e instruções e para escrever somente dados. Classe Exemplo MIPS Ling. Alto Nível gcc spice Aritmética add, sub, addi declarações de atribuições 48% 50% Transf.Dados lw, sw, lb, sb, lui ref. estrut. dados (arrays) 34% 41% Desvios Condic. beq, bne, slt, slti declar. if e loops 16% 8% Saltos j,jr, jal funções, returns, case/switch 2% 1% Figura 1: Classes de Instruções MIPS, exemplos e correspondência com linguagem de alto nível e percentual de instruções MIPS executadas por categoria para dois programas: gcc e spice. Arquitetura e Organização de Computadores 2 1
P5) Dois compiladores diferentes (C1 e C2) estão sendo testados em uma máquina de 100MHz. A máquina possui três classes diferentes de instruções, a saber, instruções classe A, classe B e classe C, que consomem um, dois e três ciclos, respectivamente. Ambos compiladores são empregados para produzirem código para um grande fragmento de software. O primeiro compilador (C1) utiliza 5 Milhões de instruções da classe A, 1 Milhão da classe B e 1 Milhão da classe C. O segundo compilador (C2) utiliza 10 Milhões de instruções da classe A, 1 Milhão da classe B e 1 Milhão da classe C. a) Qual sequência será mais rápida de acordo com a medida MIPS? b) Qual sequência será mais rápida de acordo com o tempo de execução? P6) Um programa é executado por 1 segundo, em um processador com um ciclo de clock de 50 ns e Throughput = 15 MIPS. a) Quanto é o CPI, para o programa? b) Vamos supor que, dadas algumas técnicas de otimização, a taxa de transferência do programa seja otimizada. No novo caso, as 40% das instruções do programa são executadas com CPI = 1, enquanto a fração das instruções restantes (60%) é executada com o mesmo CPI. o Quanto custa o SpeedUp do case1 para o case2? o Quanto é o Throughput do caso 2 expresso em MIPS? P7) Suponha que foram feitas as seguintes medidas de número médio de instruções por ciclo: Classe da instrução Aritmética Transferência de dados Salto condicional (branch) Salto incondicional (jump) CPI médio 1,0 ciclos 1,6 ciclos 1,8 ciclos 1,2 ciclos Calcule o número médio de ciclos por instrução para o MIPS. Pondere as frequências de instruções usando as estatísticas da Figura 1. Calcule o CPI, usando as frequências obtidas para o programa spice. P8) Um processador construído segundo o princípio multi-ciclo roda a uma frequência de 500 MHz e apresenta as seguintes estatísticas na execução de um programa P: Implementação Mbase Classe de Instrução CPI Frequência A 3 40% B 2 30% C 4 20% D 5 10% Propõe-se uma modificação no projeto, que permitirá operação numa frequência de 800 MHz causando, no entanto, mudanças no CPI de algumas classes de instruções, como mostrado abaixo: Implementação Motim Classe de Instrução CPI Frequência A 3 40% B 4 30% C 5 20% D 6 10% Pergunta-se: a) Qual o CPI médio de cada uma das implementações para o programa P? b) Qual a relação entre o tempo de execução do programa P na Motim e o tempo em Mbase? Arquitetura e Organização de Computadores 2 2
P9) Considere novamente o processador do exercício anterior, rodando o mesmo programa P. Propõe-se uma modificação no projeto para diminuir o custo da máquina, aumentando, no entanto, o CPI de algumas classes de instruções, como mostrado abaixo: Implementação Motim Classe de Instrução CPI Frequência A 2 40% B 5 30% C 6 20% D 5 10% Pergunta-se: a) Qual é a frequência de operação necessária na implementação Motim para que o desempenho da máquina na execução do programa P continue o mesmo? b) Supondo que a frequência da implementação Motim continue a mesma de Mbase, seria ainda assim possível obter o mesmo desempenho de Mbase através de otimizações no compilador? Explique e exemplifique com números concretos. P10) Analise de desempenho: a. Considere uma máquina de 500 MHz que consome 3 ciclos de clock para toda instrução executada. É o desejo de que um determinado programa realize o seu trabalho num tempo menor do que 15 microssegundos (µs). Qual é a quantidade máxima de instruções que devemos restringir o programa? b. Considere um processador de ponto flutuante. A sequência de instruções típica para o programa é composta por essa distribuição de operações: 30% FMUL, 60% FADD, 10% FDIV. Cada uma dessas operações consome o seguinte número de ciclos para executar: FMUL: 2 FADD: 1 FDIV: 10 Responda - qual é o ciclo médio por instrução (CPI)? P11) Considere duas implementações diferentes, M1 e M2, do mesmo conjunto de instruções básicas. Existem três classes de instruções, A,B,e C, em tal conjunto de instruções. A máquina M1 tem um clock de 80MHz e a M2 tem um clock de 200MHz. O número médio de ciclos gastos por cada classe de instruções em M1 e M2 é dado pela seguinte tabela: Classe CPI em M1 CPI em M2 Código gerado por C1 Código gerado por C2 Código gerado pelo compilador de terceiros A 4 2 30% 30% 50% B 6 4 50% 20% 30% C 8 3 20% 50% 20% A tabela também traz um resumo de informações sobre como três diferentes compiladores fazem uso do conjunto de instruções. O compilador C1 foi desenvolvido pelos fabricantes da máquina M1, o compilador C2 pelos fabricantes da máquina M2, e o outro compilador é um produto desenvolvido por terceiros. Suponha que cada um deles use o mesmo número de instruções para gerar o código referente a um determinado programa, mas que o mix das instruções seja o indicado na tabela. Usando o compilador C1 tanto em M1 quanto em M2, quantas vezes mais rápidas é a máquina M1 comparada com a máquina M2? Usando o compilador C2 em ambas as máquinas, quantas vezes mais rápidas é a máquina M2 comparada com a máquina M1? Se você adquirir a máquina M1, qual compilador escolherá? Se você adquirir a Arquitetura e Organização de Computadores 2 3
máquina M2, qual compilador escolherá? Qual máquina você compraria, admitindo que todos os demais critérios são idênticos, inclusive o custo? P12) Amdahl s law: Considere uma máquina que execute um programa consistindo de 50% de operações de multiplicação de ponto flutuante, 20% de operações de divisão e os 30% restantes com outros tipos de instruções. a) Desejamos uma máquina que execute 4 vezes mais rápido. Podemos acelerar a operação de divisão no máximo em 3 vezes e a operação de multiplicação no máximo 8 vezes. Seria possível alcançar ao melhoramento de performance desejado para a máquina realizando melhoramento somente em uma instrução, e qual seria? P13) Suponha que podemos melhorar o desempenho de instruções de ponto flutuante da máquina por um fator de 15 (as mesmas instruções de ponto flutuante executam 15 vezes mais rápido nesta nova máquina). Qual é o percentual de instruções de ponto flutuante seriam necessárias para alcançar um Speedup de no mínimo 5? P14) Suponha que um segmento do código de um programa consista em uma parte puramente sequencial que consome 25 ciclos para executar, e um loop iterativo que consome 100 ciclos por iteração. Consideram-se as iterações do loop como independentes, e não pode ser paralelizada. Se o loop será executado 100 vezes, qual será o máximo ganho de Speedup usando um número infinito de processadores (comparados a sistemas de um único processador)? P15) Estamos interessados em duas implementações de uma máquina, uma delas com um hardware especial para processamento em ponto flutuante e outra, sem tal hardware. Considere um programa P, com o seguinte mix de instruções: Multiplicação em ponto flutuante 10% Soma em ponto flutuante 15% Divisão em ponto flutuante 5% Instruções inteiras 70% A máquina MFP (com processamento em ponto flutuante) possui um hardware especial para realizar diretamente as operações sobre valores reais. O número de ciclos de clock gastos em cada operação está definido a seguir: Multiplicação em ponto flutuante 6 Soma em ponto flutuante 4 Divisão em ponto flutuante 20 Instruções inteiras 2 A outra máquina, denominada MNFP (sem processamento em ponto flutuante), não possui o hardware especial para processar diretamente as operações em ponto flutuante. Portanto, tais operações precisam ser realizadas a partir de instruções inteiras, que gastam 2 ciclos de clock. O número de instruções inteiras para executar cada uma das operações em ponto flutuante é dado a seguir: Multiplicação em ponto flutuante 30 Soma em ponto flutuante 20 Divisão em ponto flutuante 50 Ambas as máquinas têm um clock de 1.000 MHz. Encontre os valores correspondentes ao MIPS nativo de cada uma das máquinas. Arquitetura e Organização de Computadores 2 4
P16) Se a máquina MFP do exercício anterior precisar de 300 milhões de instruções para executar o programa P, pergunta-se: De quantas instruções a máquina MNFP precisa para executar o mesmo programa? P17) Implementações do cálculo da raiz-quadrada de ponto flutuante (FP) sofrem variações significativas de desempenho. Suponha que a raiz-quadrada de ponto flutuante (FPSQR) seja responsável por 30% do tempo de execução de um determinado benchmark, as medidas foram obtidas para uma máquina específica. Uma proposta é adicionar hardware para FPSQR que acelerará esta operação por um fator de 10. Como alternativa poderíamos fazer todas as instruções FP executarem mais rápido - instruções FP são responsáveis por um total de 60% do tempo de execução. A equipe de projeto acredita que eles podem fazer todas as instruções FP executarem três vezes mais rápido com o mesmo esforço requerido para a raiz-quadrada rápida. Compare estas duas alternativas de projeto e determine qual ofereceria maior aceleração (speedup)? P18) Benchmarks: Números SPECs são medidas do tempo consumido para executar certos programas de benchmarks representativos. Um número maior significa que o tempo de execução do correspondente benchmark é menor. Alguns afirmam que isto atribui uma vantagem injusta aos processadores que são projetados para usar um ciclo de clock mais rápido, sugerem que os números SPECs devam ser normalizados em relação a frequência do clock, desde que clocks mais rápidos estão associados a tempos de execução menores e por esta razão números SPECs maiores. Avalie se esta sugestão é uma boa ou má idéia? Explique Digamos que seu projeto será avaliado com base no número SPEC/MHz, qual seria a principal decisão de projeto que você faria? P19) Você está projetando um computador a partir do zero (prancheta) e que o orçamento da companhia permite uma pequena quantidade de memória. Quais das seguintes características você escolheria na ISA e na microarquitetura,e por quê? Explique brevemente. a) Instruções de comprimento variável ou fixo? b) Instruções complexas ou simples? c) Um cache L2 grande ou pequeno? (L2 é o último nível de cache) d) Uma unidade de pré-busca (prefetcher) agressiva ou conservativa? e) Cache de blocos grandes ou pequenos? P20) Para este exercício, sua tarefa é comparar a eficiência de memória de quatro estilos diferentes de conjuntos de instruções. Os estilos de arquitetura são: Acumulador: todas as operações usam o acumulador, que é o único registrador disponível. Operações load/store transferem dados entre o acumulador e a memória, outras operações, como add e sub, usam o acumulador como um dos operandos de origem (se houver mais de um) e como o operando de destino. Memory-Memory: todos os três operandos de cada instrução estão na memória. Instruções aritméticas incluem add e sub. Stack: todas as operações ocorrem no topo da pilha. Apenas a memória de acesso push e pop e todas as outras instruções, como add e sub, removem seus operandos da pilha e os substituem pelo resultado. A instrução dup replica o elemento do topo da pilha. A implementação usa uma pilha para as duas primeiras entradas; acessos que usam outras posições de pilha são referências de memória. Load / Store: todas as operações ocorrem nos registradores, e as instruções register-to-register, como add e sub, possuem três operandos por instrução. Existem 16 registros de propósito geral, e os especificadores de registro têm 4 bits de comprimento. Para medir a eficiência da memória, faça as seguintes suposições sobre os quatro conjuntos de instruções: O opcode é sempre 1 byte (8 bits). Todos os endereços de memória são 2 bytes (16 bits). Todos os operandos de dados são 4 bytes (32 bits). Todas as instruções são um número inteiro de bytes de comprimento. Não há outras otimizações para reduzir o tráfego de memória, e todas as variáveis serão colocadas inicialmente na memória. Por exemplo, uma carga de registro exigirá 4 bytes de instrução da Arquitetura e Organização de Computadores 2 5
memória: um para o opcode, um para o registrador destino e dois para um endereço de memória; também haverá 4 bytes para o operando. Da mesma forma, uma instrução de memória adicionará 7 bytes de instrução da memória: um para o opcode e dois para cada um dos 3 endereços de memória, e haverá 8 databites da memória para o processador e 4 bytes de dados do processador para a memória. Para cada um dos quatro estilos de arquitetura, escreva a seqüência do código de instrução para o seguinte fragmento de programa: a = b + c; b = a + c; d = a b; Para cada seqüência de código, calcule os bytes de instrução buscados e os bytes de dados de memória transferidos (lidos ou gravados). a) Qual arquitetura é mais eficiente medida pelo tamanho do código? b) Qual arquitetura é a mais eficiente medida pela largura de banda total de memória requerida (código mais dados)? c) Se as respostas não são as mesmas, por que elas são diferentes? Arquitetura e Organização de Computadores 2 6