Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Organização e Arquitetura de Computadores - (Unidade 02: O papel do desempenho)

Prof. Dr. Eng. Rafael Luiz Cancian - Organização e Arquitetura de Computadores (Unidade 02) - Universidade Federal de Santa Catarina
by

Rafael Luiz Cancian

on 13 March 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Organização e Arquitetura de Computadores - (Unidade 02: O papel do desempenho)

Universidade Federal de Santa Catarina Organização e Arquitetura de Computadores Professor Dr. Eng. Rafael Luiz Cancian 2. O Papel do Desempenho 2.1 - Introdução 2.2 - Medidas de
Desempenho 2.3 - Relação entre
as Métricas 2.4 - Escolha de Programas para Avaliar o Desempenho 2.5 - Comparação do Desempenho Uma Análise mais Profunda: Lei de Amdahl Um conhecimento muito importante na área da computação consiste em saber como medir, informar e documentar aspectos relativos ao desempenho de um computador, além de conhecer os principais fatores que influenciam de forma positiva ou negativa o desempenho A grande variedade e complexidade do hardware e do software, além das muitas técnicas para melhoria do desempenho, tornam a avaliação do desempenho muito complexa. Além do preço e da compatibilidade de software, o desempenho é de fundamental importância no processo de escolha de um computador. Mas o que é o desempenho de um computador O desempenho pode ser medido usando muitas métricas diferentes, incluindo: Throughput, que corresponde à quantidade de tarefas realizadas por unidade de tempo, como programas executados por hora. Tempo de resposta, que é o tempo decorrido entre o início e o final do seu programa. Se apenas um programa está sendo executado, então esse tempo também é chamado de tempo de execução. IPS, que é a quantidade de instruções executadas por segundo, e também seus múltiplos: MIPS, GIPS, TIPS, ... FLOPS, que é a quantidade de operações em ponto-flutuante executadas por segundo, e também seus múltiplos: MFLOPS, GFLOPS, TFLOPS, ... A escolha de uma métrica ou outra pode fazer com que computadores bem diferentes possam ser considerados aquele com maior desempenho. Portanto, pode ser fácil ser enganado por alguém que quer que o computador "dele" seja o de maior desempenho. Uma das métricas mais confiáveis é o tempo de execução, e ela será utilizada a partir de agora como nossa métrica de desempenho. Afinal, se você executar o mesmo programa em dois computadores diferentes, é válido afirmar que o computador mais rápido é aquele em que o programa termina primeiro. Assim, o desempenho (de um programa P executando num computador C) é considerado o inverso do tempo de execução (desse programa nesse computador). Além disso, o entendimento dos fatores que influenciam o desempenho de um computador é essencial aos projetistas de novos sistemas computacionais, incluindo os sistemas computacionais dedicados, ou sistemas embarcados. Muitas vezes, o tempo em um computador é compartilhado na execução de mais de um programa simultaneamente. tempo programas Sistema
Operacional Programa P1 Programa P2 tempo de resposta tempo de execução tempo de execução Assim, é importante distinguir entre o tempo total desde o início até o fim do programa (tempo de resposta) e o tempo gasto pelo processador executando esse programa (tempo de execução ou tempo do processador), além de tempos de espera por dispostivos ou memória. E..., além disso, é importante lembrar que o programa invoca o sistema operacional para tratar de recursos do hardware. Portanto, além das instruções especificadas pelo programador, também são executadas instruções do sistema operacional para a conclusão do programa. O tempo gasto com um programa, então, pode ser especificado de diferentes maneiras: Por enquanto, podemos fazer algumas suposições para simplificar a avaliação de desempenho: O programa sendo avaliado gasta a maior parte de seu tempo executando na CPU, e não acessando dispositivos periféricos. Portanto, assumimos que o tempo de espera por dispositivos é zero. O programa sendo avaliado executa sozinho, sem concorrer com outros programas. Portanto, o tempo de espera por outros programas é zero. O programa sendo avaliado não utiliza muitos serviços do sistema operacional para gerenciamento dos recursos de hardware. Portanto, o tempo de execução do sistema operacional é zero. Tomando essas suposições, o tempo gasto com um programa pode ser especificado da seguinte maneira: Para distinguir essa especificação simplificada da especificação do desempenho geral do sistema, vamos nos referir a essa versão simplificada de desempenho do processador. Por enquanto, estamos interessados apenas no desempenho do processador. O tempo do processador gasto na execução de um programa depende da quantidade de ciclos de relógio necessários para executar o programa, e também da duração, ou período de cada ciclo. Exemplo: Um programa gasta 1000 ciclos de relógio para executar num computador. Sabendo que cada ciclo de relógio dura 1us, qual é o tempo de processamento desse programa? Por sua vez, a quantidade de ciclos de relógio gastos na execução de um programa depende da quantidade de instruções executadas por esse programa e da quantidade de ciclos de relógio gastos por cada instrução. Portanto, o tempo de processamento pode ser reescrito como: Vale a pena lembrar as unidades envolvidas e como elas resultam numa unidade de tempo: Mas como podemos relacionar as informações técnicas disponíveis para calcular essa métrica de desempenho Como podemos determinar os valores de cada um desses fatores? Podemos executar um programa e medir o tempo do processador O período do relógio pode ser obtido a partir do manual do fabricante, já que é o inverso da frequência. A quantidade de instruções e o CPI são mais difíceis de obter. Podemos mediar a quantidade de instruções com ferramentas de software ou com contadores de hardware, já disponíveis em processadores modernos. O CPI depende de uma imensa variedade de detalhes, e do mix de instruções executadas por um programa. Podemos obter um valor médio do CPI com base nas instruções executadas. E para não esquecer mais... Exemplo: Da documentação do fabricante, de um computador, sabemos que sua frequência é 1.5GHz e que todas as instruções executam em 2 pulsos (ciclos) de clock. Em quanto tempo será executado um laço com 500 instruções que se repete 10000 vezes? Assim, o laço será executado em 0,006667 segundos Um usuário que execute sempre o mesmo programa todo o dia seria um candidato perfeito para avaliar um computador. Infelizmente, isso praticamente nunca acontece. Usuários usam um conjunto de programas no seu dia-a-dia, que chamamos de workload, ou carga de trabalho. Para medir corretamente o desemepnho de um computador, devemos calcular seu desempenho para um conjunto de programas que representem a carga de trabalho desse computador. Ao conjunto de programas usados para avaliar o desempenho de um computador, chamamos benchmark. Assim, por exemplo, em um computador de uma empresa de engenharia, deve-se usar benchmarks que contenham aplicações típicas de engenharia; numa lan-house, benchmarks devem conter jogos e aplicações de acesso à internet. Benchmarks reais são sempre preferíveis, já que benchmarks sintéticos podem mascarar o real desempenho de um computador. Sempre que possível, procure benchmarks prontos para um domínio de aplicação. Nem todos os programas de um benchmark podem ser igualmente utilizados ou têm a mesma importância. O desempenho final do computador, executando determinado benchmark, pode ser dado pela média aritmética ponderada do desempenho de cada programa. Exemplo: Em 80% do tempo, um usuário utiliza um programa P1 que executa em 30 segundos, e no restante do tempo, utiliza um programa P2 que executa em 5 segundos. Qual é o desempenho do computador para esse benchmark? O desempenho do computador para esse benchmark é 0,04 (1/s) Mas como podemos comparar o desempenho entre diferentes benchmarks ou mesmo diferentes computadores? A maneira mais simples de considerar o desempenho relativo de dois benchmarks ou computadores A e B, é a fração de seus tempos de execução. Exemplo: O tempo de execução de um benchmark num computador A é de 120 segundos, enquanto que num computador B, sua execução leva 75 segundos. Qual computador é mais rápido e quantas vezes mais rápido que o outro? Portanto, o computador B é mais rápido, e é 1,6 vezes (ou 60%) mais rápido que o computador A. Ao comparar o desempenho de mais de dois computadores, é comum definir como unitário o desempenho de um deles, que se torna o computador de referência, e então especificar o desempenhos dos demais em função dessa referência. O computador A é 1,25 vezes mais rápido que B, e o computador C é 0,625 vezes mais rápido que B, ou seja, ele é mais lento e seu desempehno é apenas 62,5% do desempenho do computador B, então, podemos dizer ainda que C é 1-0,625=37,5% mais lento que o computador B. Mas e se atualizarmos apenas uma parte do computador, ou se precisarmos incluir outras características, como preço? Considerações Finais Revisão Exercícios Avaliação Se o desempenho do processador depende da quantidade de instruções, da quantidade de ciclos por instrução e do período do relógio, como podemos influenciar o desempenho do processador? Período do Relógio Influenciado pelos físicos, que melhoram a tecnologia de circuitos integrados, com transistores menores e mais rápidos, por exemplo. Influenciado pelos projetistas de hardware, que podem mudar a organização e hardware para dimimuir o atraso do circuito, o que aumenta sua frequência de operação. Ciclos por
Instrução Quantidade
de Instruções Influenciado pelos projetistas de hardware, que podem especificar instruções mais simples ou mais complexas no conjunto de instruções. Conjuntos de Instruções Complexas (CISC) levam mais ciclos de relógio para executar, enquanto Conjuntos de Instruções Simples (RISC) levam menos ciclos de relógio para executar. A classificação de arquiteruras de computador quanto ao seu conjunto de instruções é muito importante na escolha do processador. Influenciado pelos projetistas de hardware, que podem incluir mecanismos de aceleração na organização do processador, fazendo-o executar mais instruções por ciclo de relógio. Influenciado pelo compilador e pelo programador de baixo nível, que podem escolher codificar instruções mais rápidas, que executam menos ciclos. Influenciado pelo compilador, que pode utilizar diversos métodos de otimização de código para diminuir a quantidade de instruções executadas. Influenciado pelo programador de alto nível, que pode especificar algoritmos mais eficientes, e otimizar o código com o uso de boas técnicas de engenharia de software e de programação. Exemplo: Em certo programa de automação, 50% das instruções executadas são operações aritméticas inteiras, 15% são instruções de acesso à memória e o restante são operações em ponto flutuante. Pelo manual do fabricante, sabemos que essas classes de instruções gastam 1, 3 e 10 ciclos, respectivamente. Usando contadores de hardware, descobriu-se que a principal rotina desse programa executa 100 mil instruções. Contudo, para que ele funcione adequadamente, essa rotina precisa executar completamente 10 vezes a cada segundo. Qual deve ser a frequência de operação do processador que executa esse programa? Assim, a frequência de operação do processdor deve ser de 4,5 MHz. Muitas vezes, as simplificações feitas não são realistas, e o tempo do processador não corresponde a todo o tempo de execução ou ao tempo de resposta. Não vamos aprender (ainda) como se calcula os demais tempos envolvidos, mas já podemos considerá-los numa melhor análise de desempenho. O tempo de resposta de um programa pode ser visto, graficamente, da seguinte forma: tempo programas Sistema
Operacional Programa P1 tempo de resposta tempo de execução
do programa tempo de execução
do programa tempo de execução do sistema operacional tempo de execução do sistema operacional tempo de execução do sistema operacional tempo de espera
pela memória tempo de
espera por E/S tempo de resposta = tempo execucao programa +
+ tempo execucao sistema operacional +
+ tempo espera memoria +
+ tempo espera dispositivos tempo Programa P1 tempo de resposta Tempo de execução
do programa Tempo de
execução
do SO Tempo de
espera por memória Tempo de
espera por dispositivos Ou, de maneira simplificada, da seguinte forma: O aumento de desempenho obtido quando melhoramos um computador, também denominado aceleração total, pode ser obtido a partir da relação de desempenho já vista. Se considerarmos apenas o tempo do processador, qual é a aceleração total de um programa ao dobrarmos a frequência do processador? Mas e se considerarmos também os outros componentes do tempo de resposta? Na prática, se dobrarmos a frequência do processador, os programas ficam duas vezes mais rápido? tempo Programa P1 antes da melhora tempo de resposta antes Tempo de execução
do programa Tempo de
execução
do SO Tempo de
espera por memória Tempo de
espera por dispositivos Programa P1 antes da melhora tempo de resposta depois Tempo de execução
do programa Tempo de
espera por memória Tempo de
espera por dispositivos Tempo de
execução
do SO Apenas os tempos envolvidos na melhora são afetados, enquanto os demais permanecem os mesmos. Então, na prática, ao acelarar uma parte do computador, obteremos sempre uma aceleração total menor que a aceleração feita. A Lei de Amdahl estabele que a aceleração total obtida quando se acelera uma parte de um computador está limitada à fração do tempo de resposta gasto com a parte que foi acelerada. Exemplo: Um jogo de computador gasta cerca de 30% do seu tempo executando na CPU, 60% do seu tempo fazendo transferências para o monitor de vídeo, 5% acessando o disco rígido e o restante do tempo com outras operações. Qual será a aceleração total obtida nesse jogo se deixarmos a CPU 4 vezes mais rápida? O jogo ficará 4 vezes mais rápido? Portanto, mesmo deixando a CPU 4 vezes mais rápida, o jogo ficará apenas 1,29 vezes mais rápido. E se, ao invés de comprar uma CPU 4 vezes mais rápida, fosse comprada uma placa de vídeo apenas 1,6 vezes mais rápida, qual seria a aceleração total obtida? A mesma
aceleração! Mas será que um único programa representa bem o desempenho do computador? Como se escolhe um programa para avaliar o desempenho de um computador? Além do desempenho, outras características dos computadores podem ser utilizadas durante o processo de decisão. Preço, compatibilide de software, distribuidores, assistência técnica, suporte ao usuário, etc. Existem várias formas de incluir outras características no processo de decisão, incluindo a especificação de outras métricas de interesse. Exemplo: O computador A tem desempenho 2, e o computador B tem desempenho 5. Se o computador A custa R$1.000,00 e o computador B custa R$ 2.750,00, e considerando tanto preço quanto desempenho, qual deles você escolheria? Portanto, como o computador A tem maior desempenho por preço pago, ele é preferível ao computador B. email, msn: cancian@lisha.ufsc.br 2012.2
V. 1.00 http://msdn.microsoft.com/en-us/library/windows/desktop/dd796399(v=vs.85).aspx Na prática... Referência sobre Hardware Counter Profiling
Full transcript