Newsgroup: it.comp.lang.c++
Titolo: efficacia compilatori

Ultimamente mi sto facendo delle domande sulla efficienza di un 
programma compilato con il gcc rispetto uno compilato con il msvc.
In azienda abbiamo il programma base che sotto linux va discretamente 
più piano della versione windows, e non riesco a capirne il motivo.
Sono tentato di provare a convincere il capo a provare a compilare il 
baraccone con il compilatore Intel sia sotto Linux che sotto Windows per 
vedere se è il compilatore che fa la differenza. E questo anche se so 
già adesso che ci vuole almeno una settimana per ricompilare tutti i 
progetti dipendenti per arrivare al programma finale.
Le domande sono due. Qualcuno ha mai avuto una sensazione del genere? Io 
ammetto di essere molto dubbioso sulla possibilità che il gcc ottimizzi 
molto peggio del msvc. Anzi, mi sembra impossibile.
La seconda, se vi chiedo di compilatori C/C++ che funzionano sotto linux 
e windows, a voi che viene in mente?
A me viene in mente solo gcc/mingw e quello Intel (che mi pare 
costicchiasse abbastanza, ma che fosse molto ottimizzante).
Altri nomi?

 molto peggio del msvc. Anzi, mi sembra impossibile.
Ho dei dubbi anch'io.
Sto lavorando ed ho lavorato su diversi progetti che utilizzavano gcc su 
FreeBSD e VC su Windows: di solito e' piu' lento il secondo (specie 
nelle versioni piu' vecchie), ma, tutte le volte che ricordo di aver 
avuto questo problema, si e' sempre rivelato non essere colpa del 
compilatore.
Es: iteratori di default in debug su uno e non controllati sull'altro, 
I/O che su Windows e' meno efficiente, librerie esterne che avevano 
qualche bug, ecc...
Hai provato a fare del profiling?
  bye
	av.

 più piano della versione windows, e non riesco a capirne il motivo.
Boh! in base alla mia esperienza, quando un programma
multipiattaforma gira in tempi molto diversi , quasi mai
e' colpa del compilatore, a meno che passando da un
ambiente all' altro si usino setting diversi (debug/ optimize)
che pero' sono le prime cose da controllare.
Bisognerebbe fare un po' di profiling per sapere
dove il programma perde tempo... magari scopri che
e' causa a chiamate di componenti esterni :-)
aa.

 programma compilato con il gcc rispetto uno compilato con il msvc...
Anni fa avevo notato differenze tra un programma win32 compilato con gcc 
  e Borland (entrambi con i tutti i flag d'ottimizzazioni attivati) a 
netto favore di quest'ultimo. Il gcc pur ottimizzato per P4, SSE2 e via 
discorrendo non era nemmeno comparabile con le prestazioni del Borland 
che poerò si fermava soltanto a 686 + MMX. Non avevo provato con il MSVC 
ma penso che la questione si sarebbe risolta più o meno allo stesso modo 
(a sfavore del gcc). Però ti parlo del gcc 2.95 credo, probabilmente ora 
è molto migliorato.
Quello di Intel non l'ho mai provato, purtroppo, ma in tanti lo 
raccomandano.

 Hai provato a fare del profiling?
Impraticabile. Ci vorrebbe troppo tempo, e troppe persone. E' un 
progetto "grosso" che gira su più computer.
Comunque credo che le aree che destano sospetti per ora sono tre.
La più probabile è che per motivi a me oscuri gestisca meglio la 
comunicazione socket sotto windows invece che sotto linux. Quella 
sarebbe mia ignoranza, si può risolvere. Però non sarà facile trovare la 
pistola fumante.
La seconda è che il parser di Boost, se compilato sotto linux, diventi 
lento. Da indagare. Mi sembra comunque che ad ogni nuova versione di 
boost diventi sempre più lento. Ma è un'impressione.
La terza che sia un problema del compilatore, ma per altri motivi 
tendere ad escluderla 99.99 %. Un ombra di dubbio però rimane.

 progetto "grosso" che gira su più computer.
Da un test sul peso dell'infrastruttura non riesco a trovare
differenza apprezzabili tra Linux e Windows. Questo sembra sgombrare
l'ipotesi che non sappia usare i socket sotto Linux, e che il
compilatore gcc ottimizzi in modo apprezzabilmente peggiore del msvc.
Rimango perplesso su Linux a 64 bit, sopratutto se confrontato con
Windows 7 a 64 bit, ma è altra questione.
A questo punto il maggior indiziato ai "miei" problemi di prestazione
tra Windows e Linux sono le Boost.
Se interessa faccio sapere.

 Se interessa faccio sapere.
Sě, interessa :-)