Pular para conteúdo

Aula 05 - Hierarquia de Memória

Apresentação


A memória é o maior gargalo oculto no software moderno de alta concorrência. Quanto mais próximo o dado está da CPU, mais rápido é o acesso. Mas a velocidade custa dinheiro e escala térmica.



Novo Tópico

🏛️ 1. A Pirâmide de Alta Performance


🏛️ 1. A Pirâmide de Alta Performance

Um programador ingênuo acha que "variável vai na memória". Um engenheiro de software C/C++ sabe em qual camada a variável se hospeda:


🏛️ 1. A Pirâmide de Alta Performance

```mermaid graph TD A("Registradores
(1 Ciclo - Alguns Bytes)") --> B["Cache L1
(~4 Ciclos - ~64KB a 128KB)"] B --> C["Cache L2 e L3
(~12 a ~40 Ciclos - Megabytes)"] C --> D[["RAM (Memória Principal)
(~200 a ~300 Ciclos - Gigabytes)"]] D --> E[("Armazenamento (SSD / HDD)
(Milhões de Ciclos - Terabytes)")]

style A fill:#ff9999
style B fill:#ffcc99
style C fill:#ffff99
style D fill:#ccffcc
style E fill:#99ccff

```


🏛️ 1. A Pirâmide de Alta Performance

[!IMPORTANT] A latência é o tempo que demora da CPU pedir um dado até ele chegar. Buscar um byte da RAM demora ~200 ciclos. Buscar do SSD demora centenas de milhares. Essa diferença grotesca é mitigada pelo uso de Caches.


🏛️ 1. A Pirâmide de Alta Performance



Novo Tópico

⏳ 2. Os Impactos da Latência (Lado do Código)


⏳ 2. Os Impactos da Latência (Lado do Código)

Quando escrevemos um código com constantes consultas não linearizadas ao Banco de Dados (ou SSD local), pagamos a mais cara taxa processual: o I/O disk penalty.


⏳ 2. Os Impactos da Latência (Lado do Código)

CODE_BLOCK_0


⏳ 2. Os Impactos da Latência (Lado do Código)

A instrução e os dados descem da L3, saltam para L2, descem para L1 e se acoplam na ALU.



Novo Tópico

🎯 3. Optimizando Uso


🎯 3. Optimizando Uso

Por que linguagens como C e C++ dominam infraestrutura de servidores High Frequency Trading? Porque elas permitem Alocação Estática e Constante que é perfeitamente "encaixada" pelo compilador diretamente na memória Cache.

Ao invés de carregar gigabytes de Strings na lenta RAM, as linguagens de baixo nível incentivam o uso de matrizes de tamanho delimitado (arrays fixos), cujo agrupamento contíguo força a arquitetura de Hardware Prefetching a adiantar os bytes do Array para a Cache nativamente, antes mesmo de você rodar a linha do código!


Novo Tópico

🚀 Resumo Prático


🚀 Resumo Prático

  • Se processadores hoje são mísseis atingindo +4GHz, a RAM parou no tempo (Latência de CAS não baixa proporcionalmente).
  • Tudo recai na técnica humana de amarrar dados juntos (Caches L1 e L2) e escrever data-oriented code se quiser ultra-latência C++.

🚀 Resumo Prático