Intel

Intel e supporto a x86-64: alcuni possibili scenari

di pubblicata il , alle 09:17 nel canale Private Cloud Intel e supporto a x86-64: alcuni possibili scenari

Il notevole intresse da parte degli sviluppatori e dei clienti che stanno raccogliendo i processori AMD64 potrebbe spingere Intel a integrare estensioni a 64bit nelle proprie cpu

 
84 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info
cdimauro31 Dicembre 2003, 07:26 #71
Originariamente inviato da xtg
L'x86 è competitivo grazie all'attuale implementazione (sia pentium 3/4 che athlon). Non capisco se critichi l'EPIC come architettura oppure l'attuale implementazione Itanium.

Per l'architettura in primis. Per quanto riguarda l'implementazione, per fortuna con Itanium II abbiamo cominciato a vedere delle prestazioni decenti. Certo è che fa impressione notare l'utilizzo spropositato di cache di terzo livello per rendere più performante,e quindi più competitivo, questo prodotto...
Sono d'accordo che Itanium come prestazioni non è un gran che'. Me secondo me l'architettura EPIC ha grossi margini di miglioramento.

Quando? Intel dispone della miglior tecnologia nel campo dei compilatori, e ancora non è riuscita a sfruttare per bene la sua nuova architettura. C'è qualcosa che non quadra, non credi?
Probabilmente Intel si è mossa troppo in fretta, ma con l'ottica di essere pronta quando il mercato si sarà spostato verso l'alto.

Troppo in fretta? L'Itanium come progetto ha più di 8 anni di vita: mi sembrano abbastanza per pensare, in questo lungo arco di tempo, di renderlo competitivo...
16 registri sono abbastanza? Nel campo desktop sicuramente.

Non solo, era un discorso generale. Esistono degli studi sugli algoritmi in cui si analizza il quantitativo di registri necessario per poter coprire interamente l'esecuziona di una routine. Buona parte richiedono fino a 8 registri, la stragrande maggioranza fino 16, e una piccolissima parte fino a 32 registri (l'implementazione del parser del linguaggio Perl, se non ricordo male), e si possono contare quelle che ne richiedono più di 32.
Non si scrive più in assembly? Nelle applicazioni per desktop non ha certo senso, i compilatori di oggi sono veramente ottimizzati.

Compilatori realmente ottimizzati, nell'accezione accademica del termine, non ne esistono e non ne esisteranno mai. Il problema della generazione del codice ottimale a partire da un qualunque sorgente è dimostrato essere non computabile.
Diciamo che gli attuali compilatori fanno un buon lavoro...
Istruzioni a lung. variabile: che tipi di vantaggi avrebbero? (questa è proprio una domanda, vorrei sapere la tua opinione)

I vantaggi sono che si utilizza (quasi sempre) il minimo numero di bit (ma è meglio parlare di byte, alla fine) che sono necessari per rappresentare l'operazione che si vuole eseguire. Sono, quindi, notevoli in termini di spazio occupato, e le implicazioni pratiche sono le seguenti:
1) minor utilizzo della cache L1
2) minor banda necessaria
3) possibilità di poter estrarre dalla linea di cache L1 un maggior numero di istruzioni
4) nessuno spreco di spazio nel caso in cui sia necessario inserire un'istruzione NOP nel flusso del codice, a causa di particolari vincoli architetturali (mi riferisco, per fare un esempio chiarificatore, ai vincoli di architettore VLIW e EPIC, che non possono eseguire sempre e comunque "n" istruzioni a causa di problemi di dipendenza e debbono quindi inserire nella "macroistruzione" delle NOP)
5) minor dimensione dell'eseguile finale

Pensa ad un'istruzione "mov registro, registro", oppure una "inc/dec registro", ad esempio: sono le più frequenti, ma occupano pochissimo spazio (la prima un byte se viene coinvolto il registro accumulatore, 2 altrimenti, mentre le altre due sempre un byte).
Il risparmio di spazio è notevole. In un'architettura RISC devi sempre e comunque occupare esattamente lo stesso spazio, anche nel caso di istruzioni piccole come quelle (ma che sono anche le più frequenti, ripeto).
Io mi incasino già con quelle a lung. fissa ma ovviamente la (de)codifica delle istruzioni interessa a nessuno/pochissimi (chi deve fare simulazioni )

Esattamente. Comunque interessa anche i cultori delle architetture...
Tutto IMHO ed ovviamente basato sulla mia esperienza personale (credo approfondita ma sicuramente limitata)

Come del resto tutti, no?
cdimauro31 Dicembre 2003, 07:31 #72
Originariamente inviato da xtg
Infatti i 128 registri servono più che altro ai compilatori.

IMHO sono anche troppi, e possono anche essere fonte di problemi. Difatti l'accesso ai 128 registri sull'EPIC non avviene tanto velocemente quanto nelle altre architetture con un minor numero proprio per questo motivo, a cui si aggiunge anche il meccanismo di "rotazione"...
Un bravo programmatore se la può cavare con molto meno (non 16 registri però, possono bastare per una funzione ma non per una applicazione...)

Indubbiamente. Ma considera che la maggior parte del tempo che viene speso nella computazione di un'applicazione si ha nell'esecuzione di cicli, per cui alla fine è lì che devi sfruttare al meglio il numero di registri disponibile, e non mi pare che sia un'operazione difficile, anche per un compilatore, avere un tetto massimo di 16 registri...
Effetivamente non conosco bene l'assembly per epic, ma solo quello di altre piattaforme vliw (sempre di derivazione hp).

L'EPIC è comunque un VLIW, per cui l'esperienza che hai acquisito con questi ultimi puoi applicarla più o meno anche con questa "nuova" architettura.
xtg31 Dicembre 2003, 11:29 #73
Originariamente inviato da cdimauro
...
Quando? Intel dispone della miglior tecnologia nel campo dei compilatori, e ancora non è riuscita a sfruttare per bene la sua nuova architettura. C'è qualcosa che non quadra, non credi?

In effetti mi stupisce che non abbia un compilatore in grado di sfruttare al meglio l'epic.

Non solo, era un discorso generale. Esistono degli studi sugli algoritmi in cui si analizza il quantitativo di registri necessario per poter coprire interamente l'esecuziona di una routine. Buona parte richiedono fino a 8 registri, la stragrande maggioranza fino 16, e una piccolissima parte fino a 32 registri (l'implementazione del parser del linguaggio Perl, se non ricordo male), e si possono contare quelle che ne richiedono più di 32.

Per quel poco che ho capito, sevono soprattutto per algo crittografici, possibilmente eseguiti in real-time.

Compilatori realmente ottimizzati, nell'accezione accademica del termine, non ne esistono e non ne esisteranno mai. Il problema della generazione del codice ottimale a partire da un qualunque sorgente è dimostrato essere non computabile.
Diciamo che gli attuali compilatori fanno un buon lavoro...

Infatti intendevo che più di così non si può chiedere...

I vantaggi sono che si utilizza (quasi sempre) il minimo numero di bit (ma è meglio parlare di byte, alla fine) che sono necessari per rappresentare l'operazione che si vuole eseguire. Sono, quindi, notevoli in termini di spazio occupato, e le implicazioni pratiche sono le seguenti:
1) minor utilizzo della cache L1
2) minor banda necessaria
3) possibilità di poter estrarre dalla linea di cache L1 un maggior numero di istruzioni
4) nessuno spreco di spazio nel caso in cui sia necessario inserire un'istruzione NOP nel flusso del codice, a causa di particolari vincoli architetturali (mi riferisco, per fare un esempio chiarificatore, ai vincoli di architettore VLIW e EPIC, che non possono eseguire sempre e comunque "n" istruzioni a causa di problemi di dipendenza e debbono quindi inserire nella "macroistruzione" delle NOP)
5) minor dimensione dell'eseguile finale

Se partiamo dal presupposto che la decodifica abbia lo stesso "costo" posso essere d'accordo con te. Però secondo me le dimensioni del codice sono meno critiche rispetto ad una volta.
Per questo adesso vedo più interesse per le architetture vliw.
Inoltre considera che avere istruzioni a lung fissa ti permette di sapere in anticipo dov'è la prossima istruzione (a meno di salti, ovvio): questo è un grande vantaggio per architetture in grado di "macinare" molte istruzioni per ciclo (magari per i futuri processori multicore ).
xtg31 Dicembre 2003, 11:40 #74
Originariamente inviato da cdimauro
L'EPIC è comunque un VLIW, per cui l'esperienza che hai acquisito con questi ultimi puoi applicarla più o meno anche con questa "nuova" architettura.

Ho dato un'occhiata all'assembly epic: effettivamente non è molto comodo da scrivere rispetto al vliw che conosco .
Ma non è che l'assembly x86 l'ho capito in un giorno, anzi sicuramente non lo conosco tuttora bene...
cionci31 Dicembre 2003, 11:57 #75
In altre architetture la conoscenza dell'assembly era sicuramente utile per scrivere pezzi di codice ottimizzato... Con EPIC invece è praticamente impossibile superare l'efficienza del compilatore nello scrivere codice... Uno dei motivi principali, oltre alla difficoltà del codice stesso, è l'istruction level parallelism...
Sarebbe come mettersi a scrivere a mano codice SSE2 e poi confrontare il risultato con quello generato dal compilatore Intel

Intel stessa mi sembra che sconsigli l'uso di parti di codice in assembly...
xtg31 Dicembre 2003, 12:14 #76
Originariamente inviato da cionci
In altre architetture la conoscenza dell'assembly era sicuramente utile per scrivere pezzi di codice ottimizzato... Con EPIC invece è praticamente impossibile superare l'efficienza del compilatore nello scrivere codice... Uno dei motivi principali, oltre alla difficoltà del codice stesso, è l'istruction level parallelism...
Sarebbe come mettersi a scrivere a mano codice SSE2 e poi confrontare il risultato con quello generato dal compilatore Intel

boh, io scrivo "pezzi" di codice ilp meglio del compilatore (non intel, non epic, ma vliw), certo il loop unrolling glielo lascio fare a lui , ma in altri punti mi sembra un po' troppo "conservativo"...
certo un programma intero in assembly non lo scrivo neanche per x86

Intel stessa mi sembra che sconsigli l'uso di parti di codice in assembly...

Non c'è bisogno che lo sconsigli, si sconsiglia da solo...
cionci31 Dicembre 2003, 12:23 #77
Intendevo "pezzi" proprio nel senso che è raro scrivere un programma intero in assembly...in qualsiasi architettura...

Il discorso che facevo si riferiva interamente ad Epic...
xtg31 Dicembre 2003, 12:50 #78
Originariamente inviato da cionci
Intendevo "pezzi" proprio nel senso che è raro scrivere un programma intero in assembly...in qualsiasi architettura...

Il discorso che facevo si riferiva interamente ad Epic...

ops, mi era scappato il riferimento ai "pezzi" nel tuo post originario...
però perchè confidi così poco nelle capacità dei bravi programmatori?

ps: mi ero scusato per essere andato ot e ci sono ricascato!
cionci31 Dicembre 2003, 12:58 #79
Originariamente inviato da xtg
però perchè confidi così poco nelle capacità dei bravi programmatori?

Perchè da quello che ho visto ci sono decine di barbatrucchi in Epic per mantere un alto livello di istruction level parallelism... Mantente questo livello alto è l'unico modo per far sì che Itanium dia buone prestazioni...
ilmanu31 Dicembre 2003, 14:39 #80
se intel utilizzasse le stesse istruzioni introdotte da amd non si risolverebbero tutti i problemi?

Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".

La discussione è consultabile anche qui, sul forum.
^