AMD Opteron Interlagos: ora sino a 16 core

AMD Opteron Interlagos: ora sino a 16 core

Al debutto le prime soluzioni AMD per sistemi server basate sulla nuova architettura Bulldozer, costruita a 32 nanometri. Versioni sino a 16 core per le CPU appartenenti alla famiglia Opteron 6200

di pubblicato il nel canale Server e Workstation
AMD
 

L'architettura Bulldozer in ambito server

Abbiamo avuto già modo di analizzare l'architettura Bulldozer, in quanto la stessa adottata da AMD per le proposte FX destinate a sistemi desktop presentate alcune settimane fa. Il design sviluppato da AMD prevede la presenza di differenti moduli affiancati tra di loro, collegati attraverso una cache L3 che è unificata, in quantitativo di 8 Mbytes. In ogni modulo Bulldozer sono integrati due distinti core integer, accanto ai quali è stata inserita una singola unità in virgola mobile: la risultante è quindi di avere un approccio tradizionale per la parte di calcolo integer, quella che rappresenta del resto la mole di lavoro principale in un moderno processore, condividendo tra i due core una singola unità floating point

slide_3.jpg (78565 bytes)

L'approccio scelto da AMD nel design delle soluzioni Bulldozer passa quindi attraverso una logica di condivisione delle risorse, studiata in modo tale da ottimizzare il livello prestazionale in funzione del consumo massimo. Nello schema sono evidenziare le componenti interne ad ogni modulo Bulldozer: le unità integer sono quelle completamente indipendenti, mentre quella in virgola mobile è condivisa assieme ai blocchi di logica per fetch e decode delle istruzioni. La cache L2 è presente in quantitativo di 2 Mbytes per modulo, mentre la cache L3 è esterna al modulo così come lo è la componente north bridge integrata nel processore, nella quale troviamo anche il memory controller DDR3 dual channel e ovviamente i link HyperTransport necessari per collegare i due die presenti nei processori Opteron 6200 e i processori fisici tra di loro in sistemi multi socket.

Lo sviluppo di un'unità FP condivisa tra due unità di calcolo integer è una strategia portata avanti da AMD nell'architettura Bulldozer cercando di ottenere due distinti risultati: da un lato contenere le dimensioni complessive del die, così da beneficiare di costi di produzione più contenuti; dall'altro limitare il più possibile i consumi complessivi. E' evidente come sia preferibile, dal punto di vista delle pure prestazioni velocistiche, un design di processore che veda la presenza del maggior numero possibile di unità di elaborazione; d'altro canto questo implica dimensioni crescenti e consumi che possono aumentare sino ad una soglia non ritenuta più accettabile. La condivisione di alcune delle risorse interne è quindi frutto di un trade off tra prestazioni, consumi e costi di produzione, alla ricerca del miglior bilanciamento e del più elevato tasso di utilizzo delle risorse a disposizione interne alla CPU.

E' ben evidente in questa scelta di design la contrapposizione con la tecnologia HyperThreading di Intel, che permette di eseguire due threads in parallelo attraverso l'integrazione di una quantità di logica molto ridotta, in termini di transistor, rispetto ad un design a singolo thread. La risultante, per Intel, è quella di poter processare su un singolo core sino a 2 threads in parallelo, benché con livelli prestazionali che non sono ovviamente confrontabili con quelli ottenibili con due core nativi a disposizione ma comunque migliori, con applicazioni threaded, di quanto registrabile con un singolo core tradizionale.

die_shot.jpg (109545 bytes)
die di processore Opteron della famiglia 6200

AMD ha scelto di raddoppiare la sola parte integer del propri processori, lasciando condivisa quella floating point, partendo anche da una considerazione pratica: la maggior parte delle elaborazioni riguarda proprio le unità integer, sino mediamente all'80% del totale, pertanto volendo ottenere il miglior rapporto tra prestazioni e consumo complessivo la strada maestra è quella di duplicare queste unità, massimizzando il parallelismo delle operazioni, lasciando unificata un'unità in virgola mobile di notevole potenza complessiva. In ambito server e soprattutto HPC il ruolo delle unità di elaborazione in floating point è ben più rilevante che con tradizionali pattern di calcolo; d'altro canto è innegabile come l'utilizzo di GPU per elaborazioni parallele non grafiche in ambito professionale si stia rivelando una strategia estremamente interessante per poter mettere a disposizione elevata potenza di calcolo in virgola mobile per particolari tipologie di elaborazione, ottenendo incrementi prestazionali molto elevati rispetto all'utilizzo di tradizionali CPU.

Un design come quello sviluppato per Bulldozer, pertanto, parte già dal presupposto di utilizzare anche GPU in ambiti di elaborazione paralleli, cercando attraverso l'ottimizzazione del codice di portare verso queste ultime la maggior parte dei calcoli in virgola mobile beneficiando del notevole parallelismo che mettono a disposizione. Un approccio di questo tipo è del resto quasi scontato per AMD, azienda che sviluppa al proprio interno anche GPU, mentre lo è molto meno per Intel quantomeno al momento attuale: l'azienda americana sta sviluppando proprie architetture di GPU compatibili con codice x86 ma ci vorranno ancora anni prima che queste proposte possano venir commercializzate.

Ogni unità integer è dotata di una cache L1 per i dati da 16 Kbytes, valore più contenuto rispetto ai 64 Kbytes integrati per ogni core nell'architettura Phenom II e Opteron; a monte dell'unità di fetch troviamo una seconda cache L1 a 2 vie per istruzioni, in quantitativo di 64 Kbytes come per le precedenti architetture AMD. La pipeline interna alle unità di calcolo integer dell'architettura Bulldozer è stata allungata rispetto a quella delle soluzioni Opteron di precedente generazione; la diretta implicazione di questo è la possibilità per queste cpu di operare a frequenze di clock più elevate, ben testimoniata del resto dai valori di default e con tecnologia Turbo Boost che le soluzioni 6200 e 4200 mettono a disposizione per la prima volta in ambito server.

Pipeline più ampie implicano tuttavia una maggiore dipendenza dalle unità di branch prediction: in questo ambito AMD ha operato varie ottimizzazioni nell'architettura Bulldozer. Rispetto alle soluzioni Phenom e Opteron, AMD ha integrato branch prediction e fetch logic che operano in modo indipendente l'una dall'altra, evitando quindi che lo stallo di una delle due implichi l'automatico stop anche dell'altra. La presenza di un'unità di prefetch particolarmente aggressiva, richiesta necessariamente dalla pipeline più lunga, implica a sua volta una maggiore dipendenza dalle prestazioni del memory controller.

Come noto le soluzioni Opteron 6100, e di conseguenza anche quelle Opteron 6200, utilizzano un design cosiddetto Multi Chip Module o MCP: il processore è composto da due distinti die collegati tra di loro, tecnica che permette di incrementare il numero di core a disposizione per ogni socket presente nel sistema. E' in questo modo, del resto, che AMD può mettere a disposizione ben 16 core per alcune versioni di processore Opteron 6200 contro un limite attuale di 6 core per le soluzioni Xeon di Intel della famiglia 5600.

Famiglia di CPU Core MCP Moduli unità Integer unità FP Controller memoria
FX-4100 4 no 2 4 2 DDR3 dual channel
FX-6100 6 no 3 6 3 DDR3 dual channel
FX-8100 8 no 4 8 4 DDR3 dual channel
Opteron 4200 6 no 3 6 3 DDR3 dual channel
Opteron 4200 8 no 4 8 4 DDR3 dual channel
Opteron 6200 4 si 2x1 4 2 DDR3 quad channel
Opteron 6200 8 si 2x2 8 4 DDR3 quad channel
Opteron 6200 12 si 2x3 12 6 DDR3 quad channel
Opteron 6200 16 si 2x4 16 8 DDR3 quad channel

Le versioni di CPU Opteron 6200 con 8 e 4 core sono ottenute sempre con questo tipo di approccio e non utilizzando un singolo die a 8 core, peraltro disponibile nella famiglia Bulldozer: in questo modo il controller memoria è di tipo quad channel, ottenuto utilizzando in parallelo i due controller memoria DDR3 dual channel integrati nei due die.

La componente floating point integrata in ogni modulo Bulldozer prevede due unità Multiply and Accumulate a 128 bit, a monte delle quali troviamo ovviamente anche uno scheduler in virgola mobile specifico che si affianca ai due scheduler integer abbinati ciascuno all'unità di calcolo integer. Sono supportate le principali ISA sino a SSE4.2, oltre alle istruzioni AVX (Advanced Vector eXtensions) che Intel ha implementato per la prima volta all'interno delle CPU della famiglia Sandy Bridge. Il supporto AVX a 256bit è ottenuto sfruttando in parallelo le due unità FP a 128bit, che possono essere riorganizzate per operare come 4x64bit, 2x128bit oppure 1x256bit a seconda del tipo di applicazione utilizzata.

schema_di_funzionamento.jpg (42489 bytes)

AMD ha implementato in Bulldozer il supporto a due nuove funzionalità indicate con i nomi di XOP e FMA4, che permettono di ottenere incrementi prestazionali interessanti nel momento in cui l'applicazione ne riconosce la presenza e le sfrutta durante l'esecuzione del proprio codice. Oltre a queste istruzioni, specifiche per le soluzioni Bulldozer, AMD ha integrato supporto alle istruzioni SSE 4.2, AESNI, PCLMULQDQ e AVX comune anche alle proposte Intel: si tratta in generale di istruzioni che permettono di incrementare sensibilmente, quando implementate dal software, le prestazioni velocistiche con elaborazioni multimediali, con criptaggio dei dati e alcune tipologie di applicazioni di modellazione e scientifiche.

Una nota finale merita il lavoro svolto da AMD per ottimizzare il consumo dei processori Bulldozer. L'architettura scelta, con unità FP condivise per ogni modulo Bulldozer, già parte da un approccio che punta a contenere il consumo complessivo. A questo dobbiamo aggiungere una gestione molto efficiente del clock gating tra i componenti interni, la possibilità di inviare i core in stato C6 e la tecnologia Turbo Core di seconda generazione che ottimizza le prestazioni in funzione del carico di lavoro istantaneo. Il clock gating opera non a livello di singolo core quanto di modulo: l'integrazione di due core e di una unità in virgola mobile condivisa tra questi non permette infatti di intervenire su tensione e frequenza di clock di ogni singolo core integer, ma solo a coppie. Il memory controller permette di utilizzare non solo tradizionali moduli memoria DDR3 a 1.5V di tensione, ma anche modelli a basso consumo da 1.35V e 1.25V: si tratta di una caratteristica molto importante pensando all'elevato numero di moduli memoria che possono essere utilizzati all'interno di un server.

slide_8.jpg (46283 bytes)

E' grazie a queste ottimizzazioni nei livelli di consumo che AMD ha potuto introdurre una funzionalità molto interessante in ambito server: si tratta di TDP power cap, con la quale il valore massimo del TDP raggiunto da uno specifico processore può essere limitato ad un valore predefinito dall'utente, così da contenere il livello di consumo massimo complessivo del server (o del rack di server presenti in datacenter) senza dover limitare in questo modo il numero di core a disposizione. La risultante è quindi quella di avere un più elevato livello di controllo sul consumo complessivo della propria infrastruttura di calcolo, massimizzando l'utilizzo degli armadi rack a fronte di ben precisi livelli di alimentazione massima che vengono messi a disposizione.

 
^