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,
  • 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):
  • Lição de casa: MESI Finite State Machine L2 - Slide 11
Foi até o slide 13