Organização de Computadores - Aula 02 - Desempenho de Computadores

50.05k views3320 WordsCopy TextShare
UNIVESP
Curso de Engenharia de Computação Disciplina EIC-001 - Organização de Computadores Univesp - Univers...
Video Transcript:
[Música] [Música] a aula passada nós vimos as as Abstrações e tecnologias de um computador e falamos que um dos principais aspectos que a gente tem que olhar na hora de analisar os nossos sistemas é o desempenho mas o que que é desempenho O que que significa desempenho né Essa palavra é uma palavra que nos remete ah velocidade que nos remete um bom resultado mas a gente precisa especificar o que que isso quer dizer né Por exemplo se a gente olhar aqui comparar um B 777 um bong 747 um Concord e um Douglas DC 850 qual
qu avião é melhor eu preciso estabelecer um critério para poder dizer qual avião é melhor se o que me importa é a capacidade de passageiros não há dúvidas que o bang 747 É melhor por outro lado se a minha preocupação é a velocidade obviamente o Concord vai ter uma velocidade maior Portanto ele é o melhor aparelho para eu poder fazer esse transporte entre dois pontos então o primeiro passo que a gente precisa definir quando a gente tá falando de desempenho é qual é a métrica Qual é o critério que eu vou utilizar para avaliar esse
desempenho nós precisamos ser precisos quando a gente tá falando de quando falarmos de desempenho não basta simplesmente eu falar qual máquina qual computador qual sistema tem um melhor desempenho eu preciso estabelecer o que que eu quero dizer por desempenho Qual que é a métrica importante pro desempenho bom então Quais são as métricas de desempenho que a gente dera paraa computação a primeira delas é o tempo de resposta ou seja o tempo de execução Então a hora que eu abro o meu navegador meu sistema acabou de ligar vou clicar no ícone do navegador um primeiro ponto
é quanto tempo demora para esse navegador carregar para eu poder ver a tela do meu navegador para eu poder ver a minha página padrão que aparece no navegador isso está associado ao tempo de execução e os nós usuários eh observamos essa métrica como a mais importante quanto tempo vai demorar para eu ter o meu resultado quando a gente tá escrevendo um programa para uma determinada disciplina que a gente vai executar e quer fazer uma análise de um conjunto de dados por exemplo vamos rodar o algoritmo de ordenação ou Bubble sort quanto tempo vai demorar para
esse meu algoritmo Bubble sort da hora que eu apertei para iniciar a execução para ele me produzir uma lista ordenada Esse é o tempo de execução né Essa é a percepção que a gente tem de tempo de execução por outro lado se eu tiver fazendo cálculo de um volume maior por exemplo o meu meu servidor de internet bank onde eu quero fazer transações bancárias o tempo de execução para o usuário é importante mas pro sistema pro banco dono desse sistema Ele quer saber quantas transações Esse sistema é capaz de atender quantas requisições de por exemplo
login paraa conta de verificação de extrato de verificação de saldo esse servidor vai ser capaz de responder por exemplo por hora por minuto por segundo então para outros aspectos a métrica mais importante é a vazão quantas transações quantas requisições eu tenho por unidade de tempo Então dependendo do sistema que eu tenho do sistema computacional ou do sistema em geral que eu tenho eu vou ter uma métrica que é mais adequado Então por muito tempo o tempo de execução foi a métrica mais importante pra computação e é a métrica que a gente vai começar a trabalhar
primeiro porque quando eu quero observar o funcionamento de um processador de um sistema específico essa é a primeira métrica que eu vou utilizar bom a gente tem que pensar Então qual que é o impacto do desempenho né Por que que é importante eu olhar desempenho um Primeiro passo é para pensar nas questões de melhoria por exemplo pra gente pensar lá no começo da década de 80 itel tinha o pent 1 286 ele era capaz de executar o nosso algoritmo de ordenação num determinado tempo de execução o que que aconteceu quando eu troquei quando o usuário
trocou esse Pente 1 286 Para Um Pente 1 386 esse tempo de execução diminuiu porque o houve uma evolução no processador houve uma melhoria na capacidade de execução desse processador e ele foi capaz de diminuir esse tempo de execução por outro lado se a gente pensar em tecnologias mais atuais o i7 ele é um processador que tem múltiplos núcleos múltiplos cores então o que que acontece quando eu vou rodar esse meu algoritmo de Bubble sort em cima de um processador como o is o tempo de execução vai diminuir pela mudança de tecnologia pela mudança de
gerações se eu comparar com o meu 286 com o meu 386 mas não houve um ganho significativo porque esse meu processador tem do 3 4 núcleos o o aumento do número de núcleos no processador para uma tarefa que é linear como é o caso da ordenação uma tarefa sequencial ela não vai prover nenhum Impacto nenhuma melhoria então a vazão não se altera por outro lado se eu pensar naquele meu servidor do banco de novo né em que eu tenho múltiplas transações sendo solicitadas por múltiplos usuários simultaneamente a medida que esse servidor é capaz de atender
mais transações porque ele dispõe de mais processadores de mais núcleos a vazão dele vai melhorar a capacidade de resposta desse sistema vai melhorar porque a invés de tratar por exemplo 100 transações ele vai ser capaz de tratar se ele tiver dois núcleos 200 por exemplo Então eu preciso observar Qual que é a alteração Que tipo de impacto ela tá causando então por exemplo aqui a trocar o processador por uma versão mais rápida vai fazer com que eu tenha um ganho no meu tempo de execução trocar ou adicionar mais processadores vai fazer tipicamente com que eu
tenha uma variação na vazão desse sistema computacional bom Quais os fatores Então são mais relacionados ao hardware né porque a gente falou na aula passada da questão do algoritmo a gente falou da questão da linguagem do compilador a gente falou do sistema oper ial falou do nosso processador falou do sistema de entrada e saída O que que tá mais próximo né desses elementos todos do meu hardw que é o nosso foco aqui do da disciplina então justamente eh quando eu quero observar esse tempo a gente vai pensar naquela camada de abstração que é a o
Isa o conjunto de instruções da minha arquitetura é isso que vai ter um impacto maior no hardware como eu lido com esse Isa e como esse meu Isa vai fazer para se relacionar com as instruções e com essa execução tá bom antes da gente entrar nessa fórmula de cálculo de tempo de execução vamos estabelecer alguns critérios de comparação alguns critérios de avaliação desse desempenho com relação ao tempo de execução primeiro critério que a gente precisa estabelecer é como é que a gente faz comparação de desempenho por exemplo se eu tiver aquela minha máquina a meu
computador a aquele que tem um processador de uma determinada geração e eu quero comparar com uma máquina B que é um processador de uma outra geração então eu vou medir um tempo de execução por tenho que usar o mesmo programa eu tenho que ser coerente no meu critério na minha metodologia então eu vou usar o mesmo programa vou rodar o mesmo algoritmo nas duas máquinas e vou medir esses tempos de execução então estabelecendo a fórmula sendo a máquina para saber a máquina a quantos por cento ela é mais rápida que B eu vou dividir o
tempo de execução de B pelo tempo de execução de a e eu vou chegar num número num número maior que um Eu espero né se a máquina a é mais rápida que B esse meu resultado vai ser maior que 1 portanto a parte fracionária desse meu resultado é quantos por cento a é mais rápido que B se eu chegar num resultado menor do que um quer dizer que a máquina B é mais rápida bom como a gente acabou estabelecendo ali que o desempenho tá relacionado ao tempo de execução Então por muito tempo na computação ao
longo de vários anos a gente estabeleceu que o desempenho é o recíproco do tempo de execução Ou seja é o inverso então aqui eu tenho alguns critérios estabelecidos né eu tô falando de um programa I Então é o desempenho de um programa I numa máquina num sistema SJ tá porque se eu pegar esse mesmo programa i e executar numa outra máquina numa outra situação eu vou ter um tempo de execução diferente logo eu vou ter um desempenho diferente para essa máquina máquina bom ainda estabelecendo os nossos critérios as nossas comparações tá se eu quiser considerar
uma melhoria de desempenho eu tenho que ter uma referência Eu sempre tenho que estabelecer uma referência nesse caso aqui a minha referência é a máquina b o meu sistema b então eu vou considerar a melhoria que apareceu nesse sistema a menos então o desempenho do sistema a menos o desempenho do sistema B dividido pelo desempenho do meu sistema B tá então de novo eu tô estabelecendo aqui uma referência com o sistema b e isso vai me dar um ganho tá então essa relação estabelece um ganho de um sistema para o outro tudo bem Ah lá
bom como é que eu calculo esse tempo de execução efetivamente né eu preciso conhecer as características desse processador que eu estou executando o que que eu preciso conhecer nesse processador primeira questão que aparece aqui é o tempo de ciclo ou a taxa de clock ou seja qual que é a frequência do meu processador ele é um processador de 2 GHz 3 GHz 3.5 GHz né esse tempo de essa frequência do processador tá associada ao tempo de ciclo o tempo de ciclo é o tempo que vai demorar para que uma instrução seja executado no meu fluxo
de dados então lá na se a gente pensar na unidade nas componentes do nosso computador o processador ele é composto pelo fluxo de dados e pela Unidade de controle e Justamente esse tempo de ciclo é o tempo que eu vou demorar para executar uma instrução no meu fluxo de dados bom mas eu não tenho só uma instrução para ser executada no meu computador eu tô executando por exemplo o meu programa de algoritmo de busca né a gente já viu que o número de instruções de máquina que eu vou executar depende do meu algoritmo depende do
da minha linguagem depende da arquitetura isso tudo vai gerar um volume de instruções que vão demandar múltiplos ciclos do meu processador então primeira coisa que eu preciso saber é quantos ciclos da Minha CPU eu preciso para executar esse meu algoritmo de ordenação por exemplo se eu souber um número de ciclos e o meu clock é minha frequência eu sei quanto tempo vai demorar para executar esse processo bom como é que eu posso melhorar o desempenho então olhando pra nossa fórmula aqui eu posso tentar diminuir o número de ciclos de CPU né então eu posso pensar
em mexer no meu programa na minha linguagem de al nível no meu algoritmo ah ou Mais especificamente aqui já pensando no nosso domínio né de conhecimento eu posso tentar melhorar o meu fluxo de dados fazer um fluxo de dados mais eficiente que eu possa ter a instruções melhores mais interessantes para se executar então se eu conseguir reduzir esse número de ciclos eu diminuo o meu tempo de execução o outro componente que foi perseguido por muito tempo pela indústria foi a taxa de clo né Ou seja eu tô dividindo aqui na nossa forma pela clo pela
frequência do processador então é interessante pensar que se eu conseguir aumentar essa taxa eu vou diminuir meu tempo de execução então a mais natural que a gente tem quando vai pensar em que computador eu vou comprar né é olhar a frequência do clock desse processador ele tem 2 GHz tem 3 G tem 4 GHz quanto maior esse número menor vai ser o tempo de execução de um programa e isso foi uma grande motivação pra evolução da indústria de computação do projeto de novos hardwares ao longo da evolução Então vamos tentar aumentar essa taxa de clock
porque ela tá relacionada diretamente ao meu tempo de execução e vai fazer com que eu tenha uma melhoria de desempenho bom o que que mais está escondido nessa questão do desempenho da instrução né como como é que eu chego naquele número de ciclos de CPU que eu preciso de um programa como é que eu sei qual que é esse valor já que a a frequência de clock é alguma coisa que eu leio lá no manual mas esse número de ciclos é alguma coisa que eu preciso detalhar um pouco mais para entender o que tá acontecendo
Então se a gente observar aqui na nossa fórmula o número de ciclos é substituído por esse produto IC x CPI o IC é o número de instruções de máquina ou seja se a gente lembrar de novo da aula passada a gente tinha as nossas instruções de alto nível elas vão ser traduzidas pras pra linguagem pra representação assembly e depois traduzida pra instrução binária Então eu preciso contar quantas instruções eu tenho que vão ser executadas no meu processador isso é o IC é o instruction count segundo componente é o CPI é ciclos por instrução ou seja
quantos ciclos demora para executar cada uma dessas instruções de máquina por exemplo se eu tenho que fazer uma instrução de soma né eu vou somar o conteúdo de dois valores e vou armazenar na terceira posição essa instrução de soma Vai demorar um determinado número de ciclos se por outro lado eu tenho que fazer uma multiplicação a multiplicação é uma instrução muito mais complexa que a adição ela precisa de mais ciclos né Nós vamos discutir isso um pouco mais pra frente mas a multiplicação é uma instrução mais complexa então se eu tô executando uma instrução de
adição ou uma instrução de multiplicação eu vou ter um número de ciclos por instrução diferente então para cada tipo de instrução eu vou ter um determinado número de ciclos por instrução e isso depende da minha Isa isso depende da arquitetura que eu tô utilizando se eu tiver trabalhando com arquiteturas diferentes eu vou ter valores diferentes de CPI tá então um determinado programa ele vai ter um número de instruções de máquina um número de ciclos para cada uma dessas instruções de máquina e um número de segundos que vai tá associada às características dessa implementação dessa arquitetura
que tá associado com a frequência dele então todos esses componentes são importantes pra gente chegar na questão do desempenho quando a gente quer otimizar quer melhorar esse sistema a gente pode olhar para cada um desses três aspectos se eu quero melhorar a contagem de instruções Isso tá mais relacionado ao meu algoritmo tá mais relacionado ao meu compilador se eu quero melhorar o número de ciclos por instrução isso tá bem próximo do que a gente vai olhar aqui nas melhorias nos avanços tecnológicos do hardware do desempenho do processador da organização desse computador assim como o meu
tempo de ciclo é extremamente importante a gente lembrar da lei de andal tá a lei de andal tá relacionada com ah justamente aquilo que a gente busca melhorar nessas nessas o que a gente Dev ela serve como orientação do que que a gente deveria buscar melhorar em um sistema computacional tá então quando eu tô compar dois sistemas por exemplo meu sistema Inicial s0 e meu sistema melhorado SM eu vou ter um ganho com relação a essa melhoria tá O que a lei andal diz pra gente né e aqui a gente tem a fórmula é que
esse ganho vai depender da fração de tempo que essa melhoria é usada tá então por exemplo no meu algoritmo de ordenação Vamos a gente vai ter uma porcentagem de instruções que vai trabalhar com a leitura de posições de memória a gente vai fazer algumas operações aritméticas então a o que eu preciso identificar é quantos por cento dessas instruções são de um tipo e são de outro né mas não basta eu olhar só para algoritmo de ordenação eu tenho que olhar pro no caso do meu desktop pros vários tipos de programas que estão sendo executados e
aí por exemplo se eu quero fazer uma melhoria no meu sistema de ponto flutuante para fazer cálculos matemáticos mais complexos Quantos por cento do tempo eu vou usar essa melhoria no meu algoritmo de ordenação provavelmente nada né se eu pensar num outro algoritmo mais complexo eu vou usar 10% do tempo então mesmo que eu tenha um ganho significativo aqui na melhoria do meu sistema de ponto flutuante se essa fração de tempo que eu vou usar essa melhoria for muito pequena né esse ganho Total vai ter um impacto muito pequeno por essa melhoria ou seja o
ganho no desempenho geral não é proporcional a melhoria em um aspecto específico eu preciso observar Qual que é a fração de tempo que essa melhoria vai ser usada como um todo no meu sistema E aí Justamente por isso vem essa esse resumo essa mensagem da leg andal que o que eu tenho que fazer é tornar o meu caso comum rápido eu preciso olhar para esse meu sistema computacional para esse conjunto de instruções que rodam no meu processador e observar Quais quais instruções vão ser executadas vão ser usadas na maior parte do tempo e aí sim
ter uma melhoria nesse conjunto de instruções que é usado na maior parte do tempo para que eu tenha um ganho significativo no desempenho do meu processador bom em resumo nós temos lembrando de novo dos quatro itens que afetam o desempenho que nós discutimos aula passada temos algoritmo linguagem de programação compilador e arquitetura do conjunto de instruções pensando na nossa fórmula de desempenho o algoritmo vai afetar a minha contagem de instrução e dependendo da esolha que eu fizer de instruções pode afetar o CPI o número de clocks por instrução a linguagem de programação vai afetar de
novo contagem de instruções e CPI o compilador continua afetando esses mesmos dois itens Então as camadas mais abstratas que dependem menos do processador do que a gente vai discutir no curso elas trabalham mais com IC e CPI O que que a gente consegue ter ganho de desempenho quando a gente tá falando do processador do que a gente vai discutir aqui nessa disciplina a gente consegue interferir nos três elementos eu consigo mexer na minha contagem de instruções porque para uma dada arquitetura eu vou determinar Quais são as instruções que ela pode executar ela pode ter instruções
mais simples instruções mais complexas isso vai fazer com que eu tenha o número de contagens de instruções diferentes vai afetar o número de clocks por instrução Pode ser que eu tenha as instruções mais lentas que demoram mais clocks ou eu tenho instruções mais eficientes que vão usar somente um clock e vai mudar o meu tempo de ciclo né o tempo que demora para eu executar uma determinada instrução no meu processador Então nós vamos discutir nas próximas aulas nas estratégias possíveis para melhoria do desempenho justamente como é que isso afeta esses elementos bom referências esse assunto
tá na sessão 1.4 do nosso livro texto organização e projeto de computadores interface hardware software [Música] [Música] m n
Copyright © 2025. Made with ♥ in London by YTScribe.com