computer architecture
giovedì 17 Maggio 2012 - 7 Commenti
AMD e NVidia: l’evoluzione della specie (parte 2)

Dopo aver visto i numeri di base e le prestazioni per area delle nuove GPU di AMD e NVidia è ora di analizzare i consumi di questi chip.
Mentre ottenere i dati di area e i GFLOPS delle GPU è facile, i dati di potenza non sono disponibili nella forma che ci interessa per questa analisi: tutti i siti che recensiscono CPU e GPU misurano il consumo complessivo del sistema e non il consumo dei singoli componenti (che è molto difficile da fare con precisione). In mancanza di dati diretti, cercherò …

mercoledì 2 Maggio 2012 - 18 Commenti
AMD e NVidia: l’evoluzione della specie (parte 1)

Questi anni di rapide e dirompenti innovazioni tecnologiche stanno regalando grandi emozioni a tutti noi appassionati di computer. Una rapida sequenza di cambiamenti nelle tecnologie di base sta scuotendo vecchie realtà e rimescolando i mercati: l’ascesa di Apple e Google a spese di Microsoft, di ARM a spese di Intel, l’ingresso di NVidia (e ora anche Intel) nel cortile di casa di Qualcomm.
Quattro i motivi tecnologici principali dietro questo rimescolamento:

la fine della corsa alla frequenza dei processori al’inizio degli anni 2000 e l’ascesa delle architetture parallele ed eterogenee, tra cui …

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 …

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 è …

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 …