|
|
|
![]() |
|
Strumenti |
![]() |
#61 | |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Quote:
![]() ...O meglio, la "predizione" (statica, però, e demandata al compilatore e non alla CPU) esiste negli Itanium per il programmatore che decide di non avvalersi della predicazione, solo in quel caso puoi avere stallo. Secondo me, però, sarebbe come comprare una Ferrari e metterci l'impianto a GPL. L'Itanium è fatto per sfruttare il parallellismo a livello di istruzioni (ILP) attraverso la predicazione. Scegliere di utilizzare i salti condizionati invece dei predicati equivale a scegliere di far andar piano i programmi.
__________________
buy here Ultima modifica di fantoibed : 13-07-2005 alle 20:04. |
|
![]() |
![]() |
![]() |
#62 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
x Cecco BS: di niente. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#63 | |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Quote:
![]()
__________________
buy here |
|
![]() |
![]() |
![]() |
#64 |
Senior Member
Iscritto dal: Apr 2005
Città: Napoli
Messaggi: 6817
|
La predicazione è geniale... se non fosse che c'è spreco di risorse. Mi spiego meglio: ci sono unità che fanno dei calcoli che poi verranno buttati. Sarebbe stato carino avere qualche modalità del processore in cui farlo funzionare come il Niagara della SUN: 2 o più thread che si contendono le risorse. Non essendo OOO, capiterà spesso che delle unità sono libere e possono essere assegnate ad un altro thread. Considerando poi la quantità spropositata di cache che hanno... Anche per questo consumano tanta potenza: ci sono tanti calcolo fatti inutilmente. Se una pipeline stalla, non consuma potenza. Se una pipeline fa calcoli (inutili) si.
|
![]() |
![]() |
![]() |
#65 |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Lo spreco di risorse c'è ma è relativo: una pipeline che fa calcoli in più è sprecata tanto quanto una pipeline che non fa' calcoli. Sicuramente una che non fa' calcoli non consuma corrente, ma bisogna tener presente che nelle CPU OOO, l'unità di branch prediction consuma comunque un fottio di corrente ed è sempre attiva.
...E poi le CPU pensate per il calcolo parallelo con molte pipeline non hanno il problema di occupare una pipeline in più per quei pochi cicli che intercorrono tra quando si iniziano a riempire le pipeline stesse e quando il predicato viene processato effettivamente... Con la tecnologia degli sleep transistors dinamici che verrà introdotta nel processo a 65nm, poi, ci sarà la possibilità di attivare o disattivare risorse inutilizzate (del core e della cache) con una notevole riduzione del leakage. Su una CPU OOO, il branch predictor deve restare comunque sempre attivo e non può essere mai disabilitato per poter ridurre il leakage.
__________________
buy here Ultima modifica di fantoibed : 14-07-2005 alle 13:30. |
![]() |
![]() |
![]() |
#66 |
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2155
|
stavo per fare la stessa obiezione di bjt2, ma fantoibed ha ribattuto dissipando tutti i miei dubbi!
![]()
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94 |
![]() |
![]() |
![]() |
#67 |
Senior Member
Iscritto dal: Apr 2005
Città: Napoli
Messaggi: 6817
|
Ha ragione fantoibed... ma io non criticavo lo spreco di risorse, ma la mancanza di una modalità Niagara-Like. Mi spiego meglio: se voglio un mostro di calcolo parallelo, prendo un Itanium (2). Se voglio un sistema che possa gestire bene molti thread, devo per forza aumentare le CPU. Si poteva, senza complicare troppo la CPU, adottare un'altra modalità operativa come quella Niagara (visto che la logica OOO non c'è), avendo un ultra hyper threading (riflettendoci mi pare che gli itanium 2 ce l'abbiano, ma non ne sono sicuro...), magari a 4 o più thread, vista la cache ed il numero di unità di calcolo presenti in quella CPU...
|
![]() |
![]() |
![]() |
#68 | ||
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#69 |
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2155
|
a quanto ne so la difficoltà maggiore da questo punto di vista sta nel progettare compilatori che riescano a rendere il codice il più possibile parallelizzabile esplicitamente, no?
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94 |
![]() |
![]() |
![]() |
#70 | |
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Quote:
Il codice è una sequenza di istruzioni e ci saranno casi in cui, compilatore + o - affinato, un'istruzione non potrà essere eseguita in parallelo perchè l'istruzione successiva ad es. è collegata alla precedente. Esempio stupido: nel mio programma mi trovo ad un certo punto a dover sommare la variabile1 alla variabile 2. Subito dopo il risultato dell'addizione dovrà essere sommato alla variabile 3. Come faccio ad eseguire in parallelo le due istruzioni? Non posso. Non solo...accade n così di rado che siano i programmatori stessi a dover rivedere il codice di un programma ( ad es portandolo da una piattaforma x86 all'IA-64) perchè la macchina non può arrivare ad un certo risultato, richiesto per poter beneficiare il + possibile dell'architettura EPIC. Queste operazioni in termini di tempo possono essere costose e tempo = denaro |
|
![]() |
![]() |
![]() |
#71 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Predicazione e predizione alla fine sono due strumenti che nascono per risolvere lo stesso problema, anche se in maniera completamente diversa: quello di gestire le condizioni che portano o posso portare a un cambiamento nel flusso del codice. Quote:
Il discorso di Niagara è diverso, è simile a quanto avviene nel P4 con l'HT e nel Power5, ed è quel che Intel dovrebbe fare con le prossime versioni di Itanium, per utilizzare le risorse rimaste libere (perché non usate, o perché un thread è fermo a causa di uno stallo, e quindi è costretto a non usarle). C'è da dire che, anche se sulla carta ha buone possibilità grazie alla presenza di numerose unità di esecuzione, il compito non è affatto semplice, a causa dei vincoli dell'architettura EPIC: le risorse devono essere impegnate in toto per portare a termine un intero bundle, e non qualcuna delle sue istruzioni. Un processore con logica ooo è molto più facilitato in questo, perché può organizzare le istruzioni come vuole, e usare al meglio le risorse disponibili in quel preciso momento. "Posso eseguire 3 istruzioni liberamente, mi serve un load, una moltiplicazione intera e una somma FP, ma ho disponibile soltanto un'AGU e un sommatore FP: ne eseguo due, e per l'altra ci penso dopo". Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
![]() |
![]() |
![]() |
#72 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Francamente non ricordo se Intel ha già adottato il CMP con qualche versione di Itanium 2, o lo farà in un prossimo futuro.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#73 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Ad esempio, con un codice "poco diffuso" ![]() Codice:
for i := 1 to n do [...] In questo contesto è evidente l'efficienza di un processore ooo: il salto verrà predetto correttamente n - 1 volte, e soltanto l'ultima fallirà. Il compilatore può aiutare Itanium, mitigando la penalizzazione dovuta ai salti, effettuando loop unrolling, ma fino a un certo punto: anche la dimensione del codice è un fattore importante, per cui sarà costretto a trovare una soluzione di compromesso fra il numero di cicli da eseguire e lo spazio occupato. Considerato che i bundle di Itanium sono costituiti da 128 bit (sono ben 16 byte), e che contengono al più 3 istruzioni "utili" (anche sui bundle ci sono parecchi vincoli: non si possono inserire arbitrariamente le istruzioni, come avviene con la maggior parte delle architetture VLIW), è facile che lo srotolamento dei cicli ![]() Anche le rose più belle hanno pur sempre le spine... ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#74 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Dimenticavo: processori ooo moderni, come gli x86, che non usano il raffinato sistema di predicazione di Itanium, hanno comunque delle migliorie architetturali che aiutano molto nei casi più comuni.
Ad esempio, il vecchio PentiumPro ha introdotto le istruzioni CMOV e FCMOV, che consentono di eseguire o saltare l'istruzioni di spostamento di un registro, a seconda del verificarsi di una precisa condizione. Inoltre con le SSE2 Intel ha introdotto anche due speciali prefissi per le istruzioni di salto, che "suggeriscono" alla logica di branch prediction se quel salto è più o meno soggetto ad essere eseguito. Piccole migliorie, che costano poco, ma che permettono di risolvere in maniera efficace certi problemi comuni, anche se non eleganti come la soluzione di Itanium... Ma alla fine contano le prestazioni, non l'eleganza di un'architettura... ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#75 | |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
Quote:
br.cloop, br.ctop e br.cexit per i cicli for e br.wtop e br.wexit per i cicli while. ...E poi esistono delle istruzioni che permettono di effettuare predizione statica e dinamica (solo che devono essere inserite nel codice dal compilatore): spnt, sptk, dpnt e dptk. ...Poi ci sono i prefetch hints ed i predictor deallocation hints. La pipeline dell'Itanium, inoltre, ha solo 8 stadi (con un instruction buffer inserito tra i primi 2 stadi di front-end e gli ultimi 6 di back-end) quindi soffre poco lo stallo anche per quello...
__________________
buy here |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:52.