Criou página com ':: '''Memória Cache''' <br> * Pensada para dar uma memória disponível com rápido tempo de acesso * A ideia é que ela abstraia o caminho do datapath * A transferência en...' |
Sem resumo de edição |
||
| (6 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 13: | Linha 13: | ||
* Nro de blocos dentro da mem cache - C | * Nro de blocos dentro da mem cache - C | ||
* Se todos os blocos da mem principal irão passar pela mem cache e deste para a CPU. Dado que C << M, como eu aloco um bloco na mem cache? | * Se todos os blocos da mem principal irão passar pela mem cache e deste para a CPU. Dado que C << M, como eu aloco um bloco na mem cache? | ||
** Fig Cache Read Operation | |||
*** Se o cache estiver cheio? Atualizar CPU | |||
** Tempos: Checar disponibilidade com árbitro de barramento e ver se tá cheio, | |||
* Cache Design Elementos | |||
** Mapping Function: apontar qual slot que será usado | |||
*** Usado com alguma frequência | |||
*** Direct: Método mais rápido de usar uma mem dentro do cache. Pouco usado porque se dois quiserem usar a mesma linha, um terá que esperar (Stall) | |||
*** Associative: Tem um pool de lugares, descobre-se o primeiro lugar vago. Gasta mais tempo para encontrar um slot para um bloco de memória. É o que menos dá ''stall''. | |||
*** Associative and Direct: O cache é dividido em conjunto de blocos. Achar o conjunto é mapeamento direto e dentro do conjunto é associativo. | |||
*** Pentium é um Two Way Set Associative. Todo RISC é Set Associative | |||
** Replacement: Escolher qual será substituído | |||
** Write Policy: quando eu atualizo a mem principal? | |||
*** Write Thru: Toda vez que altero a mem cache altero a mem principal | |||
*** Write back: Vai mexendo na mem cache, quando for substituir o slot, neste momento atualiza a mem principal. Se tem um processador apenas este é ótimo para ser usado. Para paralelismo não é interessante. | |||
** Block size: tamanho da linha - quantas palavras cabem na linha | |||
** Number of caches: Unified - guardam dados e programas | |||
*** L1: colada dentro do processador onchip cache | |||
** L2: normalmente fora do chip | |||
** Unified: armazena instruções quanto dados. Linha pode conter dados ou pode conter instruções | |||
** Split: Um cache para dados outro cache para instruções | |||
* Coerência de cache: cache é coerente se as leituras em um mesmo endereço devolvem o valor escrito mais recentemente | |||
** Bus watch | |||
** Hw transparency: onera o custo | |||
** Non-cachable Memory: escolhe uma posição de memória marcada como non-cachable | |||
: Slides Pentium Organizations | |||
* Evoluiu em amplitude mas não em essência | |||
* Dif entre 486 e 586 (Pentium) foi o cache | |||
* MESI (Modified-Exclusive-Shared-Invalid): | |||
** Protocolo de Bus Watching | |||
** Vídeo: https://www.youtube.com/watch?v=ndyKrPMUqwE | |||
** Diagrama de Estados: 1h35 | |||
* Lição de casa: MESI Finite State Machine L2 - Slide 11 | |||
:: Foi até o slide 13 | |||
Edição atual tal como às 23h42min de 21 de abril de 2024
- Memória Cache
- Pensada para dar uma memória disponível com rápido tempo de acesso
- A ideia é que ela abstraia o caminho do datapath
- A transferência entre níveis é sempre blocos portanto trabalha com palavras
- Memória principal se fala em octetos (bytes)
- Para relação com a memória é tratada em blocos (x palavras fazem parte do bloco 1 - outras y palavras fazem parte do bloco 2, ...)
- A memória é quebrada em blocos
- Interessante que o bloco da memória tem que ser o mesmo tamanho do bloco do cache
- M tam da quantidade de blocos
- Tamanho da memória = 2^n
- Nro de blocos dentro da mem cache - C
- Se todos os blocos da mem principal irão passar pela mem cache e deste para a CPU. Dado que C << M, como eu aloco um bloco na mem cache?
- Fig Cache Read Operation
- Se o cache estiver cheio? Atualizar CPU
- Tempos: Checar disponibilidade com árbitro de barramento e ver se tá cheio,
- Fig Cache Read Operation
- Cache Design Elementos
- Mapping Function: apontar qual slot que será usado
- Usado com alguma frequência
- Direct: Método mais rápido de usar uma mem dentro do cache. Pouco usado porque se dois quiserem usar a mesma linha, um terá que esperar (Stall)
- Associative: Tem um pool de lugares, descobre-se o primeiro lugar vago. Gasta mais tempo para encontrar um slot para um bloco de memória. É o que menos dá stall.
- Associative and Direct: O cache é dividido em conjunto de blocos. Achar o conjunto é mapeamento direto e dentro do conjunto é associativo.
- Pentium é um Two Way Set Associative. Todo RISC é Set Associative
- Replacement: Escolher qual será substituído
- Write Policy: quando eu atualizo a mem principal?
- Write Thru: Toda vez que altero a mem cache altero a mem principal
- Write back: Vai mexendo na mem cache, quando for substituir o slot, neste momento atualiza a mem principal. Se tem um processador apenas este é ótimo para ser usado. Para paralelismo não é interessante.
- Block size: tamanho da linha - quantas palavras cabem na linha
- Number of caches: Unified - guardam dados e programas
- L1: colada dentro do processador onchip cache
- L2: normalmente fora do chip
- Unified: armazena instruções quanto dados. Linha pode conter dados ou pode conter instruções
- Split: Um cache para dados outro cache para instruções
- Mapping Function: apontar qual slot que será usado
- Coerência de cache: cache é coerente se as leituras em um mesmo endereço devolvem o valor escrito mais recentemente
- Bus watch
- Hw transparency: onera o custo
- Non-cachable Memory: escolhe uma posição de memória marcada como non-cachable
- Slides Pentium Organizations
- Evoluiu em amplitude mas não em essência
- Dif entre 486 e 586 (Pentium) foi o cache
- MESI (Modified-Exclusive-Shared-Invalid):
- Protocolo de Bus Watching
- Vídeo: https://www.youtube.com/watch?v=ndyKrPMUqwE
- Diagrama de Estados: 1h35
- Lição de casa: MESI Finite State Machine L2 - Slide 11
- Foi até o slide 13