Arquitetura de Computadores 2018.1
Relembrando... Memória Virtual
Relembrando... Memória Virtual Proteção de Memória
Relembrando... Memória Virtual Proteção de Memória TLB
Relembrando... Memória Virtual Proteção de Memória TLB Resumo Memória
Exercício Aula Passada TLB Página Cache Hit Hit Hit Possível, o dado está na cache, logo está na TLB e na RAM. Hit Hit Miss Possível, o dado está não está na cache, mas está na memória RAM. Hit Miss Hit Impossível, se a TLB der hit, não tem como haver uma falha de página. Hit Miss Miss Impossível, se a TLB der hit, não tem como haver uma falha de página. Miss Hit Hit Possível, o dado está na cache e na RAM, mas não está na TLB. Miss Hit Miss Possível, o dado não está na cache e nem na TLB, mas está na RAM. Miss Miss Hit Impossível, o dado não pode estar na cache, sem estar na RAM. Miss Miss Miss Possível, o dado está no disco somente.
Paralelismo Computação paralela é uma forma de computação em que vários cálculos são realizados ao mesmo tempo. Maior processamento geral. Aquecimento maior. Gerenciamento de memória mais complexo. Sistema mais estável: não para se um processador parar. Código mais complexos.
Paralelismo Processamento de um mesmo programa por mais de um processador: conflito de dados na memória. Processamento de mais de um programa por mais de um processador: concorrência de memória.
Paralelismo Dual Core Compartilha a memória cache entre os processadores. Core 2 Duo Cada processador tem sua memória cache independente.
Paralelismo em Instruções Instruções são executadas ao mesmo tempo por dois processadores diferentes. A memória e os registradores são os mesmos. Existem instruções que são dependentes umas das outras e recursos (registradores ou partes da memória) que não devem ser acessadas por dois processadores ao mesmo tempo. Para evitar esse problema usamos um lock, uma variável que é zero quando o recurso está livre e 1 quando ele está sendo utilizado.
Load Linked e Store Condicional Load Linked: Lê um valor da memória em um registrador. Store Condicional: Coloca um valor de um registrador na memória somente se ele não foi mudado desde o último acesso. loop: ori $t0, $zero, $s4 # t0 = s4 ll $t1, 0($s1) # t1 = s1[0] sc $t0, 0($s1) # beq $t0, $zero, loop add $s4, $zero, $t1 A instrução sc faz s1[0] = t0 e t0 = 1 se o conteúdo de s1[0] não mudou desde a instrução ll, senão faz t0 = 0 e mantém s1 intacto.
Paralelismo em Aritmética Operações em vetores e matrizes costumam se repetir em cada um dos elementos. Uma operação aritmética pode ser realizada de uma só vez em mais de um dado. A arquitetura ARM possui instruções para vetores com 128 bits de dado que podem ser divididos em 16 de 8 bits, 8 de 16 bits, 4 de 32 bits ou 2 de 64 bits. SIMD: single instruction, multiple data.
Subword Operações: VADD, VSUB, VMAX, VMIN, VABS, VNEQ Tipos: I8, S8, U8, I16, S16, U16, I32, S32, U32, I64, S64, U64, F32. # d0[i] = d1[i] + d2[i] como 16 ints de 8 bits com sinal VADD.I8 D0, D1, D2 # d0[i] = d1[i] - d2[i] como 4 floats de 32 bits VSUB.F32 D0, D1, D2 # d0[i] = max (d1[i], d2[i]) como 4 ints de 32 bits sem sina VMAX.U32 D0, D1, D2
Pipeline Pipeline Paralelizar instruções, dividindo-as em passos que podem ser executados ao mesmo tempo. Melhorando o Pipeline: Aumentar o número de passos. O tempo de cada passo deve ser próximo para que o pipeline seja eficiente. Aumentar os recursos para que alguns passos possam ser realizados em paralelo (mais acessos a memória, por exemplo).
Pipeline Paralelo
Pipeline Paralelo Estática Quem lida com os recursos e com os hazards é o compilador. Tempo de compilação. Dinâmica Paralelo Quem lida com os recursos e com os hazards é o processador. Tempo de execução.
Pipeline Paralelo Estático Dois processadores MIPS dividindo recursos. Um processador lida com operações aritméticas e de desvio; outro lida com operações de memória. Cada recurso possui mais de um acesso (cada um para processadores diferentes). Hazards devem sem tratados e stalls e instruções bolhas devem ser inseridas.
Pipeline Paralelo Estático loop: lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $zero, loop
Pipeline Paralelo Estático loop: lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $zero, loop loop: lw $t0, 0($s1) addi $s1, $s1, -4 addu $t0, $t0, $s2 sw $t0, 4($s1) bne $s1, $zero, loop No segundo caso, as instruções bne e sw podem ser executadas em paralelo.
Pipeline Paralelo Dinâmico Também chamados de super escalares. Uma ou mais instruções chegam ao pipeline e o processador decide quais serão executadas. O compilador pode auxiliar diminuindo os hazards, mas cabe ao processador tomas a decisão. Possui uma unidade de commit para reordenar as instruções, se necessário for, evitando hazards.
Pipeline Paralelo Dinâmico lw $t0, 20($s2) addu $t1, $t0, $t2 sub $s4, $s4, $t3 slti $t5, $s4, 20
Pipeline Paralelo Dinâmico lw $t0, 20($s2) addu $t1, $t0, $t2 sub $s4, $s4, $t3 slti $t5, $s4, 20 lw $t0, 20($s2) sub $s4, $s4, $t3 slti $t5, $s4, 20 addu $t1, $t0, $t2 No segundo caso, as instruções sub e slti passam na frente, pois a instrução addu depende do resultado do lw e do acesso à memória.
Memória Todos os processadores acessam a mesma RAM, mas não necessariamente a mesma cache. Coerência Qual valor é lido: o valor retornado por uma leitura da memória deve ser o último valor escrito. Consistência Quando o valor é lido: A ordem das escritas deve ser serializada.
Memória Todos os processadores acessam a mesma RAM, mas não necessariamente a mesma cache. Cada processador pode ter sua cache individual. Numa escrita, as caches e a memória devem estar coerentes e consistentes. Dois processadores podem tentar escrever ao mesmo tempo. O mecanismo de escrita por ser write-through ou write-back, deixando o sistema ainda mais complexo. Protocolos que determinam como e quando escritas podem ser realizadas são protocolos de coerência.
Memória: Snooping É um protocolo de coerência de memória entre processadores que possuem cache independentes. Toda cache possui uma cópia do bloco da memória e para cada cópia a memória tem um status. Um controlador de cache determina se uma escrita é válida ou não, de acordo com o status da memória. Quando um valor é escrito em uma cache, ele é invalidado em outra caches, gerando um miss.
Lei de Amdahl A lei de Amdahl, formulada por Gene Amdahl na década de 1960, afirma que uma porção do programa que não pode ser paralelizada e limitará o aumento de velocidade geral disponível com o paralelismo. Tempo Total = Tempo Afetado + Tempo Não Afetado Quantidade de Melhora
Lei de Amdahl A lei de Amdahl, formulada por Gene Amdahl na década de 1960, afirma que uma porção do programa que não pode ser paralelizada e limitará o aumento de velocidade geral disponível com o paralelismo. Tempo Total = Tempo Afetado + Tempo Não Afetado Quantidade de Melhora Speed Up = 1 1 Paralelizável
Exercício Para deixarmos um programa 90 vezes mais rápido com 100 processadores. Qual a porcentagem de computação que pode permanecer sequencial?