View Full Version : [C++ vs C#] Performance Analysis
Ciao,
il mio collega ha fatto una breve performance analysis C++ vs C# usando Visual Studio 2008 Professional. Abbiamo visualizzato l'output su console e lanciato l'applicazione in "Debug" mode (la Release ottimizza il "bytecode" e quindi le performance.
Abbiamo implementato una complessa funzione matematica in entrambi i linguaggi e i risultati sono:
- 1.1 secondo come tempo di risoluzione usando C++
- 1.9 usando C#
Non posso "postare" il codice ma se qualcuno di voi avesse fatto simili analisi (specialmente con "pesanti" funzioni matematiche vi sarei grato se poteste contribuire..
vi ringrazio!
zakmckraken
24-03-2010, 12:33
Ciao! Utile sicuramente, ma perche non in release (l'avrei fatto in release proprio perche'il codice e'ottimizzato!!)? (by curioso..)
Ciao! Utile sicuramente, ma perche non in release (l'avrei fatto in release proprio perche'il codice e'ottimizzato!!)? (by curioso..)
...il motivo e' perche' la release mode non "supporta" la debug shell, solamente una questione di pigrizia e tempo per il momento.. comunque in giornata implementiamo una seconda versione in modo da poter testare in release.. ;-)
Qui trovi un po' di comparazioni c++/c# su linux
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=csharp&lang2=gpp
C'è il codice sorgente, potete provare ad eseguire gli stessi programmi sulla vostra piattaforma e vedere.
cdimauro
24-03-2010, 16:54
Anche perché non credo che compilatore e JIT di Mono possano produrre risultati migliori di quelli di VS e .NET/MS. ;)
Ma infondo che ne sappiamo? La storia recente ci insegna che certi compilatori sanno fare magie! Chi ha detto intel?
||ElChE||88
24-03-2010, 17:18
Anche perché non credo che compilatore e JIT di Mono possano produrre risultati migliori di quelli di VS e .NET/MS. ;)
Ho provato uno di quei benchmark (fannkuch (http://shootout.alioth.debian.org/u32q/program.php?test=fannkuch&lang=csharp&id=2)) sulla mia macchina dual boot.
Su Windows ci mette la metà del tempo. :fagiano:
Diciamocelo: da un benchmark che si chiama fancul' non ci si poteva aspettare di meno! :D
Il mio collega ha fatto una breve performance analysis C++ vs C# usando Visual Studio 2008 Professional. Abbiamo visualizzato l'output su console e lanciato l'applicazione in "Debug" mode (la Release ottimizza il "bytecode" e quindi le performance.
Devi lanciare in release entrambi. Altrimenti ha poco senso fare il confronto. La differenza può essere anche abissale.
Ciao,
il mio collega ha fatto una breve performance analysis C++ vs C# usando Visual Studio 2008 Professional. Abbiamo visualizzato l'output su console e lanciato l'applicazione in "Debug" mode (la Release ottimizza il "bytecode" e quindi le performance.
Abbiamo implementato una complessa funzione matematica in entrambi i linguaggi e i risultati sono:
- 1.1 secondo come tempo di risoluzione usando C++
- 1.9 usando C#
Non posso "postare" il codice ma se qualcuno di voi avesse fatto simili analisi (specialmente con "pesanti" funzioni matematiche vi sarei grato se poteste contribuire..
vi ringrazio!
In particolar modo quando si usa tanta matematica, ci puo' essere una differenza abissale tra le performace in modalita' di Debug e quella Release; in particolare a seconda delle librerie usate possono venire eliminati un sacco di controlli in loop stretti che cambiano radicalmente le carte in tavola. Sarebbe il caso di riprovare in modalita' Release.
Devi lanciare in release entrambi. Altrimenti ha poco senso fare il confronto. La differenza può essere anche abissale.
Appunto, evidentemente abbiamo postato io in modalita' Debug e tu in Release :asd:.
tomminno
24-03-2010, 19:40
Per la mia esperienza personale C++ in Debug ha prestazioni pessime, mentre C# ha prestazioni quasi equivalenti alla modalità release (test effettuati con VS2008 SP1). Quasi sempre il C++ in queste condizioni risulta più lento.
In modalità release l'unico caso di equivalenza delle prestazioni tra C# e C++ che ho riscontrato è nell'accesso a SqlServer (Orm C++ basato su ODBC vs ADO.NET). E si che ODBC dovrebbe essere una lumaca in confronto al TDS usato da .NET.
In tutti gli altri casi stravince C++.
In particolar modo per quanto riguarda l'occupazione di memoria.
||ElChE||88
24-03-2010, 20:33
Per la mia esperienza personale C++ in Debug ha prestazioni pessime, mentre C# ha prestazioni quasi equivalenti alla modalità release (test effettuati con VS2008 SP1).
Ho provato col benchmark di cui parlavo prima.
L'eseguibile compilato in modalità debug ci sta ~40 secondi, quello compilato in modalità release ce ne sta ~15.
Prestazioni "quasi" equivalenti. :asd: :asd:
(non è proprio indicativo, ma dimostra che dipende molto dal programma)
cdimauro
25-03-2010, 08:30
Ma infondo che ne sappiamo? La storia recente ci insegna che certi compilatori sanno fare magie! Chi ha detto intel?
Sì, ma dipende da chi li fa i compilatori, appunto. :D
Per C/C++ i migliori sono quelli di Intel, come giustamente hai riportato. A seguire quelli di Microsoft, e poi GNU & compagnia.
Ho provato uno di quei benchmark (fannkuch (http://shootout.alioth.debian.org/u32q/program.php?test=fannkuch&lang=csharp&id=2)) sulla mia macchina dual boot.
Su Windows ci mette la metà del tempo. :fagiano:
Ecco, appunto. :D
Diciamocelo: da un benchmark che si chiama fancul' non ci si poteva aspettare di meno! :D
:rotfl: E da te una battuta del genere. :p
Per la mia esperienza personale C++ in Debug ha prestazioni pessime, mentre C# ha prestazioni quasi equivalenti alla modalità release (test effettuati con VS2008 SP1). Quasi sempre il C++ in queste condizioni risulta più lento.
Immagino che la vm del .net effettui comunque un certo numero di ottimizzazioni anche sul bytecode di debug, mentre il compilatore c++ del visual studio non ne faccia alcuna (alcuni compilatori permettono invece di farlo), questo spiegherebbe la differenza di performance in fase di debug.
Se effettivamente poi il codice C# ottimizzato non e' molto piu' performante, direi che o il compilatore C# fa un cattivo lavoro, oppure le performance sono molto legate a librerie che usi.
tomminno
25-03-2010, 10:30
Immagino che la vm del .net effettui comunque un certo numero di ottimizzazioni anche sul bytecode di debug, mentre il compilatore c++ del visual studio non ne faccia alcuna (alcuni compilatori permettono invece di farlo), questo spiegherebbe la differenza di performance in fase di debug.
Anche con Visual Studio in C++ si possono abilitare le ottimizzazioni in Debug ma non è che abbia molto senso, esiste la versione Release apposta.
Se effettivamente poi il codice C# ottimizzato non e' molto piu' performante, direi che o il compilatore C# fa un cattivo lavoro, oppure le performance sono molto legate a librerie che usi.
Ad esempio se la console fa un output molto intenso in C# il tempo per stampare a video il testo non cambia tra debug e release, in C++ invece mi risulta un aumento di prestazioni ragguardevole. Idem per la scrittura su file.
Anche con Visual Studio in C++ si possono abilitare le ottimizzazioni in Debug ma non è che abbia molto senso, esiste la versione Release apposta.
Ma nella versione release non puoi fare debug :D. A volte e' necessario una versione del programma su cui poter fare debug ad una velocita' decorosa, pure al costo di perdere per strada qualche funzione che e' stata resa inline, o avere i riferimenti di linea non precisi.
Ad esempio l'applicazione su cui sto lavorando gira a 5 Hz in modalita' di debug, e a circa 2KHz con tutte le ottimizzazioni abilitate; la differenza e' troppa per poter essere utile (tanto che lavoriamo piu' con test e analisi dei log, ma questo e' un altro discorso).
In particolar modo quando si usa tanta matematica, ci puo' essere una differenza abissale tra le performace in modalita' di Debug e quella Release; in particolare a seconda delle librerie usate possono venire eliminati un sacco di controlli in loop stretti che cambiano radicalmente le carte in tavola. Sarebbe il caso di riprovare in modalita' Release.
Abbiamo provato in modalita' release e la differenza e' ancora abissale..
C# runna 10 volte piu' lento di C++...
banryu79
25-03-2010, 15:16
Ma infondo che ne sappiamo? La storia recente ci insegna che certi compilatori sanno fare magie! Chi ha detto intel?
Sì, ma dipende da chi li fa i compilatori, appunto. :D
Per C/C++ i migliori sono quelli di Intel, come giustamente hai riportato. A seguire quelli di Microsoft, e poi GNU & compagnia.
Sospetto fortemente che, con il termine "magie", PGI stesse facendo dell'ironia, riferendosi indirettamente a questa chicca (http://www.hwupgrade.it/forum/showthread.php?t=2119003), più che all'effettiva efficienza dei compilatori Intel :asd:
cdimauro
25-03-2010, 16:16
Non conoscevo il thread (ebbene sì: non frequento quella sezione :D), ma il comportamento di Intel coi suoi compilatori sì. :D
banryu79
25-03-2010, 16:52
Non conoscevo il thread (ebbene sì: non frequento quella sezione :D), ma il comportamento di Intel coi suoi compilatori sì. :D
Beh, manco io frequento quella sezione... Invece io non ne sapevo nulla, ero incappato per caso su quella notizia giorni fa.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.