Processori & Design
giovedì 10 novembre 2011 - 8 Commenti
Branch prediction (parte settima): High-frequency fetch

Per trent’anni, prima che il raggiungimento del power wall terminasse la “corsa ai GHz” e iniziasse la “corsa ai core”, il modo più semplice e gettonato per aumentare le prestazioni dei processori è stato l’aumento della frequenza operativa, raggiungibile tramite pipeline più profonde e processi produttivi più raffinati.
Aumentare il numero di stadi di pipeline ha un doppio impatto sul front-end del processore (fetch e branch prediction):

da un lato, avere più stadi aumenta la branch misprediction, riducendo le prestazioni; questo rende necessario l’adozione di strategie di predizione più sofisticate per aumentare …

giovedì 20 ottobre 2011 - Commenta
Branch prediction (parte sesta): High-bandwidth fetch

In tutta la discussione sui meccanismi di branch prediction (e siamo ormai alla sesta puntata!) ho sempre lasciato intendere che si debba predire il bersaglio di salto, inteso come la singola istruzione puntata dal salto. L’ho fatto per semplificare il discorso, ma dato che il concetto alla base dei processori superscalari è quello di elaborare più istruzioni per ciclo di clock, è più corretto dire che il predittore deve fornire il prossimo fetch group, cioè le prossime N istruzioni che il processore dovrà eseguire.
Come avevo già discusso nel primo articolo, …

giovedì 6 ottobre 2011 - 10 Commenti
Branch prediction (parte quinta): Predizione del bersaglio

Negli scorsi articoli abbiamo visto alcune tecniche utilizzate dai processori moderni per predire la direzione dei salti.  Siamo partiti con le tecniche più vecchie e semplici e poi abbiamo visto predittori più sofisticati e predittori ibridi, che possono combinare predittori diversi per ottenere risultati ancora migliori.
Predire la direzione dei salti è però solo uno dei problemi che è necessario risolvere: bisogna anche predire il bersaglio dei salti presi e bisogna costruire tutti questi meccanismi in modo da interagire in modo efficiente con la cache e in modo da fornire più …

mercoledì 29 giugno 2011 - 16 Commenti
Branch prediction (parte quarta): Predittori ibridi

Nei precedenti due articoli (qui e qui) ho brevemente descritto alcuni schemi di branch prediction, illustrando i punti di forza di ognuno. Alcuni sono facili da costruire e moderatamente efficienti, altri funzionano bene per salti con forte correlazione con la loro storia locale, altri ancora funzionano perfettamente ma solo per alcuni tipi di salti particolari (ad esempio i loop), eccetera.
Visto che ogni programma ha un mix di diversi tipi di salti e diversi programmi hanno un diverso mix, quale di quei predittori scegliere? La soluzione più semplice è quella di …

mercoledì 1 giugno 2011 - 28 Commenti
Intel come GlobalFoundries: una strada tutta da scoprire

Qualche giorno fa è comparsa su Reuters una strana e intrigante notizia a proposito di Intel, secondo la quale il colosso californiano potrebbe cominciare a produrre processori non-Intel. Leggendo la notizia si capisce che le cose non stanno esattamente così — ma come stanno allora? Qual è il significato di questo annuncio, a chi si rivolge, e cosa potremmo aspettarci in futuro?
Dopo un iniziale sbalordimento, e un po’ di riflessione, la cosa ha cominciato ad avere senso — anzi, ad essere perfettamente logica. Credo che questa decisione sia la fava …

giovedì 14 aprile 2011 - 25 Commenti
Branch prediction (parte terza): Predittori piu’ complessi

Nella seconda parte di questa rassegna sui branch predictor ho illustrato i fondamentali e gli schemi di base, che pur nella loro semplicità possono ottenere prestazioni relativamente elevate (anche superiori al 90%). Tuttavia i processori in generale, e quelli superscalari in particolare, possono ottenere grossi benefici da predittori ancora più precisi: ogni aumento di precisione può far sia aumentare le prestazioni (perchè si può estrarre parallelismo tra istruzioni in più blocchi base diversi) che ridurre il consumo energetico (perchè si eseguono meno istruzioni nel ramo sbagliato).
La letteratura in merito è …

giovedì 24 febbraio 2011 - 29 Commenti
Kepler, Maxwell, Denver, Tegra: dove va NVidia?

In una luminosa mattina californiana del novembre 2010, Jensen Huang, fondatore, presidente e CEO di NVidia, presentava la roadmap della “nuova NVidia”: la “prima NVidia” fu la compagnia “PC graphics”; la seconda, “Programmable GPU”; la nuova direzione della società è “NVidia: The Processor Company”. Non più solo computer grafica, quindi, ma una vera compagnia di microprocessori e GPU.
La nuova direzione è perfettamente comprensibile se si considera il “lato oscuro” della Legge di Moore: dire che “ogni due anni si raddoppia il numero di transistor per chip” equivale a dire che …

lunedì 7 febbraio 2011 - 22 Commenti
Branch prediction (parte seconda): Predittori semplici

Nello scorso articolo abbiamo visto perchè la Branch Prediction è una componente essenziale dei processori superscalari, da quali blocchi base è composta e come questi blocchi si raccordano col resto dell’architettura. Adesso bisogna rispondere all’ultima domanda: che cosa c’è davvero dentro un predittore dinamico? Che algoritmi vengono usati per generare le predizioni?
Innanzitutto, il predittore deve predire due cose contemporaneamente: la direzione di salto e, se il salto è preso, il bersaglio di salto. Un termine comune trovato in letteratura per questo tipo di struttura è Branch Target Buffer (BTB) e …

lunedì 3 gennaio 2011 - 21 Commenti
Processori superscalari out-of-order: Branch prediction (parte prima)

Dopo una lunghissima pausa (causa tapeout) eccoci di nuovo qui con una nuova puntata sull’architettura dei processori superscalari. Nell’ultimo articolo abbiamo dato uno sguardo a cosa significa fare il fetch delle istruzioni in un processore superscalare e a quali sono i principali limiti. Abbiamo visto come il disallineamento del gruppo di fetch rispetto alla cache line riduca la banda effettiva verso la memoria, e alcune strategie per combattere questo problema.
Rimane ora investigare l’altro grande problema, uno dei singoli problemi peggiori dal punto di vista delle prestazioni: le modifiche al flusso …

venerdì 17 settembre 2010 - 6 Commenti
Processori superscalari out-of-order: lo stadio di fetch

In-order o out-of-order, superscalare o meno, il viaggio delle istruzioni all’interno di qualsiasi CPU comincia nello stesso modo: il fetch (cioè il prelevamento) delle istruzioni dalla memoria, e più precisamente dalla I-cache di primo livello.
Il numero di istruzioni che la CPU è in grado di caricare per ogni ciclo di clock è chiamata fetch bandwidth e fissa il limite massimo delle prestazioni del processore: è evidente infatti che la CPU non può eseguire più istruzioni di quelle che carica dalla memoria. Una macchina superscalare capace di eseguire s istruzioni per …