|
|
|
![]() |
|
Strumenti |
![]() |
#61 | |||||||||||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
Quote:
Quote:
![]() Vi sono molteplici ragioni per cui si può decidere di introdurre registri distinti. Una di queste è rendere accessibili ai pogrammatori ed ai compilatori un maggior numero di registri in modo da poter aumentare il numero di istruzioni eseguite out-of-order ed al tempo stesso aver maggior mano libera nelle ottimizzazioni a livello di implementazione. Quote:
Quote:
Quote:
Quote:
Si risparmiano sino a tre prefissi (nel caso peggiore), ma contemporanemante si usa un prefisso più lungo e di lunghezza variabile. Il prefisso VEX (che denota le AVX) ha lunghezza variabile (2 oppure 3 byte) , viene seguito dall'opcode del tipo di istruzione (1 byte) e dopo di esso c'e' il caro vecchio descrittore "mod r/m" (1 altro byte) seguito dal descrittore SIB (1 byte, opzionale), dall'offset/displacement (1..4 byte, opzionale) e/o da un valore immediato (1 byte, opzionale). Insomma, si parla di istruzioni a lunghezza variabile da (minimo) 4 byte ad un massimo di 11 byte. Quote:
Il clock skew non è un opinione. Quote:
Quote:
Questo perchè dopo la debacle tecnologica rappresentata dal Pentium 4 in Intel non hanno avuto altra scelta che puntare sull'aumentare il parallelismo interno a colpi di core e di registri sempre più ampi. Quote:
non fosse l'ideale per il multithreading. C'era un buon motivo se con Alpha EV4 l'idea era di arrivare a 4 thread per core. ![]() Quote:
http://www.extremetech.com/computing...erver-monopoly Non è che magari ti confondi con un sistema a 4 socket precedente ? Comunque per server di fascia alta i consumi elevati non sono un problema se ad essi sono associate prestazioni adeguate. |
|||||||||||
![]() |
![]() |
![]() |
#62 | ||||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
![]() Quote:
Quote:
Posso pensare a casi in cui il compilatore eseguendo l'unrolling del loop finisca per utilizzare tutti i registri SIMD, non lasciandone alcuno libero per variabili scalari / di appoggio per risultati temporanei (non vettoriali). Non so quanto possa essere utile avere un set di registri dedicati soltanto per questi casi. Ci vorrebbero delle statistiche per decidere se ne valga concretamente la pena. Quote:
Quote:
Già soltanto prendendo le istruzioni SSE e codificandole coi due prefissi AVX copri tutti questi casi mediamente ottieni un codice o simile (x86) o più denso (x64), col netto vantaggio di avere una decodifica di gran lunga più semplice. Aggiungiamo poi che hai il supporto ai dati a 256-bit (che non puoi avere con le SSE), ma soprattutto che con entrambi i prefissi puoi specificare un terzo registro usato come seconda sorgente, e questo consente di aumentare ulteriormente la densità del codice (nonché le prestazioni). Quote:
Per cui l'ampiezza elevata dei registri SIMD ha un'importanza relativa al contesto, ed è il motivo per cui gli effetti del clock skew sono contenuti. Quote:
Quote:
![]() Quote:
Quote:
Quote:
![]() Quote:
Quote:
"In terms of performance per watt, though, the Xeon (~150W TDP) is probably just ahead of the Power8 — but in general, when you’re talking servers, power consumption generally plays second fiddle to performance density (how many gigaflops you can squeeze out of a single server)." Non male per la vecchia, decrepita architettura x86... ![]()
__________________
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: Jan 2007
Messaggi: 5996
|
Quote:
Quote:
La cosa buffa è che Intel prima con gli Itanium fece una scelta esagerata riguardo il numero di registri direttamente accessibili (mi riferisco ai 128 interi e 128 float, i 64bit di predicati "pesavano" come un singolo registro intero) ottenendo dei registri "veloci" i cui tempi di accesso erano quasi paragonabili a quelli che si avevano per la cache L1 su altre cpu. ![]() Quando invece già dai primi anni '90 era chiaro che oltre 32 per set si andava solo a complicarsi la vita, loro scelsero una dimensione che era il quadruplo. Ed ora ripetono lo stesso errore con i registri a AVX-512 con registri guardacaso ampi il quadruplo di quelli utilizzati su altre architetture. E' vero che cose come il set d'istruzioni e valori "ottimali" non contano come una volta se si è uno o due step tecnologici in vantaggio sulla concorrenza e ci si può permettere di dedicare molte più risorse sull' R&D (tre "famiglie" di cpu x86 strutturalmente molto diverse tra loro sviluppate e prodotte in parallelo), ma non è vero che "non contano" e specialmente Intel dovrebbe ricordarsi delle debacle precedenti. Quote:
Quote:
![]() Idem per versioni a basso numero di gate o a consumi ultra-ribassati. Quote:
Il multithreading invece permette solo di avere prestazioni più elevate su un singolo core riducendo le "bolle" nelle varie pipeline grazie alla possibilità di poter eseguire 2 o più gruppi di istruzioni (quelli dei vari thread) senza interdipendenze tra i gruppi o con le interdipendenze gestite a livello del software. Quote:
Già EV8, quando scrivo in fretta mi si incrociano le dita e se ricontrollo altrettanto velocemente ... ![]() Quote:
Interessante come 32 spunti sempre fuori come dimensione ottimale di un set di registri. ![]() |
|||||||
![]() |
![]() |
![]() |
#64 | ||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Per quanto mi riguarda non credo ci siano paragoni fra AVX e RISC, perché i primi consentono di operare direttamente con un dato in memoria, risparmiando la classica load (che è "fusa" in tutte le istruzioni), e il tutto mantenendo una lunghezza dell'istruzione mediamente inferiore (prefisso da 2 o 3 byte + opcode + mod/rm + offset a 8-bit = 5 o 6 byte; un RISC con load + operazione richiede 8 byte, e il divario aumenta con offset più grandi). Quindi a fronte di codice più denso (che ha i suoi benefici in tutte le gerarchie di memoria) si hanno anche prestazioni migliori (due operazioni in una, con l'ulteriore beneficio che non c'è dipendenza da load + successivo utilizzo del dato). Quote:
Quote:
Quote:
![]() AVX-512, invece, ha soltanto 32 registri, ma a 512-bit. Quindi accedi a 512-bit alla volta, e il problema che si porta dietro è il clock skew. Quote:
Quote:
Quote:
![]() Quote:
Quote:
Quote:
Per contro CISC come x86 possono contare sul fatto che possono eseguire load + operazione direttamente, e questo elimina una dipendenza (che invece è presente nei RISC); inoltre possono anche operare direttamente sulla memoria senza nemmeno passare dai registri, e ciò elimina ancora altre dipendenze. Aggiungo che grazie ad AVX adesso è possibile utilizzare 3 operandi (anche per alcune istruzioni intere), per cui almeno per SIMD ed FPU (visto che ormai si usa l'unità SIMD anche per operazioni scalari) siamo esattamente nella stessa situazione dei RISC. Complessivamente non mi pare che la situazione sia malvagia. Quote:
Quote:
Per il codice general purpose si sente molto meno quest'esigenza. 16 registri coprono la stragrande maggioranza dei casi. Certamente con 32 registri si riesce a fare molto di più e coprire molti più casi, ma il prezzo da pagare è lo spazio nella opcode table che impatta sulle scelte e infine sulla densità di codice. Comunque ci sono anche soluzioni che consentono di utilizzare 32 registri o anche più (per l'unità SIMD) a costi molto contenuti a livello di codifica e, quindi, di densità di codice. ![]() P.S. Non so a te, ma questa discussione mi sta piacendo molto. ![]()
__________________
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 |
||||||||||||
![]() |
![]() |
![]() |
#65 | |
Bannato
Iscritto dal: Oct 2005
Città: In giro per il mondo
Messaggi: 5824
|
Quote:
E' un piacere leggervi |
|
![]() |
![]() |
![]() |
#66 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Grazie.
![]() Come avrai intuito, sono argomenti di cui potrei parlare per ore, perché li adoro. Poi devo dire che incontrando interlocutori con cui è possibile intavolare una discussione civile e onesta (sebbene ovviamente ognuno abbia le propria visione delle cose, per l'appunto), è anche più piacevole.
__________________
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 |
![]() |
![]() |
![]() |
#67 | |||||||||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
Quote:
Quote:
In Intel erano partiti con l'idea di realizzare un architettura VLIW con "compressione" delle istruzioni e sono finiti con il realizzare un "coso" con così tante feature che si intralciavano reciprocamente da complicare a livelli demenziali l'implementazione. Immagina un VLIW, un CISC, un RISC, un AS/400, una calcolatrice RPN della TI, una pascalina ed un abaco che entrano in una stanza buia dopo essersi bombati di cocaina, viagra e coca-cola con aspirina dentro. Itanium è praticamente figlio di tale ammucchiata, ma nessuna delle architetture rivendica la paternita e sopratutto non si capisce quale/come/cosa potesse essere la madre. ![]() Quote:
Quote:
Quote:
Poi si sono resi conto che erano entrati in zona plaid (semitcit. "Spaceballs") ed hanno rallentato aggiungendo più core su moduli MCM ma con POWER8 se non sbaglio c'e' nuovamente l'opzione per versioni a 5Ghz. Se ricordo correttamente le versioni a clock "smodato" tornavano particolarmente utili nei casi in cui si doveva far girare vecchio codice binario per altre architetture (tipo AS/400, ma anche roba vecchia per mainframe) in emulazione. Quote:
Dipende ad esempio da quanti core si vogliono implementare per chip e con quali obiettivi Ad esempio per gli ARM ha senso un architettura tipo big.LITTLE mentre con gli x86 proprio non se ne parla. E non è un caso se per roba embedded c'e' una marcata preferenza per soluzioni basate su cpu RISC o simil-RISC (maggiori opzioni disponibili in termini di potenza di calcolo e consumi). Quote:
Ma dall'altro lato più sono i registri visibili e più si allunga la lunghezza delle istruzioni e più si impongono vincoli all'implementazione dell'architettura. Da anni e con un fottio di test e simulazione in supporto della cosa il numero ottimale è tra 16 e 32 per set di registri per cpu con word size ottimale a 32..64 bit (accessibili con istruzioni "semplici", senza prefissi ed altri barbatrucchi), con 32 la scelta ottimale per architetture a 64bit. Per architetture a 16bit e word size ottimale 16bit invece il valore ottimale era 8..16 per set di registri. x86 è nato come "evoluzione" a 16bit di un architettura (l'8080) ad 8 bit e si è portato la limitazione degli 8 registri molto a lungo, salendo a 16 con l'aggravio dei prefissi ma solo grazie ad AMD (che con x86-64 estese sia i registri GPR che quelli SSE a set di 16 registri) ed infine con l'ultima estensione a set di 32 registri solo per i registri SIMD di AVX. Quote:
Nel senso che Intel incapace di sganciarsi dagli x86 (ci ha provato in grande stile almeno tre volte) ora sembra intenzionata a farli evolvere in una specie di appendice del set d'istruzioni AVX. ![]() Quote:
![]() Ma credo che tra qualche tempo ci sposteremo su altri thread, nel senso che i core ARMv8 "per dispositivi mobili" di prossima uscita sembrano parecchio aggressivi sul lato prestazioni e quindi sorgeranno discussioni a riguardo e contronti con i-core-precedentemente-noti-come-Atom ecc. ecc. Senza contare gli atti di necromanzia di Nvidia ... che a quanto sembra con il Tegra K1 a 64bit (pin compatibile con il Tegra K1 a 32 bit basato su core A15, ma con core Denver ed architettura interna molto diversa) sta usando con risultati interessanti un approccio simile a quello delle cpu Transmeta: http://www.extremetech.com/computing...t-android-chip (ovviamente credo che quei numeri siano gonfiati rispetto a quello che si otterrà nella realtà con un tablet con quel SoC, se non altro per evitare di mangiarsi viva la batteria ![]() |
|||||||||
![]() |
![]() |
![]() |
#68 | ||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() ![]() Quote:
Tolto questo, è difficile vedere altri RISC arrivare a frequenze così elevate mantenendo consumi comparabili con quelli che ritroviamo in ambito desktop o mobile. Quote:
Quote:
Quote:
Fortunatamente anche il settore embedded sta diventando sempre più esigente, per cui i chip diventano sempre più grossi per tutti, per cui si aprono degli spazi anche per x86. Quote:
Quote:
A parte questo, l'ISA CISC ha i suoi pregi, di cui ho già parlato prima, e che le consentono di richiedere un minor numero di registri per effettuare le stesse operazioni. Se disassembli un eseguibile x86 o x64, troverai tante istruzioni tipo MOV Memoria,ValoreImmediato, ADD Memoria,ValoreImmediato, e così via, che oltre a essere molto veloci, non sporcano alcun registro. Quote:
![]() Quote:
Quote:
- cache L1 codice quadruplicata (128KB) rispetto alla media (32KB) e cache dati raddoppiata (64KB), necessarie per sfamare questo mostro; - architettura nativa incompatibile con ARM; le istruzioni ARMv8 (e immagino anche ARM32, Thumb, ecc.) vengono prima decodificate nell'ISA nativa, e soltanto dopo eseguite. Eventualmente possono essere memorizzate nella speciale cache in memoria; - design VLIW in-order; - design votato all'esecuzione single-thread (anche se questo fa a pugni con l'architettura in-order; anch'io voglio vedere i benchmark reali). Infatti nei pochi benchmark (sintetici, per lo più) presentati "casualmente" dominano quelli single-thread (con quelli multi-thread la musica sarebbe stata diversa, specialmente per BayTrail, che ha 4 core a disposizione); - soltanto due massicci core a disposizione (rispetto ai 4 di K1 a 32-bit) che si sono fregati tutto lo spazio. E' pure sparito il mini-core da usare per risparmiare corrente quando c'è poco carico di lavoro; - frequenze molto elevate (e anche per questo vorrei vedere i consumi reali). Decisamente più elevate rispetto ai processori x86 che sono stati inclusi nei benchmark. A primo acchito direi che il reparto marketing abbia fatto un ottimo lavoro. ![]() ![]() Di questo nuovo progetto penso ci sarà di che parlare in qualche futura notizia a riguardo.
__________________
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 |
||||||||||
![]() |
![]() |
![]() |
#69 | |||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
Quote:
(quindi con compilazione offline seguita da uso di tecniche JIT solo nei casi in cui si rileva codice automodificante) anche un processore in-order va bene (perche il "ricompilatore" di fatto è in grado di riordinare le istruzioni e di eseguire un interleave di sequenze di istruzioni native che corrispondono alle istruzioni "originali") ed avere un clock elevato torna utile per alzare le prestazioni quando si esegue il codice ricompilato, ristrutturato & riordinato. Quote:
Quote:
![]() E' ovvio che NVidia pensa che se riesce a mettere a punto il sistema completo (hardware VLIW + "ottimizzatore" hardware/software) poi lo sviluppo successivo sarà un sistema multicore VLIW che in base al carico ed alle esigente opera sia come cpu multicore che come GPU. Insomma, è un altra interpretazione de "il set d'istruzioni non è più rilevante" (a patto che sia sufficientemente semplice ed ben ottimizzabile tramite ricompilazione, suppongo). |
|||
![]() |
![]() |
![]() |
#70 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Con questo tipo di codice puoi ricompilare come vuoi, ma un'architettura in-order darà sempre risultati peggiori rispetto a una OoO. Quote:
Ogni produttore di CPU ha nel suo portfolio di brevetti chissà quanta roba sull'argomento. Sicuramente Transmeta ne aveva sviluppata parecchia, e adesso è parte di nVidia (che l'ha acquisita un po' di anni fa), ma se non erro le licenze relative alla riduzione dei consumi sono state cedute o licenziate anche a Intel. La semplicità delle istruzioni aiuta sicuramente nella decodifica, e di questo ne abbiamo parlato: i RISC hanno un vantaggio, ma questo vantaggio non ha impedito che uscissero fuori architetture come big.LITTLE, che risolvono ben altri problemi. Però Apple A7 e Tegra K1 64-bit... non ne fanno uso. E Intel può contare sul Loop Stream Detection. ![]() Quote:
Inoltre nVidia ha dichiarato (mi pare di averlo letto sul loro blog) che ciò che lei vede è l'accoppiata CPU per calcolo "general purpose" e GPU per il calcolo (massicciamente) parallelo. D'altra parte è anche logico che sia così: la GPU non è fatta per soppiantare il lavoro in cui una CPU semplicemente eccelle. La cosa che a mio avviso cozza tremendemente è l'aver scelto un modello VLIW per la CPU, che si è dimostrato sempre poco performante per il calcolo "general purpose". Esempi illustri ne abbiamo avuti in passato: Itanium e... proprio Transmeta. Per questo voglio vedere (tant)i benchmark eseguiti con codice variegato. Quote:
![]() I risultati concreti sono di là da vedersi, come già detto, ma è un segnale significativo sull'argomento "ISA = importante". ![]()
__________________
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 |
||||
![]() |
![]() |
![]() |
#71 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Questo è il sistema POWER 8 in oggetto: singolo socket, con supporto a CPU con 4/6/8 core. Riporto di seguito l'immagine, da quel thread, riguardo al consumo: ![]() Sono 500W, ma credo si riferisca all'intera piattaforma (quindi non soltanto alla CPU). Comunque è un sistema con soli 4 core a 3Ghz, e il consumo mi pare molto elevato.
__________________
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 2007
Messaggi: 5996
|
Quote:
( S814-8286-41A ovvero IBM Power System S814) http://www-01.ibm.com/common/ssi/Sho...st_locale=null E' un server con socket dual-chip module (DCM) in formato 4U rack-mount oppure desk-side con un fottio di roba oltre alla cpu (fino a 512GB di ram, fino a 18 unita di memoria "formato DVD bay" espansioni slot PCIe hot-swap, doppio alimentatore hot-plug 4 porte USB 3.0, 2 USB 2.0, 2 link HMC 1Gbit, ecc. ecc. ). |
|
![]() |
![]() |
![]() |
#73 | ||||||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
Quote:
Quote:
Quote:
Ad esempio i CISC sono stati il risultato di successivi sviluppi tecnologici che permettevano di aggiungere sempre più funzionalità in hardware ed il termine CISC è nato per indicare il "problema" che si era venuto a creare e che l'approccio RISC si proponeva di risolvere (con architetture più snelle e con compilatori più avanzati). Poi VLIW e TTA (Transport Triggered Architecture) sono stati un ulteriore tentativo di semplificare l'hardware spostando più oneri di ottimizzazione sui compilatori, anche se già le prime architetture di quel tipo resero chiaro che esistevano limiti riguardo quanto si poteva scaricare sul software e di quanto certi approcci potevano essere scalati in hardware (sempre nei limiti di tecnologie e background teorico disponibile). Come del resto successe con l'approccio multicore del Cell con IBM che scommise troppo su quello che poteva fare il compilatore ... e perse. Quote:
Ad esempio, le GPU attuali eccellono in problemi in cui in genere l'approccio SIMD è quello ottimale. Quindi cosa comporta per l'enfasi eccessiva che Intel pone sul lato SIMD delle sue cpu ? ![]() Quote:
In un certo senso "si delega al compilatore" il riordinamento e l'appaiamento delle istruzioni che in una cpu superscalare con esecuzione out-of-order viene gestito internamente. Il modello VLIW "puro" usa istruzioni "larghe", senza "compilazione" a partire da un set d'istruzioni differente, ovviamente questo crea problemi in termini di dimensioni del codice, ecc. ecc. Ed infatti i VLIW "reali" di solito implementano un formato più "compatto" che viene espanso in modo molto efficiente dal decoder delle istruzioni. Per questo poi anche nell'Itanium si seguì l'approccio EPIC che tra le altre cose si basava su istruzioni "compatte" ottimizzate per essere "espanse" in istruzioni VLIW "interne" dal decoder (cosa che permetteva pure di aggiungere o togliere unita funzionali, entro certi limiti). Nel caso dell'Itanium il vero problema non era tanto il lato VLIW/EPIC ma tutta la roba che avevano aggiunto a livello di funzionalità accessorie e le poche ALU dedicate agli interi (nella prima implementazione) rispetto alle esigenze reali. Nel caso di Transmeta invece il problema era il set d'istruzioni "compresso" utilizzato ed il codice che veniva eseguito (ottimizzato per un architettura decisamente non-VLIW ![]() Ma non era malaccio, il Crusoe a 700Mhz aveva le prestazioni di un Pentium III a 500Mhz ed aveva consumi relativamente bassi, solo che in quel periodo Intel poteva uscire per prima con i processi di produzione più avanzati (ed anche grazie a questo salire di prestazioni più rapidamente) e forniva incentivi a chi usava le sue cpu ed i suoi chipset in primo luogo in funzione anti-AMD (ma con Transmeta presa in mezzo dallo scontro allora in atto tra i due). Quote:
In altre parole è più versatile. ![]() L'implementazione "interna" è VLIW, ma l'architettura visibile al programmatore è ARMv8. Guardacaso il set d'istruzioni scelto ha una decodifica semplice, molti registri "di uso generale" e molte più possibilità di parallelizzazione e riordino per esecuzione in-order grazie ad un modello logico che permette di ottenere un miglior parallelismo interno in fase di esecuzione. ![]() |
||||||
![]() |
![]() |
![]() |
#74 | ||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
E' un peccato non avere altri dati per poter capire quanto incida realmente la CPU sul consumo. Quote:
![]() Purtroppo al momento non ho sotto mano il codice dei miei emulatori, ma appena lo recupero posto qualche spezzone, così sarà facile capire quali dipendenze ci sono in gioco e perché non posso essere eliminate riordinando il codice. Quote:
Quote:
Quote:
![]() Non conoscevo l'esistenza delle architetture TTA. Immagino che si trovino in ambiti altamente specializzati. Quote:
Quote:
![]() Le GPU ci sono arrivate adesso, e quindi s'è creata questa sovrapposizione / conflittualità. Ovviamente ognuno spinge per la sua strada, ma alla fine, come per tutte le cose, contano i numeri commisurati ai costi per ottenerli. Ci sono ambiti in cui il modello SIMD di Intel si presta meglio di quello delle GPU, e viceversa. ISA, microarchitettura, e piattaforma hanno il loro peso in tutto ciò. E' difficile affermare quale modello sia migliore in assoluto rispetto all'altro, e per questo è anche difficile prevedere quale s'imporrà alla fine. Aggiungo, però, un'osservazione. Al momento se devi far eseguire un certo calcolo alla GPU, devi mettere in piedi un protocollo di offloading e condivisione delle risorse che penalizza molto le prestazioni complessive che si potrebbero ottenere se si potesse eseguire immediatamente il codice. HSA di AMD & ARM nasce per migliorare molto quest'aspetto, ma non lo risolve del tutto, oltre al fatto, assolutamente non di poco conto, che risulta necessario riscrivere in parte il codice per poterne trarre beneficio. Una CPU, invece, potrà sempre "partire subito" senza aspettare niente e nessuno per eseguire i calcoli, e questo ha e manterrà un suo vantaggio. Il problema, per la CPU, è di avere a disposizione un'unità SIMD abbastanza "massiccia" a cui smistare il lavoro. La direzione che Intel intrapreso è ovviamente proprio questa, vedi AVX e, soprattutto, il prossimo AVX-512. Quote:
Quote:
Quote:
Un'ISA come x86 ha pochi registri, ma li sfrutta parecchio, per cui si fa ampio uso di tecniche di register-renaming nelle microimplementazioni. Tutto ciò può facilmente venire implementato da un'ISA VLIW che ha parecchi registri a disposizione e può sfruttarli proprio per il renaming tracciando opportunamente il loro utilizzo. Altra cosa, x86 ha una modalità d'indirizzamento della memoria molto complesso per un RISC (tranne per ARM, che ne mette a disposizione alcuni simili): Base + Indice * Scala (da 1 a 8) + Offset a 32 bit. Le micro-implementazioni x86 ne traggono vantaggio mettendo a disposizioni AGU dedicate soltanto a questo scopo, ottenendo ottimi risultati. Un'ISA VLIW immagino che abbia modalità d'indirizzamento estremamente semplici, ma dovendo emulare quelle di x86 e avendo a disposizione parecchi registri, può facilmente spalmare tutti questi calcoli nei suoi bundle & registri usati, magari intervallando i calcoli di più istruzioni x86. Infine, x86 ha pure alcune istruzioni abbastanza complicate (ma che da tempo non si trovano più o sono molto rare) da richiedere l'esecuzione di parecchi calcoli che magari fanno uso di registri temporanei per i calcoli intermedi. In sostanza, e per concludere il discorso, anche se x86 ha pochi registri, un'ISA VLIW potrebbe benissimo usare i suoi molti registri interni per accelerarne l'emulazione. Il problema rimane il solito: le dipendenze del codice sono comunque abbastanza rilevanti nel codice general-purpose, da mettere un freno alle prestazioni raggiungibili. Quote:
Quei dati delle prestazioni a mio avviso sono gonfiati tanto quanto quelli di nVidia per Project Denver. ![]() ![]() Last but not least, già il primo Crusoe aveva una cache L2 con linee di ben 128 byte = ben 1024 bit. Probabilmente è questo che ha frenato il clock, causa problematiche di clock skew. Direi che almeno sull'approccio VLIW di Transmeta potremmo anche metterci sopra una bella pietra tombale. ![]() Quote:
![]() Certamente per l'ISA VLIW interna avranno tenuto conto di tutto ciò (non avranno realizzato un'ISA VLIW fine a se stessa), ma le 3 ISA ARM da emulare sono abbastanza diverse, sia a livello di decodifica sia d'esecuzione. Per cui continuo a rimanere scettico, soprattutto per l'approccio VLIW adottato.
__________________
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 Ultima modifica di cdimauro : 17-08-2014 alle 09:19. |
||||||||||||
![]() |
![]() |
![]() |
#75 | ||||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
Quote:
http://amigaworld.net/modules/newbb/...orum=33#737012 Non dei core, non della mainboard, ma del sistema completo. Anche con "solo" 16GB di ram installata e nessun disco montato hai un sacco di roba oltre i core (tipo due alimentatori capaci di reggere il sistema in configurazione massima e che supportano l'hot-swap, da soli nella pura e semplice parte switching si mangiano almeno un 8% circa del consumo totale). Quote:
![]() Niente ISR, niente istruzioni che su un 80186 o su un 6502 permettono di manipolare porte di I/O ed altra roba che sarebbero normalmente vietata in user-space, ecc. Quote:
Mentre invece con più registri (ma non troppi) visibili al compilatore è esso a svolgere il grosso dell'ottimizzazione e quindi la decodifica verso istruzioni VLIW è più semplice ed efficiente. Per questo il set d'istruzioni ha ancora una discreta influenza sulle prestazioni ottenibili. Quote:
![]() La dimensione delle linee di cache L2 ed L3 viene cambiata di generazione in generazione in base all'ampiezza dei bus verso la ram e della frequenza massima di lavoro della cpu e della ram. Attualmente negli x86 di Intel è stabile sui 64byte. Il motivo principale dell'attuale "standardizzazione" a 64byte è legato alla tecnologia dei moduli di ram. Le DDR hanno un canale che trasferisce 64bit per fronte (8byte), ma danno il massimo di prestazioni quando sono in burst mode, ovvero trasferiscono 4 gruppi di 8 byte consecutivamente (32byte totali). A questo punto considera che la configurazione comune è avere DUE canali DDR e questo spiega la "standardizzazione" attuale su linee da 64byte. Ma ad esempio in passato gli Itanium mcKinley avevano una L2 line size di 128byte ed i Pentium 4 avevano una L2 line size di 64byte ma con un opzione per leggere/scrivere due cache line consecutive (nel caso fossero stati abbinati ad un northbridge con memory controller con più di due canali o che supportasse una tipologia di ram con una banda di I/O più elevata). |
||||
![]() |
![]() |
![]() |
#76 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
![]() Ma posso dirti che con l'80186 era una grandissima comodità il fatto che le periferiche fossero mappate quasi tutte nelle porte di I/O. In questo modo intercettare le scritture e letture alle varie periferiche era di gran lunga più efficente rispetto a fare la stessa cosa su un sistema che è interamente memory-mapped. Questo perché le porte sono di meno, e con una piccola jump-table riuscivo a gestire il tutto. Ma soprattutto per le letture e scritture non dovevo assolutamente mettermi lì a controllare se per caso l'indirizzo da leggere/scrivere andava a toccare una certa zona di memoria; puoi immaginare quanto lento possa essere tutto ciò, e quanto incida sulle prestazioni. All'epoca mi ero dedicato esclusivamente all'emulazione della scheda grafica CGA, per cui l'emulazione era molto veloce proprio perché tutti i suoi registri erano mappati su porte di I/O e il suo framebuffer era mappato su 32K di memoria ma non c'erano cose strane da controllare (bastava leggere e scrivere). EGA e VGA, invece, mi avrebbero costretto a effettuare il classico controllo per vedere se l'indirizzo di memoria rientrava fra $A0000 e $AFFFF, in quanto la memoria mappata per il framebuffer faceva uso di una sorta di bank switching per gestire la grafica a bitplane (il mode 13 a 256 colori, invece, era perfetto: 320x200 e accesso a singolo byte). Emulare un sistema memory-mapped è un bagno di sangue a livello prestazionale... Quote:
A questo punto se è difficile tenere traccia del register renaming, sarà relativamente difficile gestire anche le dipendenze delle istruzioni, che ha problematiche simili da risolvere. Ricadiamo sempre sullo stesso punto: spostare sul software ciò che puoi fare in hardware rimane una pessima idea per l'impatto negativo che ha sulle prestazioni, visto che non si può ottimizzare il codice più di tanto. Quote:
Al solito, sai che questo non è il mio campo: le mie sono soltanto osservazioni da esterno alla materia. ![]() Quote:
![]() Quote:
Comunque bene o male oggi tutti i sistemi hanno un'interfaccia con la memoria simile, perché poter contare su una banda elevata è diventata un'esigenza da soddisfare necessariamente, specialmente avendo una GPU integrata che va sfamata e ha parecchia fame di banda. Secondo te tutto ciò non incide nel famigerato clock skew di cui abbiamo parlato? Voglio dire: le problematiche del memory controller si dovrebbero riversare sulla prima cache che incontra, ad esempio la L3, da questa alla L2, e alla L1. Non so che impatto potrebbe avere, poi, riguardo all'interfacciamento coi registri.
__________________
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 |
||||||
![]() |
![]() |
![]() |
#77 | ||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
Quote:
sono accessibili in user-mode (o non esiste differenziazione tra user-mode e kernel-mode). Quote:
L'esecuzione in-order oppure out-of-order sono scollegate concettualmente dalle architetture RISC,CISC, SIMD o MIMD che siano, ma il momento in cui conviene passare ad una delle due o ritornare all'altra dipende dalle tecnologie di implementazione disponibili e dall'architettura. Nulla ad esempio vieta di realizzare una cpu VLIW con esecuzione out-of-order (VLIW è un caso particolare di architettura MIMD), solo che di solito ci si aspetta che in un architettura VLIW sia il compilatore (ahead-of-time oppure just-in-time) a risequenziare il codice in modo da non rendere necessario o sufficientemente conveniente aggiugere il supporto per esecuzione out-of-order. Inoltre se il set d'istruzioni "visibile al programmatore" non è vincolato ad un architettura VLIW, quando il ritorno in termini di costro/prestazioni di tale approccio non è più conveniente, diventa più facile passare ad altre architetture che usano lo stesso set d'istruzioni invece che avere un VLIW "out-of-order". Mentre invece per i RISC ,grazie alle maggiori ottimizzazioni gestibili dal compilatore, solo dopo un certo punto è diventato conveniente aggiungere il supporto per il renaming ed esecuzione out-of-order e visto che avevano un loro set d'istruzioni, non si è parlato di "abbandono" dei RISC ma semplicemente di loro implementazione out-of-order, ecc. |
||
![]() |
![]() |
![]() |
#78 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Tornando all'emulazione di software per i POWER, se ci si limita esclusivamente al caso che hai esposto, le prestazioni saranno buone. Quote:
Io da un VLIW mi aspetto che sia in-order (riguardo alle istruzioni contenute nel bundle) e di trarre vantaggio dalla lunghezza del bundle per ottimizzare la codifica delle istruzioni. 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 |
|||
![]() |
![]() |
![]() |
#79 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 5996
|
|
![]() |
![]() |
![]() |
#80 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Sicuramente. C'erano pure luminari che avevano predetto che i CISC non avrebbero potuto avere una pipeline (immagino si riferissero a una superpipeline).
Intel col Pentium e Motorola col 68060 li smentirono. ![]() ![]() Purtroppo Motorola decise di mollare i CISC e buttarsi nell'impresa PowerPC, che però, a conti fatti, non so quanto le sia convenuto, visto come sono messi questi processori. E' vero che oggi rimane soltanto Intel in grado di competere a tutti i livelli con un'architettura CISC. Fortunatamente. ![]() ![]()
__________________
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:14.