Sem resumo de edição
Sem resumo de edição
Linha 17: Linha 17:
** Tempos: Checar disponibilidade com árbitro de barramento e ver se tá cheio,
** Tempos: Checar disponibilidade com árbitro de barramento e ver se tá cheio,
* Cache Design Elementos
* Cache Design Elementos
** Mapping: achar o slot que será usado
** Mapping Function: apontar qual slot que será usado
*** Usado com alguma frequência
*** Direct: pouco usado porque se  dois quiserem usar a mesma linha, um terá que esperar (Stall)
*** Associative: gasta mais tempo para encontrar um slot para um bloco de memória. É o que menos dá stall.
*** Associative and Direct: ?
*** Pentium é um Two Way Set Associative. Todo RISC é Set Associative
** Replacement: Escolher qual será substituído
** Replacement: Escolher qual será substituído
** Write Policy: como eu aviso a mem principal
** 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
** Block size: tamanho da linha - quantas palavras cabem na linha
** Number of caches: Unified - guardam dados e programas
** 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:
** Bus watch
** Hw transparency: onera o custo
** Non-cachable Memory: escolhe uma posição de memória marcada como non-cachable

Edição das 23h25min de 17 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,
  • Cache Design Elementos
    • Mapping Function: apontar qual slot que será usado
      • Usado com alguma frequência
      • Direct: pouco usado porque se dois quiserem usar a mesma linha, um terá que esperar (Stall)
      • Associative: gasta mais tempo para encontrar um slot para um bloco de memória. É o que menos dá stall.
      • Associative and Direct: ?
      • 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:
    • Bus watch
    • Hw transparency: onera o custo
    • Non-cachable Memory: escolhe uma posição de memória marcada como non-cachable