poniedziałek, listopada 09, 2009

32 bity vs. 64 bity, tym razem C++ ;-)

Taka 32/64 bitowa ciekawostka ;-) całkowanie numeryczne w 64 bitowej Java'ie było szybsze niż w 32 bitowej, ale już dla kodu natywnego wyprodukowanego przez kompilator C++ wyniki są odwrotne.

W ramach walki z Nowym Gadaczem, a dokładniej zabawą z tym by mógł równie dobrze pracować w 32 bitowej Java'ie jak i 64 bitowej [ręki nie dam, ale na 99% jedyny raz gdy był uruchomiony w 64 bitach to było wtedy gdy sam sprawdzałem ;-)], a nie może z racji tego, że wykorzystuje do komunikacji po DDE natywny kod w JNI skompilowany dla 32 bitów, próbuję zrobić jego wersję 64 bitową. W tym celu używam Visual C++ 2008 Express Edition [wersja 32 bitowa powstała w Dev-C++], które przy pomocy pewnej sztuczki używa 64 bitowego kompilatora z Windows 7 SDK.
I właśnie ten 64 bitowy kompilator postanowiłem wykorzystać dla testów.

Jest to o tyle uzasadnione, że mamy tu do czynienia z "tym samym" kompilatorem, który produkuje raz kod 32 bitowy, a drugim razem 64 bitowy.
Więc różnice w prędkości wykonania "powinny" zależeć tylko od bitowości ;-)
No i wyniki są takie [przypomnę, że wynikiem jest czas w którym wykonano 1 całkowanie w 10 tysiącach kroków w przedziale <-10,10) z funkcji f(x)=e-x2 [do znudzenia to tu piszę ;-)]]:

32 bit 0,985 ms
64 bit 1,387 ms

Czyli kod 32 bitowy jest o prawie 30% szybszy!
Oczywiście w tym akurat zastosowaniu, bo już możliwe że w innych będzie dokładnie na odwrót. Nie wolno zapomnieć też, o tym że sam kompilator może mieć w sobie pewne założenia, które przyśpieszały kod na 32 bitach, a na 64 bitach tego nie powodują.
Najsprawiedliwiej byłoby porównać wyniki uzyskane w kodzie assemblerowym, ale ze wstydem przyznaje, że próbowałem coś przed chwilą w assemblerze napisać i już nic nie pamiętam z tego jak się pracuje z koprocesorem :-)


Podobne postybeta
Java 32 bit vs. Java 64 bit
Język Go dla Windows :-)
A JavaScript i tak szybszy ;-)
"CPUInfo" w Java :-)
Sarkania na C++