olá hoje nós temos aula de número 10 de organização de computadores e o assunto são organizações avançadas do processador então na aula de número 99 discutimos o desenho básico do mix do fluxo de dados do caminho de dados do mix e nós vimos que isso tem algumas implicações com relação ao desempenho que eu posso ter dado que no ciclo único que é o caso que a gente final de número 9 o período do ciclo é determinado pelo maior atraso no meu fluxo de dados então num desenho de ciclo único do mpe eu estou limitado pelo
desenho meu fluxo de dados o meu desempenho então a grande questão que vem é como eu posso melhorar o desempenho do meu processador nós vimos nas primeiras aulas sobre o desempenho que foram buscadas estratégias de organizações paralelas para melhorar o desempenho é justamente essa é a resposta há como melhorar o desempenho continua agora vai trabalhar com ciclo único uma estrutura única de fluxo de dados tentar buscar formas de paralisar a execução dessa instrução bom quando a gente pode pensar em formas de paralisar é o primeiro exemplo que o livro do reality do partido ter centrais
é um exemplo que é bem no contexto do aluno que mora no la no colo e dineck dividir o dormitório tem que cuidar da sua própria lavanderia então imagina que você tem quatro alunos a ana roberto carlos e o diego e eles vão ter que lavar as suas roupas né e aqui nesse exemplo seqüencial que a gente tem a gente tem o primeiro aluno descendo faz as etapas todas de lavagem de roupa quando acaba nem o segundo faz as suas etapas de lavagem de roupa acaba vendo o terceiro e depois aqui venho quatro então a
gente vê aqui que duas horas para cada sequência com 8 horas os quatro alunos terminaram de lavar suas roupas mas a gente pode observar e pensar poxa mas a máquina de lavar louça roupa ficou vazia aqui por duas ou por má hora e meia ela ser usada novamente se esse recurso estava ocioso o que me impede de fazer o melhor uso dele é porque quando acabou de lavar roupas e não poderia o próximo começar a lavar roupa então essa idéia do pai dele nessa idéia da utilização dos recursos de paralisar o uso dos recursos então
a tarefa como um todo envolve essas quatro etapas lavar secadora aguardar mais uma vez que eu tenho um dos recursos disponíveis eu poderia começar a primeira etapa da próxima tarefa então começando aqui nesse exemplo eu tenho a primeira tarefa foi começado às seis horas da tarde quando passou a primeira tarefa taça para o segundo estágio depois que foi concluída a segunda pessoa que a segunda a tarefa pode começar a usar o primeiro recurso então eu tenho um paralelismo entre as várias atividades entre os vários alunos na execução das suas tarefas então esses para esse paralelismo
a execução do meu programa como toda a minha seqüência de atividades como um todo é possível porque estou utilizando recursos diferentes dentro do meu processo da minha lavanderia tá tão justamente a idéia do pai pillai nieheus utilizar recursos que estão ociosos para executar tarefas diferentes e assim ter um ganho com relação à execução então a tarefa toda aqui as quatro lavagens de roupa fechando todo ciclo vão durar três horas e meia se eu tivesse estratégia de paralelismo então eu tenho um ganho dessa situação com paralelismo com o pipeline com relação à situação sempre online situação
completamente seqüencial de aproximadamente 2,3 tá quando dividiu oito que é o tempo que dura a essas tarefas todas por três e meio que o tempo que durar essa tarefa que eu tenho esse ganho de 2,3 tá a a gente pode não generalizar que o número de estágios que eu vou criar vai me ajudar como indicação do ganho é do que eu vou obter mas isso é um pouco variável dependendo da relação que a gente tem entre os tempos das tarefas porque essa tarefa de guardar por exemplo for rápida duração a 15 minutos mas a tarefa
de lavar demorar uma hora eu vou estar limitada por essa minha tarefa de uma hora na hora de tudo para ler lisbo das várias tarefas que eu vou executar então esse conceito de pai pe la ea gente pode pensar em aplicar esse conceito ao processador né a gente pode observar o poeta o fluxo de dados domingo se pensar como é que a gente pode criar essas idéias de paralelismo bom então lembrá-la do mix a gente tinha basicamente cinco etapas envolvidas na execução de uma instrução nem todas as instruções usavam essas cinco etapas mas a gente
tinha essa 50 vagas primeiro a busca de instrução na memória chamado de instrucção fat ou efe segundo a gente tinha decodificação da instrução e leitura de operando soul e de instrução decoud terceiro tinha execução associada à unidade lógico aritmética a gente pode chamar que dizer de execução o cálculo de endereço de memória aí finalmente eu tinha o acesso à memória de dados para o load o par store para outras instruções e se um ciclo vicioso por chamar isso de man e finalmente eu tenho estado de escrita no registrador que inglês a gente chama the right
beck e por isso que aparece aqui wb eu estou escrevendo no registrador esses dados que obtive ou na urna ou na memória então eu posso considerar esses cinco estágios como os estágios do pai pillai do mix em função das várias atividades que a gente tem no fluxo de dados esses cinco estágios podem ser pensados para organizar e pensar no paralelismo bom como é que a gente faz isso pro mix primeira coisa que eu preciso observar é o caso da instrução de ciclo único então por exemplo se um estranho fecha a busca de sua memória para
determinada seleção de memória de de componentes numa determinada tecnologia poderia demorar 200 picossegundos pensar a leitura de registrador pode demorar sempre com os segundos execução da ola 200 acesso à memória de dados 200 escrita de registrador 100 quando a observar cada uma das instruções e ver que elas têm duração variável no caso do load que era o mais lento não é quem vai determinar o nosso ciclo de de operação do fluxo de dados ele tem todos os estágios demoraria 800 os segundos no caso da instrução de história ela vai ficar ociosa parte do estágio de
escrita ela seria mais lenta mas ela precisa esperar essas tarefas e concluída por outras pela instrução a gente não pode ter ciclo variável duração variável de clock isso contraria os princípios de funcionamento tá então apesar das outras instruções poderem ser mais curtas num ciclo único elas têm que esperar o tempo necessário à execução do load que a instrução mais lenta bom como é que eu posso traduzir esses meus blocos de execução agora pra pensar nesse nosso diagrama pra pensar no desenho do painel online então por exemplo que uma instrução de loudi vai demorar 800 pixels
segundos eu tenho todos os módulos dos meus recursos sendo acessados aqui e se acham frete leitura de registrador ola acesso à memória de dados e escrita do registrador depois eu tenho outra instrução de longe vou repetir aqui de novo todas as minhas etapas se eu tiver nesse lupi continuo aqui de instruções de loudi eu teria essas 800 pico segundo sendo repetidos quanto as instruções eu tiver quantas vezes quantas vezes esse número vezes 800 para saber o tempo total de execução a idéia do pai pioline é que eu dividi meu estágio do mpe sensores fat extracção
de kohl de execução memória o hatchback que uma instrução vai fazer o frete quando essa primeira instrução passar por decoud eu posso pegar uma segunda instrução e fazer o frete dela quando até a primeira instrução foi a preservação a segunda vai pro decoud e uma terceira instrução entra no flat então eu vou ter as instruções em estágios diferentes do meu pai de aline mas sendo executadas de maneira paralela que é o que a gente tem neste diagrama a primeira instrução fez o fat de de 0 a 200 e poucos segundos a segunda instrução a primeira
instrução passa para a escrita não registrar a leitura do registrador a segunda instrução entra no flat a primeira instrução vai precisar de execução a segunda valeu o registador a terceira vai fazer o frete e assim por diante o poder num caso que eu poderia ter cinco instruções o meu pai pipeline mas é preciso lembrar que cada uma delas vai talco quando um estágio diferente do meu pai do meu fluxo de dados unidos obrigatoriamente eu não posso ter duas instruções no mesmo estágio do fluxo de dados para pilar domingues é sempre uma instrução por estágio com
o máximo de 5 instruções sendo executadas cada uma em um dos estágios do mpe pi line o aspecto importante a gente observar que é que os registradores que eu leio e que eu escrevo são os mesmos bancos registradores então a decisão que a gente que os projetistas 2000 estiveram aqui é que a leitura do registrador acontece na segunda metade do meu ciclo ea escrita acontece na primeira metade do ciclo porque isso é interessante porque se eu escrevo na primeira metade do ciclo com a instrução seguinte forley e esse valor esse valor já está atualizado então
é importante essa decisão sobre quando ocorre a escrita e quando ocorre a leitura dessa forma o tempo de execução de instrução praticamente não mudou continua sendo da ordem de 800 pixels segundos o que eu ganhei eu vou ter uma instrução pronta a cada 200 então em termos de vazão houve um ganho significativo de execução então a técnica de pipeline não permite ganho no tempo de execução em alguns casos como a gente vai ver aqui pode até ter um over head têm um custo a mais que ela pode aumentar um pouquinho tempo de execução de uma
única instrução mas do ponto de vista de evasão de tributos o que eu vou ter é um ganho porque agora a cada 200 pico segundo eu tenho uma instrução sendo concluída a execução dela bom só ao toque uma instrução inteira vai demorar agora meu pico segundos para ser executado porque cada estágio do meu mix tem duração de 200 pips segundos eu tenho dos cinco estágios portanto o tempo total de execução de uma única instrução aqui agora new então houve um aumento de 800 para mil só que a cada 200 eu tenho uma instrução que vai
terminar de ser executada bom o maps ele favorece se a execução né de um de papel a implementação de pipeline então se a gente lembrar da aula que a gente discutiu características do conjunto de instruções falou de risco e disse que a gente viu que as arquiteturas de conjunto de instruções de característica 'características risk tinham justamente essas características do mpe que vão favorecer a implementação de pipeline que características são essas primeiras instruções possui o mesmo tamanho no caso do nips 32 bits isso facilita o processo de instrução ler uma palavra da memória que está alinhada
eu consigo fazer se um ciclo né então isso facilita a leitura da instrução se facilita a decodificação porque eu sei que sempre os primeiros seis bits da minha palavra de instrução vão dizer qual é o picou de qualquer instrução que tem que ser feito pelo meu fluxo de dados como eu tenho poucos formatos de instrução tipo r tipo e tipo j no caso do mix é fácil a decodificação a gente viu como a montagem do nosso fluxo de dados foi facilitada para definição das leituras e das escritas nos registradores outro aspecto é o fato de
ser uma cara uma arquitetura load store né ou seja eu tenho tempo dos do ponto de vista dos estágios de execução de calcular o endereço num ciclo e fazer o acesso à memória no ciclo seguinte está explicitado nos cinco estágios do mix no terceiro estágio cálculo endereço no qual estádio acesso à memória e finalmente o fato do alinhamento da memória é facilita né então minha palavra de 32 bits memória de 32 bits tudo alinhado então tanto a leitura da memória de instrução quanto memória de dados é facilitada então essas características do mix e de arquiteturas
risco em geral como é o caso do ar vão facilitar a implementação do pacote online bom mas implementar pipeline também não é de graça né sempre na engenharia a gente vai ter uma relação de de custo-benefício 1 foi dof que a gente vai determinar a gente vai ganhar um aspecto mas vai ter um custo relacionado a esse ganho que eu vou ter que pagar do ponto de vista de decisão de projeto e os custos do pai por lá então associados à ideia de razões inglês ou de conflitos perigos né uma tradição é justamente esses razer
diz eles vão ser situações que vão impedir o fluxo normal das instruções no papo online seriam situações em que eu não conseguiria continuar executando a segunda instrução ou porque a instrução que se a primeira instituição mais velha no pilar e não pode continuar a execução não passou por estágio seguinte ou porque a instrução seguinte né a instrução e mais um ela precisa de alguma informação sendo gerada pela instrução e nós podemos dividir os razão dos conflitos em três categorias primeiro os conflitos estruturais ou do inglês professor razer diz um recurso necessário está ocupado por exemplo
eu preciso ler o registrador que está sendo escrita por outra instrução então aquela nossa decisão de escrever na primeira metade do ciclo helena na segunda metade do ciclo tem a ver justamente com essa questão do conflito estrutural o recurso é o mesmo o registrador eu preciso alinhar isso no tempo compartilhar no tempo esse recurso para minimizar o impacto desse recurso estrutural desse conflito estrutural segundo aspecto só os conflitos de dados os conflitos de dados de arrasar tem justamente a ver com a situação de um dá uma instrução está produzindo um dado que a instrução seguinte
vai precisar por exemplo quando eu tenho que fazer o à iguape mais ser onde os valores b e c estão armazenados na memória eu vou precisar fazer o download do valor db fazer o download do valor de ser para depois fazer a instrução de soma mas eu não terminar as instruções de loudi de bay disse eu não posso fazer a terceira instrução que a soma porque esses dados não estão disponíveis e de maneira análoga para eu poder inscrever o resultado a na memória eu preciso que a instrução de soma tenha sido concluída então preciso observar
essa sequência de instruções como é que está sendo essa produção de dados e aí finalmente o terceiro tipo de conflito que a gente tem são os conflitos de controle quando eu vou saber se aquele brindes aquele desvio condicional vai ser executado para saber qual é a próxima instrução que tem que carregar então nós vamos falar um pouquinho mais desses dois tipos de instruções o primeiro deles o da razer diz então eu tenho a instrução é de deter 0 t1 para armazenar e 70 e depois a subtração de s 0 e 3 para ser armazenado em
t2 eu preciso produzir o resultado de zero pra poder usar na instrução de subtração o resultado de 1 a 0 ele vai ser inscrito no registrador somente aqui no quinto estágio só que essa instrução de subtração gostaria de ler o registrador com o dado que ela vai fazer uma execução no meu segundo estágio né então pra que eu possa ter a escrita ea leitura isso quer dizer que eu vou precisar perder dois ciclos de execução do meu patrimônio está inserida duas bolhas a não existe no pai foi lá e voltar no tempo eu não posso
ter escrita que no instante 800 ea leitura no instante 200 não dá pra eu voltar no tempo com a informação eu preciso estar com os estágios alinhados portanto para eu poder alinhar a escrita na primeira metade dos fique com a leitura na segunda metade do ciclo eu preciso inserir essas bolhas então isso vai prejudicar o desempenho do meu pai pillai e que a gente pode fazer para melhorar bom depois de pensar um pouco a gente pode aplicar a idéia de ford ou o bai ps ou em português o encaminhamento poxa mas se a aluna já
terminou de calcular porque eu não posso adiantar essa informação internamente para o próximo estágio para a próxima instrução eu preciso continuar escrevendo no registrador tá mas eu poderia adiantar a informação para a próxima instrução então é justamente isso que está sendo feito eu vou precisar fazer ligações adicionais no fluxo de dados e aí eu posso pegar o resultado que saiu da aula e já passar pra entrada da posse na urna então o valor que o registrador de instrução de subir leu vai ser ignorado pra que eu possa usar o valor correto que foi adiantado que
foi encaminhado de uma instrução para a outra por isso o termo by pass e aqui estou fazendo uma ligação é externa para passar essa informação a instrução segue o fluxo normal de execução as duas mas eu consegui adiantar essa informação e com isso não preciso mais nenhuma boa entre essas duas instruções de ad de subir então com essa melhoria no fluxo de dados eu consegui garantir a execução contínua mas o ford sempre vai resolver os meus problemas não nem sempre se eu tiver uma instrução de loudi seguir daquela de seleções sub o meu dado só
vai estar pronto na instrução no final do estágio de memória se está pronto no final do estágio de memória mesmo adiantando o início do estágio de execução como eu não posso voltar no tempo eu vou precisar inserir uma bolha então ford hyundai ps se eu tiver duas instruções de hula seguidas duas instruções que o resultado é produzido no final do estágio de execução eu vou eliminar completamente as bolhas mas no caso de uma instrução de loudi e uma instrução de lula eu vou precisar inserir uma bolha por causa do alinhamento aqui dos estágios isso já
é um ganho significativo de desempenho a a gente vai ver né existem outras técnicas que podem ser ajudados por exemplo o controlador pode fazer o que a gente chama de reordenação de código a reordenação de código permitiria que eu trouxesse uma instrução que não vai afetar a execução correta do meu programa pra esse buraco pra essa bolha para que eu possa ter a execução correta do meu programa no final e não ter essa perda dessa instrução há por ora a gente sabe que no caso de loudi seguido de subir o preço que o fluxo de
dados vai te fazer apagar essa bolha que vai ser inserida bom no caso dos desvios de controle né é nos da maneira como nosso fluxo está desenhado a gente só vai resolver só vai saber se aquela instrução de desvio vai ser executada lá no meu estado de execução depois que eu fiz a comparação com o cálculo de endereço então isso faria com que eu tivesse várias bolhas meu pai de larissa tivesse que esperar o resultado da minha instrução de desvio para saber o que eu vou executar o primeiro estratégia que a gente pode fazer é
tentar adiantar a resolução do desvio eu poderia o mais cedo que eu posso trazer essa resolução é para o estágio de d porque eu preciso lento só na memória é capaz de decodificar a instrução e aí eu poder adicionar o meu fluxo de dados um comparador ali para fazer a comparação dos dois registradores que eu acabei de ler e depois eu poderia calcular o endereço para onde vai ser desviado e aí uma vez que já sei pra onde vai ser desviado eu só teria uma bolha inserida no meu pai de aline para fazer esse cálculo
da instrução de d já então é justamente isso que a gente está discutindo ainda eu posso adiantar essa resolução mas ainda assim se eu adiantar resolução para o estágio de d eu vou ter uma bolha inserida no meu pai pillai me para que eu possa fazer a busca da instrução correta aqui né eu resolvi aqui dentro são deles viu e aqui eu vou ter essa bolha para poder fazer o frete da instrução correta bom isso para o caso do mix não é tão ruim ele só tem cinco estádios pois seria uma bolha mas processadores mais
modernos eles têm muito mais estágios e dificilmente eu consigo trazer tão cedo um processador tem muito estágio então é ruim essa dependência não poder saber o que vai acontecer com a instrução então a partir daí aparece o conceito de previsão desviu idéia de previsão de desvio se eu tiver informação suficiente histórica ou simplesmente eu pra fazer uma previsão dinâmica ou eu posso simplesmente ter previsões táticas eu vou chutar eu vou chutar que a instrução vai ser executado desvio vai ser executado não vai ser executado então essa previsão do desvio vai me dar uma sequência de
instruções se eu acertar minha previsão ótimo eu ganhei se eu errar eu vou ter que voltar e fazer a coisa certa então no caso do mpe a gente tem previsão estática dica desviu não vai ser executado porque o desvio não vai ser executado na presença de taxa porque já tenho valor de pc mais 4 após fazer a carga da instrução correta então no caso do mpe se eu assumir que a previsão é não executada e eu fizer e depois que o desvio foi calculado verificar que ela não foi executada eu ganhei porque eu não tive
nenhuma bolha eu errar eu falei que ia ser executada comecei a executar e aí eu errei eu vou transformar aquela instrução errada numa bolha ou seja eu não perdi porque já perderia de qualquer forma essa bolha você não fizesse nenhum texto ação então no caso de previsão de desvios o que acontece é que eu só vou perder eu só votei over head caso eu erre minha previsão é por isso que na área de arquitetura de organização de computadores um assunto de pesquisa é a previsão dinâmica e esses esses algoritmos de previsão eles chegam a taxa
de acerto os maiores do que 99 por cento bom para a gente finalizar a aula de hoje eu gostaria de mostrar pra vocês um outro modelo de paralelismo que vai além do pai p align justify modelo de paralelismo que é o exemplo aqui do opteron x 4m de a gente pode identificar os vários estágios de execução eu tenho aqui a busca da instrução né aí eu vou ter aqui uma fila de instruções e aqui eu vou poder fazer então iniciar a execução das instruções das minhas várias unidades funcionais então o que eu tenho aqui são
unidades funcionais em paralelo eu tenho uma aula o que faz multiplicação de inteiros aqui duas completas de inteiros ola de ponto-flutuante outra o look faz multiplicação e as instruções especiais de ponto flutuante então eu tenho várias unidades funcionais em paralelo vou ter uma unidade de loudi história aqui embaixo seção memória de dados e aqui a unidade de escrita de conclusão da instrução que a gente obtém nesse tipo de modelo eu vou fazer sempre a busca de instrução em sequência tá a busca das instruções na memória é sempre sempre seqüencial vou fazer aqui a carga dos
meus operando os e eu vou poder tomar a decisão em função daquelas dependências de dados dependência de recursos de qual a instrução eu vou executar se eu tiver instruções que não tem nenhuma dependência e tiver recurso disponível eu vou disparar a execução dessas instruções em paralelo potencialmente essas instruções não poderão ser executados até fora de ordem mas o que acontece essa unidade de committee ela vai garantir que quando eu escrever no registrador quando eu terminar de executar uma instrução isso vai estar sempre sendo feito de maneira correta aqui não vai afetar a execução do meu
programa tá então o programa o processador sempre faz a carga em ordem da instrução posso ter execução fora de ordem mas a conclusão da instrução vai sempre garante que o programa está executando da maneira correta essa é uma outra forma de paralelismo que a gente chama de paralelismo e nível de instrução ou inglês instrucção leva parlez isso é utilizado nos processadores modernos como referências para esse assunto de hoje a gente tem que somente a sessão 4.5 do livro do gênese do patterson e acessar o site ponto 5 do livro do harry