View Single Post
Old 07-01-2010, 10:32   #1
blackshard
Senior Member
 
L'Avatar di blackshard
 
Iscritto dal: Jan 2002
Città: non ti interessa
Messaggi: 5399
Compilatore Intel e disparità di trattamento verso processori AMD/VIA

E' stato appurato da terze parti che il compilatore C/C++ x86 di Intel, uno dei compilatori spesso utilizzati per produrre codice molto ottimizzato, produce dei file binari eseguibili che non sempre sono ottimali per le nostre CPU.
Questo thread discute sul problema riguardante i software compilati con il compilatore Intel che non rispecchiano le reali prestazioni ottenibili con CPU di altro marchio (quindi AMD e VIA, attuali concorrenti nel settore delle cpu x86). Dagli studi che sono stati fatti, sembra che nel caso in cui venga rilevato un processore non prodotto da Intel, viene mandato in esecuzione il codice senza alcune ottimizzazioni, attivate invece quando viene riconosciuto il processore Intel. Essendo il compilatore Intel utile a produrre codice molto ottimizzato, il suo ambito di utilizzo prediletto riguarda casi in cui la potenza computazionale è molto sfruttata, ad esempio Videogiochi, programmi di benchmarking, alcuni tipi di driver, codec e generalmente applicazioni cpu-bound.

Molto recentemente è stata pubblicata questa notizia:

http://www.osnews.com/story/22683/In...from_Compiler_

che tiene in conto di tutte le problematiche ed i fatti avvenuti fino ad ora riguardo il compilatore Intel.

Dal punto di vista tecnico ci si è accorti che una componente posta nel binario compilato, il CPU Dispatcher, controlla la CPU nel sistema ed attiva il codice eseguibile più ottimizzato solo in presenza di CPU Intel, mentre attiva il codice eseguibile più lento disponibile nel caso vengano trovate CPU non-Intel (quindi attualmente vale per AMD e per VIA).

Il CPU Dispatcher, ad esempio, manda in esecuzione il codice ottimizzato utilizzando istruzioni SIMD SSE/SSE2/SSE3 solo se l'istruzione CPUID restituisce "GenuineIntel" associata ai processori Intel, mentre manda in esecuzione il codice "safe" (senza istruzioni SIMD) se non trova tale stringa.

Alcune voci fanno presente che Intel possa garantire il corretto funzionamento dell'eseguibile con istruzioni SIMD solo sui suoi processori, e quindi il CPU Dispatcher non attiva l'esecuzione del codice ottimizzato su processori non Intel per evitare problemi di compatibilità.
Altri però fanno notare che la stessa istruzione CPUID restituisce dei flag che indicano la presenza delle istruzioni SIMD SSE/SSE2/SSE3 indipendentemente dal produttore della CPU e del modello della CPU, e se il produttore della CPU possiede una implementazione fallace di tali istruzioni tale da provocare problemi di compatibilità, questo è un problema del produttore della CPU, non di Intel ne' del suo compilatore.

Alcuni riscontri indiretti di questo tipo sono esposti in diversi articoli. Un articolo su ars technica mostra come sia stato possibile incrementare il memory score del software di benchmarking PCMark2005 semplicemente modificando la stringa di riconoscimento di una CPU Nano VIA e facendola riconoscere come Intel:

http://arstechnica.com/hardware/revi...o-review.ars/6

In particolare la questione dei benchmark, come messo in evidenza da PCMark2005, è particolarmente critica perchè disturba la valutazione di un processore da parte di un software che dovrebbe fornire un riscontro oggettivo.

Inoltre moltri altri test e testimonianze sono raccolti nel blog di Agner Fog:

http://www.agner.org/optimize/blog/read.php?i=49&v=t

Un altro riscontro indiretto è dato dai test effettuati in ambito Linux utilizzando una suite di test completamente opensource e compilata utilizzando il compilatore opensource gcc.

http://www.phoronix.com/scan.php?pag...enom2_x3&num=4

Ed anche qui (con turbo mode disabilitato, a causa di sporadici problemi di prestazioni, come indicato nell'ultima pagina dei test):

http://www.phoronix.com/scan.php?pag...ynnfield&num=5

dove la superiorità dei processori Intel è maggiormente livellata.

Alcuni inoltre tendono a sottolineare che i test sono stati ripetuti con risultati molto più vantaggiosi per i processori intel:

http://www.phoronix.com/scan.php?pag...ield_add&num=1

Purtroppo però i test pubblicati nell'ultimo link sono stati ripetuti internamente da Intel e solo pubblicati da Phoronix. Quindi mancano di un riscontro di oggettività, non essendo stati prodotti da un ente indipendente.

Perchè AMD/VIA dovrebbero chiedere un trattamento equo sebbene sia Intel a produrre il proprio compilatore e a spenderci risorse?
Il problema non è tanto di AMD/VIA, quanto piuttosto delle software house che utilizzano il compilatore Intel, che viene fornito anche in modo gratuito. Le software house stesse potrebbero anche non essere a conoscenza di questo tipo di ottimizzazioni selettive.

La Federal Trade Commision (vedi: primo link in alto) ha comunque definito il compilatore Intel come "difettoso" ed ha obbligato la correzione del comportamento succitato al fine di garantire un comportamento più equo:

Quote:
Originariamente inviato da FTC
Requiring that, with respect to those Intel customers that purchased from Intel a software compiler that had or has the design or effect of impairing the actual or apparent performance of microprocessors not manufactured by Intel ("Defective Compiler"), as described in the Complaint:

1. Intel provide them, at no additional charge, a substitute compiler that is not a Defective Compiler;
2. Intel compensate them for the cost of recompiling the software they had compiled on the Defective Compiler and of substituting, and distributing to their own customers, the recompiled software for software compiled on a Defective Compiler; and
3. Intel give public notice and warning, in a manner likely to be communicated to persons that have purchased software compiled on Defective Compilers purchased from Intel, of the possible need to replace that software.
In caso di omissioni od inesattezze, fate presente la cosa in modo da permetterne la correzione.

AGGIORNAMENTO DEL 16 GENNAIO 2010

Lo stesso sito che ha fornito dei test su una piattaforma neutra (Phoronix) afferma di aver ordinato un core i3 per effettuare dei test sotto Linux. La news originale si trova qui:
http://www.phoronix.com/scan.php?pag...item&px=Nzg4NA

Nella news viene affermato che Intel non ha fornito alla testata un processore i3/i5 al lancio, come invece aveva fatto nell'altra occasione con il processore i7, per cui la testata Phoronix ha dovuto necessariamente ordinare ed acquistare un processore per conto proprio per poter condurre dei test. A breve dovrebbero essere forniti dei benchmark che descrivono le performance dei processori i3 in ambito Linux con un compilatore neutro.

AGGIORNAMENTO DEL 30 GENNAIO 2010

Phoronix ha pubblicato la recensione sul core i3 530 a 2.93 ghz:

http://www.phoronix.com/scan.php?pag...rei3_530&num=1

Il confronto è con un phenom II x3 a 2.6 ghz e un Intel Core 2 Duo E8400 a 3.0 Ghz
Per il mio modesto parere, l'articolo è di difficile lettura perchè sono stati mischiati processori con 2 e 3 core fisici con uno con 2 core fisici e 4 logici. Inoltre la differenza di frequenza fra il Phenom e gli altri due processori Intel introduce un'altra variabile di cui tenere conto. Infine non sono stati indicati quali sono i test single threaded e quali i test che fanno uso di più thread, quindi non è facile comprendere quale è l'impatto (sia in positivo che in negativo) dell'Hyperthreading.

Ciò che appare evidente è che il phenom II X3 710 in alcune occasioni è di un bel po' dietro, solitamente è appaiato, poco dietro o poco avanti, e in alcune altre occasioni (ad esempio alcuni test su crittografia) è anche molto avanti. Da quanto detto, deduco che la recensione non è molto utile ai nostri scopi (cioè comprendere quale sia l'impatto del compilatore) perchè non è chiaro quando entra in gioco il terzo core del Phenom e quando invece la frequenza operativa è discriminante.

AGGIORNAMENTO DEL 15 FEBBRAIO 2010

Ho raccolto alcune notizie e blog che mostrano l'effettivo impatto prestazionale su alcuni carichi di lavoro.

Nel post che segue (datato 16-01-2007) viene mostrato come il patching dell'eseguibile permetta di ridurre il tempo di calcolo da 31 secondi a 27 secondi, con un incremento delle prestazioni del 15%. L'autore del post afferma che applicando la patch all'eseguibile, i tempi diventano proporzionalmente paragonabili con un core 2 duo a 3 ghz rispetto al suo athlon 4400+
http://terapix.iap.fr/forum/showthread.php?tid=134

In questo blog (datato 2005!) viene mostrato come l'applicazione della patch al compilatore Fortran per rimuovere il controllo sul processore Intel porti anche in questo caso vantaggi quantificabili all'incirca del 10%.
E' da notare il fatto che, utilizzando i flag -axW durante la compilazione vengono completamente disattivate le SSE/SSE2 per i processori non intel, ma queste rimangono attive sui processori intel, infatti il processore Opteron 248 preso in considerazione passa da 54,4 secondi a ben 123,4 secondi per completare il test "Simplex", risultando addirittura più lento del Pentium 4 1.7 Ghz preso come confronto!
La versione invece ottimizzata e opportunamente "patchata" per saltare il controllo migliora il tempo di esecuzione dai suddetti 54,4 secondi ai 49,1 secondi.
http://www.swallowtail.org/naughty-intel.shtml

Altri articoli dell'epoca che mostrano come questa questione fosse già ampiamente conosciuta e dibattuta sui siti del settore:

http://www.betanews.com/article/Suit...AMD/1121274628
http://techreport.com/discussions/8547

AGGIORNAMENTO DEL 24 MARZO 2010

|Pheonix| ha trovato un piccolo software che permette di analizzare un'insieme di file alla ricerca di controlli sul processore.
Verosimilmente esso cerca la presenza del CPU dispatcher del compilatore Intel all'interno dei compilati e lo modifica in modo da far riconoscere tutte le CPU come Intel. Attualmente il software è sotto analisi da parte degli utenti che seguono il thread, a breve saranno pubblicate notizie al riguardo.

E' possibile scaricare il software qui:

http://www.softpedia.com/get/Program...-Patcher.shtml

AGGIORNAMENTO DEL 23 APRILE 2010:

L'utente slemmer87 ha ottenuto dei significativi guadagni prestazionali applicando effettuando il patching dell'eseguibile tramite il programma indicato nell'aggiornamento precedente.
Altri dettagli e screenshot sono disponibili qui

AGGIORNAMENTO DEL 22 GIUGNO 2010

Intel pronta a sborsare milioni all'Antitrust USA. Clicca qui per andare al post #339 con ulteriori dettagli

AGGIORNAMENTO DEL 5 AGOSTO 2010

L'FTC ha emesso un accordo nel quale specifiche i termini della condotta sleale di Intel e impone a quest'ultima alcune importanti restrizioni riguardo il compilatore, e in materia di concorrenza.

La notizia è qui:

http://www.businessmagazine.it/news/...rdo_33449.html

oppure qui:

http://www.hwupgrade.it/forum/showth...6#post32773566

AGGIORNAMENTO DEL 01/11/2010

Anche se non è direttamente correlato con l'argomento del thread, riporto che Negative_Creep a questo post segnala che è divenuto presente, in una nota catena di merceologia elettronica presente in italia, il primo prodotto AMD. Questa notizia può essere intesa come una conferma della validità delle sanzioni imposte ad Intel dalla UE ed una possibile conferma delle pratiche di abuso di posizione dominante perpetrate di Intel.

AGGIORNAMENTO DEL 24/04/2011

digieffe mette in risalto i risultati SPECint e SPECfp ottenuti aggiornando il compilatore intel dalla versione 11.1 alla 12.0.
I risultati, a parità di configurazione hardware, mostrano un incremento del 18% delle performance sugli interi e del 14% delle performance sui floating point. Ciò può essere (ma non è detto che lo sia) legato alle condanne ricevute da intel e all'obbligo di rendere neutrale il suo compilatore.

Maggiori info qui: http://www.hwupgrade.it/forum/showpo...&postcount=436
__________________
[url="http://www.hwupgrade.it/forum/showthread.php?t=2119003"]- Compilatore Intel e disparità di trattamento verso processori AMD/VIA

Ultima modifica di blackshard : 25-04-2011 alle 14:12.
blackshard è offline   Rispondi citando il messaggio o parte di esso