Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista 2 2020.2 Infraestrutura de Hardware Ciência da Computação 1. Sabe-se que o desempenho ao utilizar pipeline oferece uma certa melhoria, porém, nem sempre todas as características do pipeline são satisfeitas, gerando assim alguns conflitos. Responda as alternativas abaixo baseando-se nos tipos de conflitos existentes no pipeline: a) Quais são os tipos de conflitos que podem ocorrer evitando que uma nova instrução seja inicializada no próximo ciclo em uma implementação pipeline? Explique-os e dê exemplos. R: os conflitos são de dados, estrutura e controle, e cada um acontece de uma forma: ● O conflito de dados acontece quando existe dependência entre os dados numa instrução, como um t0 estar em duas operações de sub, uma depois da outra, no mesmo ciclo, quando na verdade a cpu precisa de dois ciclos entre as duas operações; ● Já o conflito de controle existe quando existe uma alteração no fluxo de controle - Desvios, chamadas e retornos de subrotina; - Busca de nova instrução depende do resultado da instrução anterior; - Pipeline nem sempre pode buscar a instrução correta. Um exemplo de conflito de controle seria um branch que, dependendo do resultado, pula para um load, enquanto o pipeline não para e continua pegando instruções. Porém, o branch só é resolvido (calculado endereço de para onde ele deve desviar) e confirmado no quarto estágio e, enquanto isso, as instruções dentro do branch já entraram no pipeline. ● Por último, os conflitos estruturais acontecem quando tenta-se acessar algo já ocupado, como por exemplo um lugar na memória. b) Quais são as possíveis soluções atreladas a cada um desses tipos de conflitos? R: Geralmente os conflitos de controle são solucionáveis via algum tipo de mudança ou otimização no código, mas também pode-se fazer uma execução especulativa, congelamento de pipeline e manutenção dos desvios; Já os conflitos de dados possuem estratégias de hardware (forward e stalls) e software (NOPs ou, como citado acima, mudança ou otimização de código). E os conflitos estruturais geralmente são solucionados com duplicação (ou mais de dois, na verdade) de recursos, não usando as mesmas posições na memória. 2. Com base no seu conhecimento sobre pipeline, responda as seguintes alternativas: a) Compare as técnicas de implementação em pipeline, a multiciclo e a monociclo. Explicite a melhora que o uso de pipeline promove em relação às duas outras implementações e seu suposto lado negativo. R: Monociclo - cada instrução em um ciclo de relógio; - os sinais de bits se propagam pelos componentes combinacionais e dados podem ser escritos sequencialmente; - desvantagens: ciclo de clock determinado pela instrução mais lenta, duplicação de componentes. Multiciclo - execução dividida por etapas; - em um ciclo de relógio, apenas uma das etapas é executada para uma data instrução, ou seja, uma instrução é feita em vários ciclos de clock; - cada ciclo faz menos, ou seja, ciclos mais curtos; - é mais demorado? não necessariamente. Pipeline - coloca as instruções de forma sequencial; - faz operações e utiliza recursos que estariam dormentes no multiciclo até a virada do clock, o que melhora a eficiência; - a “desvantagem” é o maior custo operacional causado pela replicação de memórias e registradores. b) Descreva as características do processador MIPS (arquitetura) que permitem a implementação em pipeline eficiente. R: A ISA do MIPs foi projetada pensando no modelo pipeline, com todas as instruções de 32 bits para economizar tempo de processo e decodificação, além de ter poucas instruções e endereçamentos de load e store. c) Faça uma análise dos fatores que alteram o desempenho na técnica de Pipeline. R: Podemos citar como melhorias de desempenho o fato dos estados possuírem mesma duração, a execução ser sequencial e as instruções independentes. Porém, a dependência de dados e instruções de desvio podem diminuir o fator desempenho. 3. Buscando formas de melhorar o desempenho do pipeline, foi falado sobre duas técnicas que possibilitam essa melhoria: superpipeline e superescalar. Diante do que foi visto em sala de aula, responda as questões abaixo: a) Descreva a técnica de implementação superpipeline, suas vantagens e desvantagens. R: A técnica superpipeline explora o fato de que alguns estágios de pipeline executam tarefas que requerem menos de meio ciclo de clock. Com isso, um processador com velocidade de clock interno dobrada permite um aumento de performance de duas tarefas executadas em um único ciclo de clock externo. Portanto, a implementação de um superpipeline é capaz de executar duas fases de pipeline de cada vez. Algumas características são: - Quebra estágio em sub-estágios e cada sub-estágio faz menos trabalho que o estágio original; - Estágios menores demandam menos tempo para serem executados, ou seja, período menor e frequência maior; - Visa diminuir o tempo de execução de um programa. Possíveis desvantagens: aumento de complexidade, dependência e desvios. Com uma única memória, ela pode ficar sobrecarregada e não atender às exigências do pipeline. As instruções de desvio podem bloquear uma determinada instrução que teria que ser executada, além das dependências de dados poderem gerar problemas na hora de se executar um conjunto de instruções. b) Descreva a técnica de implementação superescalar, suas vantagens e desvantagens. R: A técnica de implementação superescalar permite que várias instruções sejam iniciadas simultaneamente e são executadas independentemente uma das outras, por replicar os componentes internos do processador, permitindo assim colocar várias instruções em cada estágio do pipeline. Essa arquitetura explora o paralelismo de instruções, com dois métodos principais de aumento da quantidade de potencial: aumentar a profundidade do pipeline para sobrepor mais instruções e replicação dos componentes internos do processador, permitindo que várias instruções sejam executadas em cada estágio do clock. Tem como principais características: - Possibilitar a execução de instruções em pipelines paralelos; - Pipelines paralelos são possíveis replicando unidades funcionais; - Utilizam uma combinação de otimização de compiladores e técnicas de hardware para aumentar o nível do paralelismo. Possíveis desvantagens: Maior custo operacional do hardware. 4. Explique o que são processadores multicores e como a comunicação é realizada entre os diferentes processadores, assim como o compartilhamento dos dados em sistemas de memória compartilhada e passagem de mensagens. R: Processadores multicores consistem em vários processadores num único chip, que são os processadores multicores, o core na verdade é uma cpu que está embutido num chip que é o microprocessador. A ideia por trás do uso de processadores multicores é ter um processador com mais de um núcleo, mas com um menor consumo de energia por core, pois eles compartilham alguns componentes e cada core trabalha com frequências menores já que eles vão trabalhar em conjunto. A classificação de multiprocessadores pode ser definida a partir de dois elementos principais: a Arquitetura do Computador e a Arquitetura da Comunicação. Quanto à arquitetura do computador a classificação pode ser feita pelo tipo memória que ela utiliza se é uma memória centralizada(tipicamente para sistemas pequenos, onde tem-se multicores, mas trabalha-se com uma memória centralizada onde vários processadores compartilham de uma mesma memória, na qual pode existir uma demanda alta dependendo da quantidade de núcleos que são colocados para acessar a memória, ou seja a rede que se comunica com a memória) ou uma memória fisicamente distribuída(ao invés de colocar tudo em única memória colocam-se várias frações pequenas da memória entre as quais uma determinada parte da memória está numa memória 1 outra parte na memória 2.. e os processadores podemacessar quaisquer dessas memórias ). O problema da memória centralizada é que quando existe uma grande quantidade de processadores, muitos destes estarão disputando acesso à memória a qual não vai conseguir atender a todos os pedidos gerando assim uma fila. Quando comparamos as duas organizações de memória em função da adição de processadores, a memória centralizada perde muito mais desempenho em relação à distribuída. Quanto à Arquitetura da Comunicação em arquiteturas paralelas existem dois modelos de comunicação, um é utilizado em memória compartilhada e o outro em passagem de mensagem. Na memória compartilhada toda vez que um processador quiser se comunicar com outro processador ele irá colocar algum dado em um espaço de memória compartilhado, que é um espaço que os diferentes processadores têm acesso, logo os diferentes processadores compartilham dados a partir de um suporte que o hardware fornece no qual um mesmo espaço de memória é compartilhado pelos diferentes processadores. A comunicação entre os diferentes processadores é feita através de variáveis compartilhadas entre os dois processos em dois processadores diferentes. Na passagem de mensagem um processador não tem acesso ao espaço de memória de outro processador, os diferentes processadores compartilham dados enviando explicitamente os dados (mensagem).A comunicação entre os diferentes processadores é feita através de primitivas de comunicação(send e receive). Um processador multicore, também conhecido como chip multiprocessador, combina duas ou mais unidades de processador (chamadas de cores) em uma peça única de silício (chamada de pastilha — die, em inglês). Em geral, cada core consiste em todos os componentes de um processador independente, como registradores, unidade lógica e aritmética (ALU), hardware de pipeline e unidade de controle, mais caches L1 de dados e de instruções. Além de várias cores, os chips multicore atuais incluem também cache L2 e, em alguns casos, cache L3. Os processadores multicore com maiores taxas de integração, chamados de sistemas no chip (SoCs, em inglês, Systems on Chip), também incluem memória e controladores de periféricos. 5. Fale sobre a abordagem Multi-Thread, citando seus objetivos, arquitetura e tipos. Além disso, descreva as vantagens e desvantagens de cada tipo. R: Como os processadores multicore trabalham com mais de um núcleo em seus processadores, esta atividade é definida por multithreads, e tem o escalonamento dos programas distribuídos entre os núcleos dos processadores. O SMT, simultaneous multithreading, tem como objetivo otimizar a utilização de recursos, melhorar desempenho e diminuir consumo, executando várias threads simultaneamente, evitando os desperdícios horizontais do processador. O SMT interpreta que existem vários programas em execução, e com maximização da utilização das unidades funcionais da thread, aumenta o cpi dos programas e consequentemente o desempenho do processador. O SMT permite que threads sejam processadas em paralelo dentro de cada núcleo. O processador executa normalmente as instruções de thread a cada ciclo de processamento, e quando este fica em estado de espera, ele executa em paralelo outra thread. A arquitetura das SMT requer replicação e lógica de controle de unidades, utilizadas nas threads. Os tipos de SMT são: Coarse-Grain: Evita troca de threads desnecessárias, aumentando assim a velocidade de processamento, apesar de possuir perdas de throughput em stops curtos, além do pipeline precisar ser anulado e preenchido nas trocas. Fine-Grain: Diminui perdas de paradas muito longas, mas retarda execução de threads prontas e sem parada. 6. Utilizando como base a CPU pipeline de cinco estágios que vimos em sala de aula (onde a leitura do banco de registradores é feita na segunda metade do ciclo do clock e a escrita é feita na primeira metade), responda quantos ciclos de clock serão necessários e faça o diagrama multiciclo do pipeline da execução do seguinte código abaixo nas seguintes situações: a) Sem unidades de forwards. R: b) Com unidades que permitem forwards EX -> EX e MEM -> EX. R: c) Se existir algum tipo de conflito no código acima, rearrume o seu código, de maneira que elimine o conflito e que o resultado se mantenha igual. Justifique a mudança feita. R: Existem conflitos de dados. Poderíamos usar NOPS, mas vou rearrumar o código mesmo. Como o compilador deve identificar conflitos de dados e evitá-los, podemos executar instruções independentes entre si e mudar linhas de código, contanto que não mude o resultado final. Então vou mudar o código da imagem acima para: add $s0, $s1, $s2 add $s5, $s2, $s7 or $s4, $s1, $s7 sub $s3, $s0, $s2
Compartilhar