|
|
|
![]() |
|
Strumenti |
![]() |
#21 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Non deve meravigliare. Intel all'epoca commise una quantita' colossale di errori, tanto che si arriva ad una vera e propria crisi all'epoca dei Pentium 4. L'adozione di AMD64 e un ritorno a P6 ( cestinando Netburst ) gli salvarono il collo. Era l'epoca in cui AMD faceva furore e i Pentium erano usati dai pizzaioli come forni.
|
![]() |
![]() |
![]() |
#22 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
E sappiamo bene che Intel avrebbe potuto (negli anni 2000) vendere in perdita Itanium senza troppi problemi. Tra l'altro Itanium credo sia morto nel 2012, non mi pare abbiano fatto uscire più niente di nuovo da allora. |
|
![]() |
![]() |
![]() |
#23 |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Quindi in sostanza per la migrazione alle architetture a 64 bit Intel non ha mosso un dito per anni salvo poi svegliarsi a seguito del successo di AMD?
![]() |
![]() |
![]() |
![]() |
#24 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
![]() |
![]() |
![]() |
#25 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Se avessero voluto farlo non avrebbero venduto la sola CPU a 9000$. I piani per Itanium erano quelli di aggredire il mercato di Power, Spark, Alpha. E l'acquisto di Alpha e successiva repentina dismissione serviva proprio a favorire il progetto Itanium. Negli anni 90 le architetture a 64 bit servivano in ambito grossi mainframe o workstation e X86 non era certamente ben vista. |
|
![]() |
![]() |
![]() |
#26 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
During development, Intel, HP, and industry analysts predicted that IA-64 would dominate in servers, workstations, and high-end desktops, and eventually supplant RISC and Complex Instruction Set Computing (CISC) architectures for all general-purpose applications.[7][8] Compaq and Silicon Graphics decided to abandon further development of the Alpha and MIPS architectures respectively in favor of migrating to IA-64.[9] C'era molto fermento per Itanium in quegli anni sembrava che dovesse spaccare il mondo! Di fatto il risultato fu che la versione consumer di Windows XP a 64 Bit uscì con enorme ritardo perché Microsoft aspettò per anni la versione "desktop" di Itanium che non arrivò mai... Se avessero fatto un miglior emulatore di x86 IMHO oggi avremmo tutti degli Itanium, ma invece... abbiamo AMD64 ![]()
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 11-09-2016 alle 13:20. |
|
![]() |
![]() |
![]() |
#27 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
![]() Non credo sarebbe stata un'architettura adatta a portatili o dispositivi a basso consumo. Già PowerPC, derivata da Power, ha perso contro X86 proprio per problemi di efficienza energetica. E se c'è un'architettura che potrà scalzare X86 è proprio ARM che è più efficiente, non necessariamente più potente. Mi pare inoltre che un'architettura come quella di Itanium sia più adatta a linguaggi che oggi nessuno vuole più usare e che fanno uso pesante del compilatore (qualcuno ha detto C/C++? ![]() |
|
![]() |
![]() |
![]() |
#28 |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Il fatto che i suddetti linguaggi "facciano tutto (o molto) a runtime", che intendo come l'assenza di type system, non e' affatto una cosa positiva o desiderabile, per qualunque linguaggio. Prendi JavaScript ad esempio, diventa molto piu' sicuro se usato con flow, dove per "sicuro" intendo dire il contrario di "error-prone". Il motore JavaScript poi in realta' continuera' a fare type checking a runtime indipendentemente dall'uso di flow, ma non e' al corrente che se lo sviluppatore ha usato flow certi errori non possono in alcun modo verificarsi. Se JavaScript avesse un type system statico, sarebbe un linguaggio piu' efficiente.
Se invece parliamo della gestione automatica della memoria e della garbage collection e' tutto un altro discorso. |
![]() |
![]() |
![]() |
#29 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
In ogni caso con tecniche di register rename questo limite viene molto mitigato nelle moderne microarchitetture. Quote:
La prima è riferita all'ABI, e su x86 si usa GENERALMENTE (ma ognuno può definire la sua ABI) lo stack per passare parametri a una routine. Ma puoi benissimo definire un'ABI che preveda il passaggio di dati su alcuni registri, finché non si esauriscono, e gli altri sullo stack. La seconda cosa di cui parli riguarda, invece, il fatto che x86, da buon CISC, consente di eseguire operazioni che accedono direttamente alla memoria, mentre per i RISC ciò avviene esclusivamente facendo uso di operazioni di LOAD/STORE. Quote:
Per cui è un limite, sicuramente, ma non rappresenta un collo di bottiglia per una moderna architettura, grazie anche all'esecuzione out-of-order che consente di schedulare e gestire meglio questi limiti. 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 |
||||||
![]() |
![]() |
![]() |
#30 | |||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
![]() Quote:
A parte questo, 8086 si portava già dietro (ed era necessaria, per esigenze di mercato) la parziale compatibilità con l'8085 (solo assembly, comunque) che aveva avuto un discreto successo commerciale, per facilitare enormemente il porting delle applicazioni esistenti (all'epoca c'era un traduttore da 8085 a 8086, che AL PIU' richiedeva qualche piccola modifica all'output). Per cui, sì, non è certamente l'architettura più bella mondo, ma cerchiamo anche di contestualizzare. Oggi è facile parlare di architetture più "belle", ma col senno di poi mi pare ovvio che si possa fare molto meglio. Quote:
Il tutto senza considerare, poi, che il codice generato era decisamente, scarsamente denso, e dunque occupando parecchio spazio -> maggior pressione sulle cache -> maggior pressione sulla memoria. Da cui, penso, l'adozione di generosissime cache per questa famiglia di processori. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Detto in altri termini, il vantaggio dei RISC richiedere pochi transistor per svolgere certe operazioni è diventato assolutamente trascurabile già quando era possibile impacchettare qualche milionata di transistor in un chip. Tant'è che è a partire dall'80486 (e col 68040 della Motorola), che i CISC cominciarono a essere competitivi coi RISC più blasonati, rubandogli persino mercato in ambito server e workstation.
__________________
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 |
|||||||||||||
![]() |
![]() |
![]() |
#31 | ||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Quote:
Quote:
![]() Una CPU Intel moderna esegue l'80% delle istruzioni che sono già decodificate, grazie a una speciale cache per le cosiddette uop. Questo contribuisce enormemente all'abbattimento dei consumi, nonché alle prestazioni (è come se avesse una pipeline molto corta. Anche molto più corta di un RISC). Quote:
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 |
||||||||
![]() |
![]() |
![]() |
#32 | ||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
Quote:
Quote:
Ti sei mai chiesto come venga implementato il meccanismo di Thread-Local-Storage (TLS) su x86 & x64? O come si possa accedere direttamente a (certa) memoria del kernel? ![]() Quote:
![]() Quote:
Un paio di esempi: spostamento e riempimento della memoria oggi sono più veloci se realizzate usando le ultravecchissime (nate con 8086 per l'appunto) istruzioni di "stringa". 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 |
||||||||
![]() |
![]() |
![]() |
#33 | |||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
![]() Quote:
Intel aveva già la sua architettura a 64 bit, ed era Itanium, per l'appunto. Quote:
Quote:
Quote:
D'altra parte mi pare che, invece, in ambito tablet / 2:1 le cose vadano decisamente meglio. Qui non hai nulla da dire, immagino... Quote:
Quote:
Per era naturale pensare a un successore a 64 bit. Ma per Intel questo era Itanium, 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 Ultima modifica di cdimauro : 02-10-2016 alle 13:16. |
|||||||||
![]() |
![]() |
![]() |
#34 | |||||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
In modalità 32 bit di fatto si è obbligati a passare gli argomenti usando lo stack qualche calling convention più "evoluta" usa almeno un registro per il valore di ritorno... su Linux credo si usi sempre e solo lo stack. Anche su Cosmos a essere obbiettivi, ma lì è perché - per ora - stiamo seguendo alla lettera le specifiche ECMA e .NET come JVM è una "stack based Virtual Machine" quindi... Quote:
Quote:
E` il momento di mettersi al tavolino e ridisegnare tutto dall'inizio cosa che Intel ha pure fatto con Itanium quindi non è affatto da biasimare sia chiaro... peccato che il mercato voleva solo un x86 che potesse indirizzare > 4 GB di RAM ![]() Quote:
![]() Quote:
![]() Anche l'aumento di velocità pura si è fermato sembra impossibile avere CPU a più di 3 GHz e beh 4 CPU (di 2 magari virtuali con hiperthreading) a 1.6 GHz non saranno mai lo stesso che avere una CPU a 6.4 GHz... Boh cosa dobbiamo sperare per avere qualcosa di davvero nuovo? CPU non binarie? CPU quantistiche? CPU positroniche? Pare che l'importante in tutti i casi sarà avere un emulatore funzionante di x86 ![]() (Che bello un robot "Asimoniano" con emulatore di x86 incorporato mai gli dovesse servire far girare il DOS ![]() Vero così hai ben 7 registri ![]()
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
|||||
![]() |
![]() |
![]() |
#35 | |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#36 | ||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quando ha introdotto x86-64 AMD dichiarò che avevano fatto delle simulazioni con l'ISA estesa a 32 registri, ma i benefici ottenuti non erano sufficienti per la complessità che ciò comportava. Considera che x86-64 ebbe, all'epoca, un costo di appena il 5% di transistor: una miseria, rispetto ai benefici che ha apportato.
Concordo con te che avrebbe potuto farlo ugualmente, e IMO non sarebbe stato nemmeno complicato, perché un cambiamento del genere avrebbe richiesto la presenza di un prefisso costante di un byte per ogni istruzione. Quindi molto più semplice rispetto all'attuale implementazione, che ha richiesto la ridefinizione di un blocco di 16 vecchie istruzioni IA-32/x86. Questo perché, per poter gestire 32 registri in tutti i casi, sarebbero stati necessari altri 4 bit rispetto ai 4 di estensione presenti col nuovo prefisso REX ($40-4F). Per contro, questo avrebbe allungato SEMPRE di un byte tutte le istruzioni, facendo diminuire nettamente la densità del codice, che già adesso per x86-64 è abbastanza più elevata rispetto a x86 (circa 4.3 byte contro 3.6, se non ricordo male). Con tutte le conseguenze che ciò comporta nella gerarchia di memoria. Dunque, IMO sarebbe stato più semplice avere un byte in più fisso, perché non sarebbe stato un prefisso ma parte integrante degli opcode, rispetto alla soluzione attuale del REX. Ma a prezzo di una densità più scarsa. La soluzione migliore sarebbe stata quella che ha seguito ARM con la sua ISA a 64 bit: riscrivere completamente l'ISA con annessa opcode table nuova di zecca. E annesso nuovo decoder. Ma ARM quanti ANNI ha impiegato per progettare ARMv8/ARM64? Parecchi. Ed è un lusso che AMD non s'è potuta permettere, con Itanium alle calcagna e lei completamente fuori dal mercato (Intel NON le concesse la licenza per Itanium). Quote:
Quote:
Quote:
Quote:
Quote:
![]() Quote:
![]() Quote:
![]() Quote:
Quote:
![]() Quote:
![]() 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 |
||||||||||||
![]() |
![]() |
![]() |
#37 | ||||||||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
![]() Quote:
Quote:
Quote:
https://en.wikipedia.org/wiki/X86_ca...ng_conventions Quote:
Comunque mi hanno detto che hanno idee rivoluzionarie sulla "calling convention" e che da alcuni test preliminari fatti anni fa si otteneva un discreto performance boost vediamo quando inizieremo ad usarle... per ora non hanno voluto dire di più! Quote:
![]() Gli ARM ovviamente partono a 32 / 64 bit quale che sia la modalità nativa del processore... Quote:
![]() Quote:
![]() Inimmaginabile quanti passaggi un povero hello world in C faccia prima che la CPU possa davvero eseguirlo ![]() Guarda fosse per me userei CSC (C Sharp Compiler) altro che... beh il codice dovrei prima scriverlo in C# ovviamente se no s'inc*zza ![]() Purtroppo il C in azienda è un dogma, alcuni "giovani" ribelli hanno iniziato ad usare un nuovo linguaggio chiamato... C++, ma i "vecchi" storcono il naso pensando a ste "sciocchezze" chiamate oggetti ![]() La tua CPU ce l'ha un emulatore x86 funzionante ![]() Isaac Asimov si starà rivoltando nella tomba!
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
||||||||
![]() |
![]() |
![]() |
#38 | ||||||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Per introdurre il prefisso REX hanno dovuto togliere di mezzo gli opcode per le PUSH e POP di registri, che sono istruzioni molto usate (specialmente per x86), perché serviva un blocco contiguo di 16 opcode liberi ($40-4F, per l'appunto). Comunque queste erano le codifiche "veloci/compatte": PUSH e POP di registri sono rimaste, ma codificate con la versione più generale (ma che occupa un byte in più) che referenzia un operando generico (che può essere memoria o, per l'appunto, registro). Quote:
![]() La densità, invece, è molto importante, ed è il motivo per cui tanti RISC hanno dovuto "calare le corna", e fornire ISA "compatte", facendo uso di opcode a lunghezza variabile, e dunque facendole divenire di fatto CISC. Esempi eloquenti: ARM Thumb/-2, MIPS16, AVR, CRISP-32, e qualcun altro che non mi sovviene adesso. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
![]() Quote:
![]() Quote:
Quote:
Quote:
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 |
||||||||||||||
![]() |
![]() |
![]() |
#39 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12843
|
Scrivete troppo
![]() @fano: siamo arrivati ad avere registri AVX da 512 bit... vedi un po' ![]() La vettorizzazione è molto ben supportata da GCC, ed è attivata di default se passi -O3 oppure a livello -O2 con -ftree-vectorize (vado a memoria potrebbe essere leggermente diversa la dicitura). Prova a compilare un piccolo codice che faccia il reverse di un buffer "naive" con e senza vettorizzazione su una CPU sufficientemente moderna (ad es. Haswell) e vedi che codice ti tira fuori, ne rimarrai sorpreso ![]() Ci sono alcuni casi poi in cui il programmatore deve dare una mano a GCC (ad esempio con l'allineamento dei dati). Come compila di default dipende da chi fornisce il compilatore e quali flag di default ha scelto. Per altro se usi una versione di gcc a 64 bit al 99% il target è x64, quindi non 486. Ma comunque anche se compilasse di default per 486, questo lascia il tempo che trova perché la maggior parte di programmi e librerie serie che richiedono un certo livello di performance passano i loro flag custom a GCC. Non solo, in alcuni casi si fa un benchmark a runtime e scelgono l'implementazione più veloce su quella macchina (questo viene fatto anche dal kernel Linux al boot per scegliere ad esempio quale algoritmo di checksum software RAID usare), perché non è sempre detto che la vettorizzazione ti dia maggiori performance. Se passi -O3 -march=native vengono attivate la maggior parte delle ottimizzazioni e vengono sfruttate tutte le caratteristiche della CPU come ad esempio SSEx e AVX (se supportate ovviamente). Ultima modifica di WarDuck : 16-10-2016 alle 13:07. |
![]() |
![]() |
![]() |
#40 | |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
Per il resto concordo, quello che fa GCC di default è ininfluente, visto che poi chiunque usa flag custom. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:00.