Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Optimizing managed C# vs. native C++ code

[es] :: Advocacy :: Optimizing managed C# vs. native C++ code

[ Pregleda: 3575 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Optimizing managed C# vs. native C++ code21.05.2005. u 05:48 - pre 230 meseci
Raymond Chen (aka "fixed more Windows bugs than you've had hot dinners") and Rico Mariani (aka "Mr .NET Performance") have been running a great series of articles where they write and then optimize the same application in two different languages: native C++ and managed C#.
...
A line-for-line translation of the original C++ code into C# ran 10 times faster than the C++ code.
It took five different optimizations (one of which introduced a bug) for the C++ code to match the speed of the unaltered C# code.

After Raymond's sixth optimization, his C++ code finally beat the C# code because the runtime got down to where the 60ms startup overhead of the CLR made a difference!

To accomplish this, Raymond had to:
* Write his own file/io stuff
* Write his own string class
* Write his own allocator
* Write his own international mapping

So yes, C++ code can be faster than C# code but when you look at all the work Raymond had to go through to achieve that, you have to ask yourself "is it worth it?"


http://blogs.msdn.com/jonathanh/archive/2005/05/20/420634.aspx
Commercial-Free !!!
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Optimizing managed C# vs. native C++ code21.05.2005. u 14:49 - pre 230 meseci
Moje mišljenje o tome možete naći ovde:

http://blogs.msdn.com/ricom/ar...mentPosted=true#commentmessage

Taj Rico mora da je u duši Linuxovac.
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: Optimizing managed C# vs. native C++ code21.05.2005. u 23:30 - pre 230 meseci
.NET 2.0 donosi dosta poboljšanja pogotovo što se tiče startup performansi (novi ngen), a i za vrijeme izvođenja (manji runtime overhead na broj potrošenih handle-ova i sl.) - tako da bi bilo jaaaaako zanimljivo da je Rico usporedio ngen-ed verziju pod 2.0 runtimeom :)))

Vjerojatno bi se razlika još više smanjila.

Zanimljivo je nadalje kolike prednosti pri otpimizaciji pruža typesafe jezik. Programe napisane u typesafe jeziku je puno lakše analizirati i optimizirati, jer ne postoje "crne rupe" kao što je recimo castanje integera na ptr u C/C++.

JIT-er će se u budoćnosti samo još više poboljšavati i generirati još bolji kod jako specifičan za CPU na kojem je pokrenut, što je luksuz koji si prekomapajlirani jezici ne mogu dopustiti bez značajnijeg bloata.

Ja još nisam vidio test u kojemu je gubitak perforamanse managed koda u odnosu na managed verziju veća od 15%, obično puno manja. Za GUI aplikacije obično je omjer produktivnost/<ušteda u vremenu razvoja> dovoljno velik u odnosu na unmanaged jezike :)
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 01:10 - pre 230 meseci
JIT kompajleri po prirodi stvari ne mogu da optimizuju kod toliko dobro. Jednostavno nemaju vremena za to. Vidi npr:

http://pluralsight.com/blogs/hsutter/archive/2004/10/07/2693.aspx

"JIT is, by definition, "just in time" compilation. So, yes, it's done on each load of the image. A JIT must first and foremost be blazingly fast, which reduces its opportunities for optimization."
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
195.175.37.*



Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 02:18 - pre 230 meseci
Da, ali to te ne sprečava da za vrijeme instalacije programa ne radiš translaciju u nativni kod preko ngen kao što npr. radi VS.NET za vrijeme svoje instalacije (ona "Generating native images.." faza koja traje par min) +

• JIT kompajler zna sve cake CPU-a i OS-a (koje skupove instrukcija podržava, broj logičkih jezgri, sistemske resurse...) te u ovisnosti o tome može modificirati strategiju optimizacije

• JIT-er može koristiti profiling da detektira dijelove koda koji se jako često izvršavaju (hotspots), te u ovisnosti o tome izvršiti dodatnu optimizaciju već JIT-anog koda, recimo ako detektira da jedan dio koda koji kopira neku memoriju se jako često koristi nad relativno velikim (recimo sad) stringovima, umjesto da koristi repnz movsb, može generirati movntq instrukcije nad MMX registrima, skupa sa block prefetchingom etc.)

Mada danas IMHO nema puno vidljive razlike između normalnih kompajlera i .NET JIT-era, osim ako su aplikacije extremno osjetljive na brzinu izvršavanja (recimo DES brutforsanje i sl. :)

+ Još C++ kompajleri su još uvijek dekadama napredniji, ali budućnost je na strani JIT-era :)
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 03:58 - pre 230 meseci
Sun, pogledaj malo oko toga sa ngen - kažu da to ne daje uvek bolje rezultate.

Raspravu na ovu temu ne treba ograničiti samo na brzinu izvršavanja na kraju: utrošeno vreme za razvoj aplikacije (, sigurnost, portabilnost, itd.) je bitna stvar.
Commercial-Free !!!
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 21:25 - pre 230 meseci
Sve ima svoju primenu. Ovo što je Sundance nabrojao je više potencijalna nego stvarna predost, jer današnji JIT-eri de fakto ne koriste te mogućnosti. U praksi to izgleda malo drugačije: je li neko probao Paint.NET koji se često uzima kao dokaz da je .NET spreman za image-processing? Sporo, brate, mnogo sporo. Ne vidim da će na polju "boxed" aplikacija managed kod da zameni native u dogledno vreme.

Sa druge strane, za Web i većinu in-house aplikacija, .NET je dušu dao i tu se više i ne postavlja pitanje šta je bolje.
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 22:40 - pre 230 meseci
Pogledao sam ja i jeste sporo. Ne znam otkud uopšte da aplikaciju u toj kategoriji, za koju se moglo znati da će biti spora, predstavljaju kao dobar primer.

Malo lakše aplikacije kao npr. RSS Reader rade bez ikakvih problema i usporenje se jednostavno ne primećuje (AMD 2000+, 1 GB RAM).
Commercial-Free !!!
 
Odgovor na temu

dr ZiDoo
Banja Luka

Član broj: 189
Poruke: 1728
*.teleklik.net.

Jabber: ZiDoo@elitesecurity.org
ICQ: 299539598
Sajt: zidoo.geek.rs.ba


Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 23:16 - pre 230 meseci
Ma. realno gledano: Sve je to fino, svi mi to guramo ispred svega, na papiru super djeluje, ali one sekunde kada se ozbiljan prf. software tipa PS, Corel i sta ja znam vec krene pisati u .net-u aj cu reci super.

Realno gledano, briga jednu banku da li ce 2+2/2 (figurativno) nesto izracunari za 0,003 ili 0,01 sec...
tu nema kašike....
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Optimizing managed C# vs. native C++ code22.05.2005. u 23:43 - pre 230 meseci
A zašto bi se to pisalo u .NET-u? Prvo, brzina u takvim aplikacijama jeste kritična i drugo, čemu to raditi? Zašto bi pisao iznova nešto što već radi OK, gomila bagova je već pronađena i ispravljena..? Možda čisto zabave radi?

Kako Tata reče, za neke kategorije poslova pitanje se uopšte više i ne postavlja. Ili kao da ja sad kažem "E, daj da ja vidim web aplikacije pisane u C ili C++ pa ću reći da su super."

Takve odluke (koja platforma/jezik će se koristiti) uvek treba posmatrati u kontekstu posla koji treba da aplikacija rešava i slično.
Commercial-Free !!!
 
Odgovor na temu

dr ZiDoo
Banja Luka

Član broj: 189
Poruke: 1728
*.teleklik.net.

Jabber: ZiDoo@elitesecurity.org
ICQ: 299539598
Sajt: zidoo.geek.rs.ba


Profil

icon Re: Optimizing managed C# vs. native C++ code23.05.2005. u 07:19 - pre 230 meseci
Ma to je bilo na onu gore priču...

meni aplikacije pisane u .net freJmvorku rade jako pristojno. Jednostavno mislim da nema potrebe trošiti reči na ovakve diskusije.
tu nema kašike....
 
Odgovor na temu

[es] :: Advocacy :: Optimizing managed C# vs. native C++ code

[ Pregleda: 3575 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.