OpenMP, overhead na Windowsu 7

OpenMP, overhead na Windowsu 7

offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10622
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Da li je iko radio sa OpenMP za Windows platformu i na koji način je rješavao problem sa "predugačkim" overheadom koji se javlja na Windowsu? Programčić koji se na Mintu unutar virtuelne mašine izvrši za 4s se na Windows hostu izvršava za 17-18s bilo da je kompajliran sa VS-om (Release) bilo sa MinGW.

Unapred zahvalan.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Nažalost, nikad nisam testirao isti program na Windowsu i Linuxu da bih mogao da primetim tu razliku. Skoro siguran sam da do razlike dolazi zbog načina na koji kompajleri optimiziraju kod, ali s druge strane MinGW bi trebalo da odradi jednak posao kao što GNU radi na Linuxu.

Možeš li da napraviš jedan mali i jednostvan program koji na Windowsu radi sporije nego na Linuxu pa da probamo i na drugim računarima?



offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10622
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Napisano: 12 Nov 2014 9:39

https://www.mycity.rs/must-login.png

Izvoli, samo da napomenem da kad u mingw na Windowsu uključim switch -O2 onda se program izvšava isto onoliko dugo koliko se taj program kompajliran sa gcc uz -O2 izvršava na Mintu. To sam sinoć primejtio. Takođe, program kompajliran sa MinGW ispisuje nulu umjesto broja Pi.

Za testiranje koristiti 1.000.000.000 intervala.

Dopuna: 12 Nov 2014 9:58

Ovo je inače program koji sam testirao i koji ima dosta bolje performase pod Linxom nego kompajliran sa VS.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Moj komp je malo sporiji od tvog. Za 1000000000 iteracija sa 2 niti mi na Windowsu treba 49959ms, dok na Linuxu (minimalni Arch Linux) 32776ms.

Za kompajliranje na Windowsu sam koristio VS 2012 i uključio standardne optimizacije i podršku za OpenMP (ako je ne uključiš, onda OpenMP radi sve u jednoj niti), dok sam na Linuxu koristio GCC 4.9.2 sa standardnim optimizacijama.

Predpostavljam da do razlike dolazi zbog opterećenja sistema i drugačijeg kompajlera, ali ne vidim neku veliku razliku kao što se kod tebe događa.

offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10622
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Napisano: 12 Nov 2014 16:02

Isti problem sam imao i u kabinetu za lab. vježbe gdje su Lenovo radne stanice sa i7-4770K i 16GiB RAM-a. U Mintu za 1,5s, na Windowsu 5,8s. Možeš li mi napisati koje si optimizacije uključio odnosno, koje si parametre podesio.

P.S. Uključio sam OpenMP odmah tako da su vremena izvršavanja koje sam naveo postignuta sa sva 4 fizička jezgra koje ima moj Q9650.

Dopuna: 12 Nov 2014 17:50

Riješeno. U VS-u problem je pravila funkcija pow().

Kada sam
suma += (4.0 / (1.0 + pow(h * ((long double) i - 0.5),2)));

zamijenio sa

suma += (4.0 / (1.0 + (h * ((long double)i - 0.5))*(h * ((long double)i - 0.5))));

VS-ov EXE je bio brži od gcc-ovog za nekih 0.2s.


Sad sam primjetio jedan drugi problem sa brojem decimalnih mjesta na Windowsu, dok na Linuxu nema tih problema.
O čemu je riječ. U Mintu dobijem da je pi
3.141592653589792887231305074103
a na Windowsu dobijem:
3.141592653589821100000000000000

Razlog zbog koga se ovo dešava je to što je u MSVC long double veličine 8 bajtova, a ne 16. Postoji li neki način da u MSVC koristim floating tip koji je veličine 16 bajtova?

Dopuna: 12 Nov 2014 21:46

Izgleda da ću ipak kod pisati u VS, a kompajlirati ga sa gcc.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Nažalost Microsoft je odlučio da long double tip mapira na double tako da je putpuno sve jedno šta od ta dva napišeš, uvek ćeš dobiri samo double.

Za veću preciznost računanja, možeš pogledati ovaj flag: http://msdn.microsoft.com/en-us/library/e7s85ffb.aspx

Ko je trenutno na forumu
 

Ukupno su 1063 korisnika na forumu :: 48 registrovanih, 6 sakrivenih i 1009 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 9k38, Apok, babaroga, bigfoot, Bojadin Strumski, bojank, bojankrstc, bojcistv, Centauro, dane007, dankisha, Dannyboy, Dimitrise93, djolew, FOX, Goran 0000, goxin, janbo, Karla, Kibice, Krvava Devetka, loon123, Lošmi, Marko Marković, mercedesamg, milenko crazy north, milutin134, mocnijogurt, moldway, Neutral-M, ozzy, Parker, radoznao, randja26, repac, Rogan33, royst33, sasa87, Simon simonović, slonic_tonic, stegonosa, styg, Trpe Grozni, uruk, vathra, wulfy, ZetaMan, 1107