Mený principale
 Notizie
 Grafica
 Forum
 Links
 Retro Trailer
 Recensioni
 Modelli Amiga
 Storia Amiga
 Lista Utenti
 Policy sito
Ricerca Google

Login

Nick


Password


08 Settembre 2019 Postato da: Mak73
Compilatore GCC Ottimizzato
Volevo cercare di fare un po' di chiarezza, magari anche con il vostro aiuto, su cosa ha introdotto la nuova versione di questo compilatore.

Anzitutto un preambolo su come funziona il 68060 e quindi anche il 68080 della Vampire.
Questi due processori hanno un'unità in grado di prevedere i salti nell'esecuzione del codice, queste situazioni fanno perdere normalmente diversi cicli di clock, il 68040 ne impiega ben 11 per eseguire tale istruzione. Questa unità di predizione dei salti analizza il codice ed in base ad un certo algoritmo stabilisce o meno se sta per arrivare un'istruzione di salto o meno e di conseguenza predispone il tutto per eseguirla. Se tale predizione risulta essere giusta, l'operazione di salto viene eseguita in tempo zero, ricordo che il 68060 è in grado arrivare ad eseguire due/tre istruzioni per ciclo di clock, quindi eseguirà il salto e altre due istruzioni nello stesso ciclo, ovviamente nel caso ottimale. Se la predizione è sbagliata impiega cmq solo tre cicli per eseguire il salto.

Una piaccola parentesi relativa al 68080 che molto probabilmente, sfruttando le conoscenze odierne, ha un'unità di predizione dei salti più efficiente di quella del 68060 che era il primo processore ad implementare questa cosa insieme al suo rivale il Pentium.

Tornando a bomba sul compilatore GCC, quelli tradizionali si limitavano a compilare il codice usando il set specifico delle istruzioni del processore utilizzato, il nuovo compilatore fa una cosa in più, ordina le istruzioni in modo che l'unità di predizione dei salti interna al 68060 e 68080 abbia sempre successo, ed i salti vengano sempre eseguiti in tempo zero, creando così un enorme vantaggio.

PS: Se ho sbagliato in qualcosa segnalatemelo pure.
Commenti: 15  Aggiungi  - Leggi

Indice: Forum / Varie su Amiga


cgugl

Post inviati: 2025

Visulizza profilo Messaggio Personale
93.150.201.*** Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Commento 1
cgugl 8 Settembre 2019    12:02:12
Più o meno è così.
Quello che ho capito io è che Gunnar contestava a Bebbo che il GCC compilava codice facendo solo la valutazione sui cicli necessari alla singola istruzione. Cioè, grazie a una tabella interna, il GCC dava un voto alle singole istruzioni tipo da 1 a 10, e faceva una valutazione per scegliere la routine più conveniente in termini di cicli.
Questa tabella nel vecchio GCC veniva fatta a fiducia, cioè non era reale ma presunta, e valeva per tutte le cpu.
Un pochino col 68040, ma di più col 68060 e 68080, i processori non sono più così dipendenti dal numero di cicli, eppure la tabella del GCC non era stata aggiornata.
E la cosa peggiore è che il GCC non faceva una ottimizzazione specifica per la modalità superscalare. Cioè sostituiva l'istruzione complessa con due più semplici, ma senza verificare che le due istruzioni fossero scalari (eseguibili dal 68060 o 68080 nello stesso ciclo. Magari avevi 2 istruzioni semplici ma incompatibili tra loro e venivano eseguite una dopo l'altra).

Questo perchè il GCC era fermo da millenni.

Gunnar proponeva di dare una valutazione alla routine non solo in base al numero teoretico di cicli macchina richiesti ma di usare una funzione complessa che tenesse conto di molte cose, cioè:
- minor numero di cicli (cioè eliminare le istruzioni lente)
- preferire le istruzioni scalari (quelle che più facilmente vengono eseguite in parallelo)
- preferire le istruzioni con minor latenza (l'istruzione è veloce in termini di cicli ma non di accesso alla ram)
- preferire le routine che operano su piccole aree di memoria (per ottimizzare le cache)

POI, come se non bastasse, ha chiesto di creare una libreria con le routine più comuni ottimizzate dall'uomo da dove avrebbe pescato il compilatore , perchè l'uomo genera codice anche del 30-40% più snello....

Poi ha iniziato a fare richieste di ottimizzazione della FPU che il vecchio GCC generava in modo davvero pessimo (infatti quake compilato dal SASC è di 3 o 4 fps più veloce di quello compilato col GCC)...

Bebbo quando ha visto le richieste di ottimizzazione fatte da Gunnar si è chiuso in un convento di clausura...

Commento modificato il 08/09/2019 alle ore 12:03:46

Post inviati: 6211

Visulizza profilo Messaggio Personale
46.141.119.*** Mozilla/5.0 (X11; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0 Light/48.0
Commento 2
amiwell79 8 Settembre 2019    12:26:20
cioè ci dovrebbe pensare gunnar alla fine?a fare tutto ciò detto

https://salvatoreabbate.bandcamp.com/releases

support

https://www.actionaid.it/

https://www.amref.it/




consulenza informatica ambito aziendale - appliance sicurezza - ambienti server multipiattaforma - servizi hosting - networking

Post inviati: 3233

Visulizza profilo Messaggio Personale
217.133.133.*** Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:69.0) Gecko/20100101 Firefox/69.0
Commento 3 in risposta al 1 di cgugl
divina 8 Settembre 2019    12:36:56
Citazione

Bebbo quando ha visto le richieste di ottimizzazione fatte da Gunnar si è chiuso in un convento di clausura...


cioè ?

Utenti in IGNORE: AfAOne, carlo

MorphOS 3.11 PowerMac G5 &&Pegasos2 G4 &&AmigaOne G4 //AmigaOS4.1 FE - AMiGA4000T&D PPC/060 &&3000D &&2000 &&1200T&D &&600 &&500+ &&500 - Mac Intel &&PowerPc - x64 servers -


Post inviati: 1852

Visulizza profilo Messaggio Personale
158.148.71.*** Mozilla/5.0 (Linux; Android 9; EML-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36
Commento 4
Kyle 8 Settembre 2019    12:40:40
È scappato

Post inviati: 6211

Visulizza profilo Messaggio Personale
46.141.119.*** Mozilla/5.0 (X11; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0 Light/48.0
Commento 5
amiwell79 8 Settembre 2019    12:45:15
a quanto ho capito non vuole fare le ottimizzazioni bebbo

https://salvatoreabbate.bandcamp.com/releases

support

https://www.actionaid.it/

https://www.amref.it/




cgugl

Post inviati: 2025

Visulizza profilo Messaggio Personale
93.150.201.*** Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Commento 6
cgugl 8 Settembre 2019    12:54:53
In pratica lo abbiamo spaventato con le richieste..

Quindi non ha partecipato più alla discussione e sta lavorando in silenzio, facendo gli upgrade che ritiene di dover fare.

Post inviati: 6211

Visulizza profilo Messaggio Personale
46.141.119.*** Mozilla/5.0 (X11; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0 Light/48.0
Commento 7
amiwell79 8 Settembre 2019    12:59:17
bene allora

https://salvatoreabbate.bandcamp.com/releases

support

https://www.actionaid.it/

https://www.amref.it/




Il Webmaster

Post inviati: 3318

Visulizza profilo Messaggio Personale
87.8.203.*** Mozilla/5.0 (Linux; Android 8.0.0; SAMSUNG SM-N950F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36
Commento 8
Mak73 8 Settembre 2019    16:14:03
Beh alla fine non è che abbia chiesto chissà cosa, perché tutto si realizza con l'ultima richiesta, cioè ottimizzare le librerie di funzioni, lavoro che andrebbe appunto svolto da una persona. Diciamo che così facendo ovviamente otterresti codice che funziona solo più su 68060 e 68080, cosa che non sarebbe un grosso problema.
Diciamo che una volta compilato il tutto occorrerebbe ottimizzare l'insieme del codice generato, ovviamente detto così pare facile.
Però per fare questo Bebbo dev'essere un buon programmatore ASM

Pace e bene a tutti.

cgugl

Post inviati: 2025

Visulizza profilo Messaggio Personale
93.150.201.*** Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0
Commento 9 in risposta al 8 di Mak73
cgugl 8 Settembre 2019    17:25:14
Citazione


Però per fare questo Bebbo dev'essere un buon programmatore ASM


e non lo è !

Perciò gunnar ha iniziato a fare richieste che probabilmente stravolgono il GCC, e ha fatto una serie di esempi. Te ne ricopio uno che magari tu capisci di cosa parlavano. Esempio scritto da gunnar.

Questa routine in C
int f(int* ptr)
{
int tmp;
tmp= *ptr &2;

return tmp;
}

Viene tradotta dal GCC in questo modo:

move.l (a0),d0 #2 4 4 +d0 (costo: cicli = 1 bytes= 2)
and.l #2,d0 #3 0 4 *d0 (costo: cicli = 1 bytes= 6)
rts #5 -1 0

Ma Gunnar dice che il GCC dovrebbe tirare fuori questo:

MOVEQ #2,D0 (costo: cicli = 1 bytes= 2)
AND.L (A0),D0 (costo: cicli = 0 bytes= 2) [l'istruzione viene eseguita nello stesso
ciclo di quella che precede]

... di sicuro questa ottimizzazione funziona sul 68080, ma dovrebbe avere benefici anche per il 68060, perchè mi è sembrato di capire che il 68060 può eseguire 2 istruzioni per ciclo a condizione che occupino al massimo 4 bytes.

Post inviati: 1197

Visulizza profilo Messaggio Personale
87.3.240.*** Mozilla/5.0 (Linux; Android 6.0; ALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36
Commento 10
DrProcton 8 Settembre 2019    17:52:50
Collaborando avrebbero fatto cose eccellenti, perchè Gunnar sa come ottimizzare il codice assembly ma non sa mettere le mani su un mostro di codice come il Gcc. Bebbo è il suo esatto contrario.
Solo che Gunnar è partito in quarta, per un pó Bebbo lo ha seguito, poi ha detto..vabbè fatti il tuo fork di Gcc e lasciami in pace! Credo che sia comunque rimasto in contatto con qualcuno del team

Il Webmaster

Post inviati: 3318

Visulizza profilo Messaggio Personale
87.8.203.*** Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Commento 11 in risposta al 9 di cgugl
Mak73 8 Settembre 2019    18:26:40
Citazione

Citazione


Però per fare questo Bebbo dev'essere un buon programmatore ASM


e non lo è !

Perciò gunnar ha iniziato a fare richieste che probabilmente stravolgono il GCC, e ha fatto una serie di esempi. Te ne ricopio uno che magari tu capisci di cosa parlavano. Esempio scritto da gunnar.

Questa routine in C
int f(int* ptr)
{
int tmp;
tmp= *ptr &2;

return tmp;
}

Viene tradotta dal GCC in questo modo:

move.l (a0),d0 #2 4 4 +d0 (costo: cicli = 1 bytes= 2)
and.l #2,d0 #3 0 4 *d0 (costo: cicli = 1 bytes= 6)
rts #5 -1 0

Ma Gunnar dice che il GCC dovrebbe tirare fuori questo:

MOVEQ #2,D0 (costo: cicli = 1 bytes= 2)
AND.L (A0),D0 (costo: cicli = 0 bytes= 2) [l'istruzione viene eseguita nello stesso
ciclo di quella che precede]

... di sicuro questa ottimizzazione funziona sul 68080, ma dovrebbe avere benefici anche per il 68060, perchè mi è sembrato di capire che il 68060 può eseguire 2 istruzioni per ciclo a condizione che occupino al massimo 4 bytes.



Immaginavo che il problema fosse che Bebbo non masticasse molto l'ASM.

Io non ci capisco niente di ASM, quindi inutile che dica.
Credo che se esiste una libreria di funzioni usata dal GCC per creare il risultato finale, magari potrebbe essere passata a Gunnar perchè la ottimizzi.
Però immagino che sia un po' più complesso di questo, e forse è lì che nascono i problemi.

Pace e bene a tutti.

farox68

Post inviati: 127

Visulizza profilo Messaggio Personale
62.11.2.*** Mozilla/5.0 (Windows NT 6.1; rv:69.0) Gecko/20100101 Firefox/69.0
Commento 12
farox68 8 Settembre 2019    22:10:08
Ah grazie per aver fatto luce sul perchè Bebbo era sparito dalla discussione sul GCC che seguivo ogni tanto sul forum Vampire (non che ci capisca di Assembler, ma le discussioni tipo quella mi affascinano sempre).

Amiga 500 + A501 + KSswitcher + gotek , Monitor 1084S-P1 (da riparare)

Console Linux based:

OpenPandora classic edition , GPH GP2X F200 , GPH Caanoo, GCW-ZERO.

Android based:

JXD S7300B android 4.2



www.rbnet.it/ il blog dove ci sono i miei port per le console OpenSource

Blue-troll!

Post inviati: 516

Visulizza profilo Messaggio Personale
95.248.2.*** Mozilla/5.0 (Macintosh; PowerPC MorphOS 3.12; Odyssey Web Browser; rv:1.26) AppleWebKit/538.10 (KHTML, like Gecko) OWB/1.26 Safari/538.10
Commento 13 in risposta al 1 di cgugl
Guruman 10 Settembre 2019    00:09:33
cgugl ha scritto
Questo perchè il GCC era fermo da millenni.

GCC è alla versione 9.2, uscita ad Agosto 2019 se non sbaglio. GCC per 68k ha progredito poco perché il 68k è un'architettura morta, e chi vuole provare a resuscitarla deve mettere in conto che o assegna risorse a cose come queste, o continuerà a ottenere codice compilato in maniera non ottimale...
Citazione
Gunnar proponeva di dare una valutazione alla routine non solo in base al numero teoretico di cicli macchina richiesti ma di usare una funzione complessa che tenesse conto di molte cose, cioè:
- minor numero di cicli (cioè eliminare le istruzioni lente)
- preferire le istruzioni scalari (quelle che più facilmente vengono eseguite in parallelo)
- preferire le istruzioni con minor latenza (l'istruzione è veloce in termini di cicli ma non di accesso alla ram)
- preferire le routine che operano su piccole aree di memoria (per ottimizzare le cache)

POI, come se non bastasse, ha chiesto di creare una libreria con le routine più comuni ottimizzate dall'uomo da dove avrebbe pescato il compilatore , perchè l'uomo genera codice anche del 30-40% più snello....

GCC utilizza già delle valutazioni più complesse della sola valutazione del peso della singola istruzione, specie quando utilizzando le direttive per una maggior livello di ottimizzazione effettua più passaggi sul codice, ma un compilatore alla fin fine deve sempre applicare un algoritmo (o una successione di algoritmi) valido per tutti i codici sorgenti, non può ottimizzare ogni singola routine come potrebbe fare un essere umano. Del resto il problema delle ottimizzazioni è complesso e la conclusione è che qualsiasi sia l'architettura di destinazione e qualunque sia il livello di ottimizzazioni implementato, il codice ottenuto sarà sempre, per un motivo o per l'altro, sub-ottimo.
Per farla breve, spesso Gunnar parla di cose di cui non sembra capire appieno le implicazioni e parte con voli pindarici che fanno più male che bene al suo progetto. In questo caso chiedendo a una sola persona di fare un lavoro che non è stato fatto da centinaia di persone che hanno lavorato a compilatori C e C++ negli ultimi oltre 30 anni...

Saluti,
Andrea

Blue-troll!

Post inviati: 516

Visulizza profilo Messaggio Personale
95.248.2.*** Mozilla/5.0 (Macintosh; PowerPC MorphOS 3.12; Odyssey Web Browser; rv:1.26) AppleWebKit/538.10 (KHTML, like Gecko) OWB/1.26 Safari/538.10
Commento 14 in risposta al 9 di cgugl
Guruman 10 Settembre 2019    00:25:18
cgugl ha scritto
Perciò gunnar ha iniziato a fare richieste che probabilmente stravolgono il GCC, e ha fatto una serie di esempi.

Il senso di utilizzare un compilatore come il GCC è proprio quello di avere qualcosa di standard, che funziona su una miriade di architetture e supporta tutto il supportabile senza doversi scrivere un compilatore da zero. Stravolgerlo è contro le motivazioni stesse del progetto: allora scrivi da zero un compilatore. Ma la gente che sa scrivere un compilatore da zero è merce rarissima, ormai quasi introvabile nella comunità Amiga (e infatti ormai tutte le evoluzioni di Amiga si basano su GCC). Penso l'ultimo di questa specie sia Frank Wille che si occupa di vbcc.
Spesso le ottimizzazioni per le singole architetture sono realizzate da prorammatori dipendenti delle aziende che progettano le CPU, perché hanno documentazione, supporto, e sono pagati per fare un simile lavoro a tempo pieno.

Saluti,
Andrea

cgugl

Post inviati: 2025

Visulizza profilo Messaggio Personale
93.150.201.*** Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0
Commento 15 in risposta al 13 di Guruman
cgugl 10 Settembre 2019    07:25:49
Citazione

Per farla breve, spesso Gunnar parla di cose di cui non sembra capire appieno le implicazioni e parte con voli pindarici che fanno più male che bene al suo progetto. In questo caso chiedendo a una sola persona di fare un lavoro che non è stato fatto da centinaia di persone che hanno lavorato a compilatori C e C++ negli ultimi oltre 30 anni...


Non credo che Gunnar abbia sbagliato a chiedere le modifiche al GCC, a parte il fatto che non era il solo a farlo. In quella discussione si evidenziava anche che nel passaggio dal GCC 2.9.5 al 6.5.0 il codice peggiora.

E poi non sappiamo cosa stia facendo Bebbo...


Indice: Forum / Varie su Amiga

Utenti Online
Utenti registrati: 981 dal 1 Gennaio 2006
di cui online: 1 registrati - kaffeine -
8 non registrati

Benvenuto all'ultimo utente registrato: slpcitap

Buon Compleanno a turok641 - 

© Amigapage 1998 - 2007 - Sito italiano dedicato alla piattaforma Amiga ed evoluzioni varie.
Struttura del sito interamente ideata e realizzata da Marco Lovera e Alessandra Lovera - Tutto il materiale inserito all'interno del sito Ť dei rispettivi autori/creatori.
E' assolutamente vietata la riproduzione o la manipolazione di tutti i contenuti o parte di essi senza l'esplicito consenso degli amministratori e degli autori/creatori.

Eseguito in 0.17496013641357 secondi