|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
E si andava a scontrare con GPU pensate appositamente per il mobile... Vero che le ultime versioni degli Atom montavano GPU più potenti e ottimizzate, ma Adreno e Mali erano meglio ottimizzate per gli scenari mobile. Quote:
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 |
|||||
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6930
|
Quote:
( Fonte: https://www.theregister.co.uk/2018/0...ge_windows_10/ ) Nell"articolo parlano anche di una cooperazione tra Microsoft e Qualcomm per sviluppare due cpu EDGE chiamate R0 ed R1. |
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E' proprio uno degli articoli che avevo letto.
Dentro c'è un link a una pagina rimossa, ma che è stata resa accessibile grazie a archive.org, con maggiori dettagli su come funziona EDGE.
__________________
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 |
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6930
|
Quote:
Nel senso che codice ottimizzato per un R1 32-way gira bene anche su un R0 con solo 8 -way e viceversa, specialmente se ci sono altri thread in esecuzione ed al tempo stesso si riduce enormemente la gestione delle interdipendenze e lo scheduling lato cpu. Ovviamente se il compilatore non fa bene il suo lavoro poi c'e' il rischio di ritrovarsi con i problemi riscontrati in precedenza su Intel EPIC/Itanium e sul Cell di IBM, ma a differenza di questi due l'architettura EDGE dovrebbe dare buoni risultati anche con core più "semplici" (per sistemi embedded a basso consumo) o che disattivano unita di esecuzione dinamicamente per ridurre i consumi in base al carico computazionale ed altro. |
|
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Eh, ma è proprio quello il problema: nessun compilatore potrà mai generare codice in grado di competere con la "visione" ciclo di clock per ciclo di clock e il conseguente "dispatch" delle istruzioni a runtime.
Itanium docet, per l'appunto.
__________________
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 |
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6930
|
Quote:
Usano una codifica delle istruzioni e delle informazioni su interdipendenze e dataflow che è più efficiente e si presta bene anche al multithreading. Semplicemente la cpu non spreca area sul chip e logica di scheduling per "ricostruire parzialmente" le informazioni di ottimizzazione e parallelizzazione che il compilatore estrare anche per le altre cpu, quindi si possono realizzare cpu più semplici a parità di ipc medio oppure che fanno scheduling più sofisticato visto che non devono "riscoprire" quello che gli può già dire il compilatore. Con EPIC il compilatore doveva ottimizzare molto di più tenendo conto dello specifico numero di unità di esecuzione differenti ecc. ecc. (è c'erano un sacco di feature che si intralciavano tra loro) con EDGE invece sembra che vi sia un maggior equilibrio,dove compilatore e cpu si limitano a fare quello in cui eccellono senza intralciarsi troppo. |
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Guarda, alla fine è esattamente lo stesso principio dei VLIW prima e di EPIC/Itanium poi.
Puoi ottimizzare quanto ti pare e codificare come meglio credi le dipendenze: non potrai MAI prevedere al 100% le branch misprediction e i tempi delle load (e anche store, se ci mettiamo di mezzo la paginazione), schedulando di conseguenza le istruzioni da eseguire. L'approccio di EDGE, dunque, può senz'altro andare bene per codice "più lineare", ma per quello "general purpose" certamente no: è molto meglio un processore out-of-order tradizionale.
__________________
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 |
|
|
|
|
|
#28 | |
|
Senior Member
Iscritto dal: Dec 2015
Messaggi: 6210
|
Quote:
Solo un ottimo compilatore può scoprire che con un certo ordine si può mandare in parallelo magari 32 istruzioni sul singolo core (naturalmente avendo le unità funzionali necessarie). Haswell per esempio mi pare che oltre 8 istruzioni (poi istruzioni micro-ops) non riesca ed è già un gran numero, altre archittetture (tra cui gli arm almeno fino a A57) oltre 3 o 4 non si spingono. Quindi la schedulazione dinamica della cpu dovrà sempre essere aiutata da un buon codice ottimizzato e se si vuole andare oltre certi livelli di parallelismo ci vorrà probabilmente la schedulazione statica ed un compilatore in grado saturare le unità funzionali presenti. Ultima modifica di Yrbaf : 04-07-2018 alle 20:33. |
|
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Diciamo che generalmente più un codice è parallelizzabile, e più è conveniente utilizzare processori vettoriali, o addirittura si passa direttamente al modello GPU.
E' vero che i processori x86/x64 di Intel sono in grado di eseguire max 8 uop per ciclo di clock (sono 10 per Ryzen). Sul versante ARM il massimo in tal senso è rappresentato da Project Denver di nVidia, che pur non essendo un processore nativo ARM arriva a eseguire fino a 7 istruzioni ARM per ciclo di clock; seguito a ruota da Apple, con max 6 per ciclo di clock (ecco perché i core di Apple sono molto grossi paragonati a quelli della concorrenza, e con prestazioni così elevate). Però ma una uop può anche eseguire un'operazione SIMD, e quindi su più dati allo stesso momento (con AVX512 di Intel che arriva a max 64 operazioni su byte e fino a max 8 operazioni in virgola mobile a precisione doppia). Quindi un processore general purpose moderno ha pure abbastanza risorse e capacità per eseguire un certo numero di operazioni per ciclo di clock. Ovviamente non potrà mai eccellere sul versante parallelo, perché soluzioni come quelle di cui abbiamo parlato finora si prestano decisamente meglio. Alla fine il concetto rimane sempre lo stesso: non esiste la soluzione in grado di avere prestazioni migliori su tutti gli ambiti applicativi. Ed è anche il motivo per cui i processori moderni sono affiancati da coprocessori diversi (GPU in primis, ma anche DSP per l'audio e/o per elaborazione di immagini, Quicksync per transocodifica video, ecc.). P.S. Servono anche buoni compilatori, ovviamente, anche per processori general purpose e fortemente out-of-order.
__________________
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 |
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6930
|
Quote:
EDGE è strutturato in più core fisici che possono essere raggruppati in core logici con maggior parallelismo interno e questo lo decide il compilatore in base a quante istruzioni riesce a parallelizzare, quindi si ha comunque una maggior efficienza nell'utilizzo delle unita di esecuzione (se il compilatore "vede" che non riesce a parallelizzare a sufficienza, seleziona un singolo core fisico, lasciando più risorse per eseguire altri thread/processi). Poi l'implementazione dei core fisici può essere n-way, in-order o out-of-order, in base a cosa è più importante per un certo tipo di cpu, SoC o macrocella. Mi sembra decisamente più versatile rispetto a VLIW ed EPIC e con molto più margine di crescita rispetto ad un "classico" sistema multicore out-of-order. |
|
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
EDGE può cercare di spremere il massimo che un compilatore possa fare, ma rimangono i limiti dei compilatori, che non possono prevedere tutto, per l'appunto.
Alla fine mi sono fatto la seguente, personalissima nonché banale, idea: l'esecuzione out-of-order non esisterebbe se i compilatori fossero in grado di farsi carico di tutto il lavoro di ottimizzazione & schedulazione delle istruzioni. Per questo dubito che EDGE possa trarre vantaggio dall'uso di eventuali core out-of-order: come fai a "parallelizzare" a compile time raggruppando istruzioni tenendo conto che poi queste istruzioni potrebbero avere problemi in esecuzione? Il lavoro di EDGE, peraltro, riescono già a farlo degli ottimi compilatori, se si tratta di (auto)vettorizzare il codice e/o di distribuire il carico di lavoro su più core. Se vantaggio c'è in questa nuova architettura, continua a essere difficile notarlo in ambito più general purpose.
__________________
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: 01:29.











o, c'era un bug di inizializzazione che veniva re-introdotto ad update alterne, non so se dipendesse da chi gestiva il firmware in Samsung o in Marvell).









