Nei meandri dell'architettura AMD Zen

Alla conferenza HotChips AMD ha presentato ulteriori dettagli sull'architettura Zen che vedremo a bordo delle sue future CPU e APU x86.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Fetch

amd zen cpu 05 JPG

Clicca per ingrandire

La pipeline fetch usa una branch prediction disaccoppiata. L'azienda ha spostato TLB sopra le altre unità all'interno della gerarchia per ottimizzare i precaricamenti dalla cache istruzioni. AMD immagazzina due brach per BTB (Branch Target Buffer) entry e usa un ITA (Indirect Target Array) per i branch indiretti. La cache instruction 64K alimenta 32 byte per ciclo di decodifica.

Decodifica

L'unità decode illustra alcuni dei vantaggi chiave della op cache. A sinistra il dato scorre nell'instruction byte buffer, passa per lo stadio pick e corre verso la decodifica di quattro istruzioni. Di contro l'op cache serve le micro-ops direttamente alla micro-op queue, che evita il processo in tre fasi. Usa inoltre una tecnica di branch fusion di cui abbiamo parlato sopra. La pipeline più corta riduce l'esposizione all'unità di decodifica, abbassando la latenza di reindirizzamento di "diversi cicli" e risparmiando energia.

amd zen cpu 06 JPG

Clicca per ingrandire

Lo stack engine aiuta a eliminare le false dipendenze e il file di memoria offre un "store-to-load forwarding" al dispatch. Il dispatch si occupa di offrire 6 micro-ops per ciclo all'engine integer/execute.

Execute

L'unità integer ospita un totale di sei scheduler. Ognuno ha quattro unità integer (ALU) con il proprio scheduler e due AGU (Address Generation Units) con scheduler indipendenti. Gli scheduler integer sono tutti "14 entries deep", e le AGU alimentano le code load/store, che supportano due load e uno store per ciclo.

amd zen cpu 07 JPG

Clicca per ingrandire

L'execute engine ha una coda 192 entry retire. L'architettura esegue due branch per ciclo sia in modalità SMT che single-threaded. La cosa interessante è che l'architettura riceve sei operazioni per ciclo ma può ritirarne otto alla volta, ripristinando così le prestazioni durante gli stalli nella pipeline.

Load/Store e L2

amd zen cpu 09 JPG

Clicca per ingrandire

Il flusso si muove dall'unità execute in load/store e l'area L2 tramite una suddivisione della pipeline di dati TLB (alimentata da due AGU). Il progetto può tollerare 72 load out of order, e cosa più importante, ha prefetcher L1 e L2 ottimizzati.

Floating Point Unit

amd zen cpu 08 JPG

Clicca per ingrandire

L'unità in virgola mobile ha uno scheduler a due livelli. L'NSQ (non-scheduling queue) permette di emettere istruzioni all'unità integer tramite la coda 192 entry/retire. Le operazioni non possono essere pianificate fuori dalla coda non scheduling, ma la coda load/store può iniziare a lavorare anche se le operazioni in virgola mobile non sono pronte. AMD dice che questa tecnica garantisce che il dato sia pronto per essere pianificato per il lato in virgola mobile senza usare la finestra istruction, cosa che aumenta l'IPC.

La SQ (Scheduling Queue) normale pianifica le operazioni in due unità MUL e due ADD. Lo scheduler in virgola mobile ha un file di registro fisico di 160 entry. A colpire è il riaffacciarsi in questa unità dell'opzione retire con un'ampiezza pari a otto. Da notare anche le unità AES che potenziano la codifica.