Extrém hosszú fordítási idő

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Arduino avr tools kérdés:
Van egy nagy projekt (100-as nagyságrendű forrásfájl). A forrásban felhasználjuk az Arduino könyvtárakat, a fordításhoz a keretrendszerhez mellékelt avr tools-t használjuk.
A Makefile saját.
Az Arduino verziója: 1.0.6

Néhány teljes fordítási idő:
mindegyik Windows 7 pro sp1.
Lenovo laptop: i7, 4 mag, 12 GB RAM: 301 sec
Asztali gép 1: i7, 4 mag, 16 GB RAM: 301 sec
Asztali gép 2: Core 2 Duo, 2 mag, 2 GB RAM: 170 sec
HP Elitebook: i7 low voltage mobile 2 mag, 4 GB RAM: 62 sec

Macbook 1: OSX 10.7: Core 2 Duo, 2 mag, 2 GB RAM: 24 sec
Valamint néztük még sokféle Inteles Mac-en, mindegyiken 60 sec alatti volt. (Nem írtam fel pontosabban.)
Sőt, megnéztük virtuális gépen futtatott OSX-en is. 35 sec lett.

Mi okozhatja ezt a nagy szórást a Windowsos gépek között?
Miért fordul le jóval gyorsabban OSX alatt, még ha a hardver jóval gyengébb is?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: Robert »

Lassú fordítás:
- aktív bluetooth host, korábban elérhető (most hiányzó) BT kliensekkel
- ugyanez hálózati meghajtók elérhetőségével
- java eltérő verziója is van a gépen
- víruskereső beállítása minden filenyitáskor leskelődik
- széttöredeztett file-k, defrag hiánya
- lassú hdd
- memória kevés és swap-ba rak ki sokmindent (Arduino keretrendszer erőforrásigényes)
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Pontosítok:
Arduino keretrendszer nem fut.
A hozzá adott avr toolchain-t használjuk saját Makefile-al.
Cygwin make-t használjuk.

- aktív bluetooth host, korábban elérhető (most hiányzó) BT kliensekkel
- java eltérő verziója is van a gépen
A fentebb írtak (Arduino IDE nem fut) miatt ezek nem játszanak.

- ugyanez hálózati meghajtók elérhetőségével
- víruskereső beállítása minden filenyitáskor leskelődik
Ez volt az első, amit kipróbáltam. Leállítottam minden víruskeresőt, és tűzfalat. Nem változott az eredmény.

- széttöredeztett file-k, defrag hiánya
- lassú hdd
Csupa gyors HDD.
Azt is kipróbáltam, hogy a desktop gépbe raktam egy TÖKÜRES HDD-t, azon volt minden toolchain és forrás. Nem változott az eredmény.

- memória kevés és swap-ba rak ki sokmindent (Arduino keretrendszer erőforrásigényes)
4-8-16 GB RAM-os gépekről van szó. A két legerősebb gép SSD-vel.
Míg a Macintosh-ok között van 1-2 GB-os is, mégis gyorsabban fordít.
De mondom, hogy az Arduino IDE nem fut.
Gorrodin
SzínkódFestő
Hozzászólások: 76
Csatlakozott: 2014. július 10. csütörtök, 19:54

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: Gorrodin »

Érdekes, hogy minél erősebb a proci, sok memóriával, annál gyengébb a teljesítmény.
Talán kérdezd meg Billt, miért van ez.
32 bit, vagy 64?
Ugye tudjuk, hogy a 64 bites rendszer nem biztos, hogy gorsabban futtat egy 32 bites programot. Aztán ott van még a többszálas feldolgozás, és az apró fájlokhoz való hozzáfrés, feldolgozás.
A szuper, sok magos procik nem a kis állományok feldolgozására vannak optimalizálva (Windows alatt).
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Mind 64 bites rendszer. 64 bites Cygwin.

A nincs optimalizálva, meg töredezett, meg hasonlók biztosan nem igazak. Vagy legalábbis nem okozhatnának ekkora különbséget.
Ráadásul a virtuális gépen futó OSX alatt is gyors a fordítás, pedig ott elvileg hatványozottan kellene jelentkeznie a lassító körülményeknek.

Az eszközöket egyszer töltöttem le, utána arról a gépről másoltam a többire. Tehát azonos verziójúak.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: csabeszq »

Próbáld ki :

make -j 8

Ez annyit csinál, hogy párhuzamosan futtat 8 gcc-t. Ahogy emlékszem, a make alapból lehet, hogy egyesével megy végig a fájlokon és fordítja őket. Ez 8-asával párhuzamosan csinálja. Ilyenkor a 4 CPU-t azért illene felnyomnia 100%-ra.

A kedvedért csináltam a 2 mag 4 szálas notebookommal összehasonlítást.

szimpla make: 3m 38s
-j 8 opcióval: 1m 51s

Már egy mezei CPU monitornál látszania kell, ha a CPU-k nincsenek 100%-on. Ami a MAC-t illeti, lehet, hogy a make náluk alapból párhuzamosan dolgozik, szemben a cygwin-nel.

Emellett az sem részletkérdés, hogy SSD-n vagy HDD-n fordítasz.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Köszönöm.

Újra fordítottam azon a gépen, amin múltkor 301 sec volt a fordítás:
Most: 200 sec !
-j 8 opcióval: 170 sec

Érdekes a különbség, elvileg semmi nem változott...

Az SSD miért lenne ennyire fontos? A 8 éves, Core 2 Duo processzoros MacBook-ban valami 5400-as HDD van, mégis azon fordul le a leggyorsabban.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: csabeszq »

A C fordítás rengeteg apró fájlból áll. Van vagy 1000 include fájl, amik betöltődnek fordítás alatt (egymást töltögetik).

Ha sok apró fájl van, akkor a merevlemez sebessége a szűk keresztmetszet fordításnál, kevésbé a CPU erőssége.
Ha nagy monstrum C fájljaid vannak, akkor számít jobban a CPU erőssége.

Ha a fájlrendszer lassú, akkor a fordítás is lassú lesz. Mindenesetre távolról elég nehéz megmondani, hogy mi lassú nálad.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

> A C fordítás rengeteg apró fájlból áll. Van vagy 1000 include fájl, amik betöltődnek fordítás alatt (egymást töltögetik).
Tudom.
Ráadásul jól ismerem a forrást is.

> Ha sok apró fájl van, akkor a merevlemez sebessége a szűk keresztmetszet fordításnál, kevésbé a CPU erőssége.
> Ha a fájlrendszer lassú, akkor a fordítás is lassú lesz. Mindenesetre távolról elég nehéz megmondani, hogy mi lassú nálad.
Igen, de:
A két legerősebb win gépen HDD + SSD kombináció van. A HDD-k frissen töredezettségmentesítve.
A 8 éves MacBook-ban valami notebook 5400 HDD.
És tízszeres a sebességkülönbség. Ami sok.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: csabeszq »

Távolról meglehetősen nehéz segíteni. Általánosságban leírtam, hogy mi szokott problémát okozni.

De kismillió dolog lehet mögötte. Pl. más gcc verzió is.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Köszönök minden hozzászólást.

Annyi kiderült, hogy a Makefile feldolgozása során a Cygwin (make) rengeteg új process-t indít. avr-gcc, grep, stb. Unix környezetben ez teljesen természetes, míg Windows-on sokkal költségesebb művelet a process indítás. Ez okozza a platformok közötti sebességkülönbséget.

Azt mondjuk még mindig nem értem, hogy a Windows-os gépek között miért pont olyan a különbség, amilyen. Vagyis hogy nem függ a hardwer teljesítményétől a fordítás sebessége.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Update:
A Daemon Tools Lite is bekavart Windows-on. (Feltűnt, hogy azokon a gépeken lassú a make, ahol telepítve van.)
Eltávolítottam, és a 300 másodperc 90-re csökkent. Ez még mindig 3x annyi, mint egy hasonló teljesítményű Linux/Unix gépen, de már elviselhető.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Extrém hosszú fordítási idő

Hozzászólás Szerző: vargham »

Update:
Másik lassító szoftver: Comodo firewall.
Válasz küldése