Portál AbcLinuxu, 26. dubna 2024 22:20


Dotaz: Nejlepší nastavení GCC

1.9.2005 16:20 Andrej | skóre: 51 | blog: Republic of Mordor
Nejlepší nastavení GCC
Přečteno: 180×
Odpovědět | Admin

Potřeboval bych poradit ohledně nastavení GCC pro kompilaci balíčků a jádra.

Proč nebývá v distribucích defaultně nastavena optimalizace -O3 pro kompilaci balíčků? Napadají mě 3 možné odpovědi, ale netuším, která je správně. :-D

Co z toho je pravda?

O podobných třech možnostech jsem uvažoval ještě u dvou jiných voleb:

  1. Volba "Use register arguments" v nastavení kernelu. (První tři argumenty funkce se předávají v registrech procesoru, tj. opravdu fofrem.)
  2. Volba gcc zvaná -funit-at-a-time popsaná zde takto: Parse the whole compilation unit before starting to produce code. This allows some extra optimizations to take place but consumes more memory.

Zrovna hodně kompiluju a rád bych proto věděl, co se vyplatí nastavit. Máte s tím někdo bližší zkušenosti? Která ze tří možností je v jednotlivých případech nejblíž pravdě?

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.9.2005 19:53 Marcel Šebek | skóre: 21 | blog: c
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Odpovědět | | Sbalit | Link | Blokovat | Admin
-funit-at-a-time je defaultně zapnutá u -O2, taže tam není co řešit. Register arguments u kernelu používám a zatím žádné problémy. -O3 bych nastavoval hlavně u kritických aplikací (třeba hry), kde chyba tolik nevadí a rozdíl je poznat.
Real programmers don't comment their code. If it was hard to write, it should be hard to read.
1.9.2005 20:18 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC

Když je rozdíl i subjektivně poznat, to už je dobrý výsledek, který stojí za to. S tím kernelem to zkusím.

Jenže otázka je, jestli chyba opravdu tolik nevadí. Nerad bych, aby pak práce s mým počítačem byla o nervy a abych se musel pořád jen obávat, kdy to spadne. Jak časté ty chyby můžou být? Je ta volba -O3 oficiální a odzkoušená, nebo je experimentální a nespolehlivá?

1.9.2005 20:56 #Tom
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Já mám skoro celej Linux from scratch zkompilovanej s -O3 -fomit-frame-pointer -march=pentium2 -fPIC mimo jádra a glibc a nepadá mi nic.
2.9.2005 16:46 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC

Věřím, že například na hodně standardním desktopu všechno stoprocentně funguje. Na speciálnějších konfiguracích je to ale složitější. Já mám Asus M2400N (notebook). Mám na něm Linux už odnepaměti. Funguje mi všechen hardware i suspend.

Dva dny zpátky jsem si zkompiloval kernel 2.6.13 a vstaly mi vlasy hrůzou. Software suspend z www.suspend2.net, který vždy stoprocentně fungoval, najednou začal blbnout, plivat chybové hlášky a zasekávat systém, ještě k tomu náhodně a když to nejmíň potřebuju. Driver pro modem (slmodem 2.6.10) nezkompiluju ani zázrakem a patche nepomáhají.

Zkoušel jsem kompilovat jádro s parametry v registrech a fungovalo na první pohled stejně spolehlivě jako bez nich, dokonce o pár sekund rychleji bootovalo. Chyby při uspání se vyskytovaly s přibližně stejnou pravděpodobností. :-( Takže zatím nechávám parametry v registrech.

Právě výměna jádra mě vedla k dotazu ohledně nastavení gcc - jestli třeba nedělám něco špatně. Možná ale spíš jen předbíhám událostem a měl bych počkat, až budou patche pro kernel, suspend a modem. Přece jen asi není dobré instalovat kernel, který je dva dny po vydání...

Když to ale vezmu z jiného pohledu, kdybych si ho nenainstaloval já společně se spoustou dalších kaskadérů, kdo by ho potom vyzkoušel? :-D

2.9.2005 20:55 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Proč kompiluješ s -fPIC programy? (Knihovny se s ním kompilují automaticky, takže na ty to nemá vliv.) Znám pár důvodů, proč se tím zhroší výkon, ale proto to asi neděláš ;-)
3.9.2005 12:47 #Tom
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
S -fPIC kompiluju z pohodlnosti všechno, protože knihovny se mi s tím automaticky bohužel nekompilují, někdy dokonce ani tehdy, když to dám do CFLAGS/CPPFLAGS, třeba Qt. Navíc z některých programů rád dělám knihovny - třeba takové xpdf, LPRng nebo Samba. Běh programu se tím snad nezpomalí, řekl bych, že jen jeho spouštění.
3.9.2005 13:54 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Právě naopak.

Qt neinstaluji, takže tu nebudu komentovat. Cokoli, co používá libtool, a to je dnes skoro vše, kompiluje knihovny a moduly s -fPIC (nebo -fpic, na intelu je to jedno). A všechny ostatní knihovny, které nepsal úplný diletant, též.

Použití -fPIC (-fpic) výrazně zrychluje spouštění a umožňuje sdílet sekci .text, protože se v ní nemusejí provádět relokace (které vyžadují, aby se do ní zapsalo, což samozřejmě znemožňuje sdílení). U sdílených knihoven je proto jeho nepoužití neomluvitelné -- okamžitě bugreportovat, víš-li o nějaké takové knihovně.

Má ovšem i nevýhody, zejména na intelu komplikuje jiné využití ebx, takže vede k méně efektivnímu kódu. Programy normálně natahují .text na danou adresu virtuální paměti (relokují se jen ne pre-linkované knihovny), takže je sdílena -- a použitím -fPIC proto získáváš jen ty nevýhody.
3.9.2005 15:29 #Tom
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Už si nepamatuju všechny knihovny mají vypnutý PIC. Podle toho, co jsem o PIC četl, tak bez něj je potřeba knihovnu zavádět do paměti pro každý program znova - snad to tak chápu dobře i z vašeho příspěvku. Právě toto mě motivovalo k centrálnímu zapnutí PIC přes proměnné prostředí CFLAGS/CPPFLAGS, ze zdrojáků instaluju skoro všechno a nechce se mi na to myslet při každé kompilaci. Zjistil jsem ale, že sdílených knihovnách je uložena velká část kódu - u mě je to asi 276 MB z 580 MB. Řekl bych, že zapnutím PIC pro všechno zase tolik neztratím.
1.9.2005 20:57 trancelius | skóre: 22
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Jsou borci co jedou i na -O8, tak myslím, že to není až zas tak riskantní. Jinak ten rozdíl je znát spíše mezi -O0, -O1 a -O2, dál to jsou už jen drobnosti a nemusí to vždy přinést ideální poměr cena/výkon (kde cena je snížení stability)
1.9.2005 21:11 #Tom
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
-O3 je maximum (pokud vím, v manuálové stránce vyšší není), takže mají jen třetí stupeň, i když napíšou osmičku.
1.9.2005 21:45 trancelius | skóre: 22
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Je to možný... to by pak vysvětlovalo, proč to nejde poznat :D
2.9.2005 16:49 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Nebo je tam něco tak experimentálního, že to ani není v dokumentaci... :-) Pak by totiž šťouralové jako já zkoušeli, co to snese. :-D
Luboš Doležel (Doli) avatar 2.9.2005 20:06 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
V Makefile/skriptu u Quake 3 jsem někde viděl -O8
1.9.2005 21:00 D-Evil | skóre: 25 | Praha
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Odpovědět | | Sbalit | Link | Blokovat | Admin
Osobně jsem na Gentoo rozdíl mezi -O2 a -O3 poznal jen jeden, delší kompilace v případě O3. Zrychlení jsem pouhym okem nezpozoroval žádný, ale je možný, že moje nastavení pro GCC nebyly úplně optimální, takže to berte spíš jako jednu osobní zkušenost, která nemusí platit všude.
1.9.2005 22:12 snowracer | skóre: 21 | blog: Omniloquent | Praha
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Odpovědět | | Sbalit | Link | Blokovat | Admin
Z mého pohledu se vyplatí používat O2. Binárku jsou téměř stejně rychlé, jako ty, které vylezou z kompilátoru při použití O3, jsou o něco menší a jsou široce používány, na což se jistě myslí i u testování programů.
2.9.2005 21:08 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Odpovědět | | Sbalit | Link | Blokovat | Admin
Historicky jsou vyšší úrovně optimalizace u GCC bugovitější a méně otestované, že se s -O3 chybně zkompilovalo jádro, nebyla tak řídká situace. Kompiluje se citelně déle a rozdíl ve výkonu je minimální, někdy klidně i negativní, protože se toho hodně inlinuje, naroste velikost kódu, který se tím už moc nezrychlí, ale zato se ho méně vejde do keší procesoru... Kromě toho je s -O3 v podstatě nemožné debuggování (s -O debugguji normálně, s -O2 se dá jako co, ale -O3 je smrt). Většího zrychlení než s -O2 -> -O3 spíš dosáhneš nějakým špinavým způsobem typu -fomit-frame-pointer, -ffast-math a pod. (žádám Gentooisty, kteří si teď rychle přidají do flagů -ffast-math, aby si pak stěžovali na lampárně, ne mně, že něco počítá blbě).
3.9.2005 08:49 trancelius | skóre: 22
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Myslím, že většina Gentooistů si moc zbrkle nedává do CFLAGS kdejaký (potenciálně nebezpečný) flagy... (mluvím za sebe)
3.9.2005 09:44 snowracer | skóre: 21 | blog: Omniloquent | Praha
Rozbalit Rozbalit vše Re: Nejlepší nastavení GCC
Používám -ffast-math na všech počítačích kromě produkčních serverů. Nestěžuji si :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.