Il controller di memoria: Come le CPU prelevano dati dalla DRAM
Il componente responsabile del recupero di una specifica riga di dati dalla memoria di sistema (DRAM) e del suo inserimento sull'autobus di memoria esterno è il Memory Controller. Dalla metà degli anni 2000 (AMD K8, Intel Nehalem), questa logica critica è stata integrata direttamente sul die della CPU come un Integrated Memory Controller (IMC), eliminando il collo di bottiglia del Front Side Bus (FSB) che affliggeva le architetture precedenti dove il controller risiedeva nel chipset Northbridge.
Funzioni principali del controller di memoria
- Decodifica indirizzo: Traduce l'indirizzo fisico della CPU nella geometria DRAM specifica: Riga, Colonna, Banca e Rank.
- Attivazione riga (ACT): Emette il comando ACT per aprire una riga, facendo sì che gli amplificatori di senso blocchino i dati della riga nel row buffer.
- Lettura/scrittura colonna (RD/WR): Seleziona le colonne specifiche all'interno della riga aperta. I dati sono tipicamente burst in cache line da 64 byte (8 battiti × larghezza bus 64-bit).
- Precharge (PRE): Chiude la riga attiva, preparando la banca per il prossimo comando ACT.
- Gestione refresh: Emette comandi di auto-refresh periodici (tREFI) per prevenire la perdita di dati dalla perdita di carica dei condensatori.
- Applicazione dei tempi: Applica rigorosamente i parametri critici di timing DRAM: tRCD (ritardo RAS-to-CAS), tRP (Row Precharge), tRAS (Active to Precharge), tRC (Row Cycle), tCCD (CAS-to-CAS), tFAW (Four Activate Window), e tRRD (RAS-to-RAS Delay).
- Scheduling e arbitraggio: Usa algoritmi come FR-FCFS (First-Ready First-Come-First-Served) e code di priorità per ottimizzare banda e latenza per core CPU, GPU e motori DMA.
Integrazione moderna: Controller di memoria on-die
Spostare il controller on-die è stato un momento spartiacque. L'IMC si connette alla DRAM tramite interfacce seriali ad alta velocità (DDR4, DDR5, LPDDR5X) operanti a 3200–8000+ MT/s. Le moderne CPU utilizzano architetture multi-canale (dual, quad o octa-channel) per scalare la banda linearmente, alimentando l'insaziabile appetito di dati dei core moderni, unità vettoriali e acceleratori.