Optimalizacia sa nerobi tak, ze sa nieco skompiluje pre i686...ale tak, ze sa nerobia zbytocne vypocty a pouzivaju sa efektivne algoritmy.
Napriklad taka kniznica gtk+2 je nechutne pomala a ziadna "optimalizacia" i686 jej nepomoze.
s tymto si dovolim nie uplne suhlasit.
ano, optimalizacia je hlavne algoritmicka zalezitost, ale schopnost vyuzit vsetky featury architektury je tiez boost a niekedy nemaly. urcite to neznizi rad zlozitosti, ale moze upravit konstantu k dobru.
mat spravne nasekane instrukcie aby sa lepsie dali nahadzat do pipeline, moze pomoct, na tom sa dufam zhodneme. ved odcoho su v kompilatoroch tie "spravne options" pre tu "spravnu architekturu". pochybujem ze su tam len tak pre srandu kralikom...
Tak tak, já sice kryptografii nezkoušel, ale třeba jednoduchý quicksort zkompilovaný s -O3 dává oproti -O1 výsledky několikrát rychlejší - toť moje zkušenost.
Ale není to zadarmo. Často zaplatíte také několikanásobnou velikostí binárky.
Další možnost je používat v programech vhodné knihovny. Někde jsem viděl matematickou knihovnu pro C++ s jejíž pomocí byly matematické operace zhruba stejně rychlé v C++ jako s Fortranem. Nicméně se za to platí použitím dosti nestandardních technik a rozkopírováním kódu místo jeho voláním z funkcí.
Zas tak uplne to neni, napriklad optimalizace pro cpu s malou cache binarku zmensi. Kdyz se nahodou stane, ze Vam cache s ramkama zacne hrat ping-pong, tak se beh velmi znatelne zpomali.
A optimalizace pro architekturu (zde i686) zapina pouziti "lepsich" instrukci typu sse, mmx atd a tim se binarka take moc nezvetsuje (mozna dokonce naopak).
Co ji zvetsi je rozbaleni cyklu, zarovnani kodu a inlineování funkcí. Bohuzel prekladac se nemuze uplne dobre rozhodnout, ktere cykly rozbalit a u kterych je to zbytecne, protoze se jimi projede jen jednou za 10 let, nicmene napriklad nerozbalene vymazavani pameti (pole) je zatracene pomale :-)
Ha! Kvalifikovaná pomoc! :-) Napadlo mě, když jsem dneska mluvil s Yokotashim, že by bylo taky pěkné mít mechanismus, který by volil -Os nebo -O2 podle toho, jakou část kódu právě řeší (a jak se chovala při profilování co do run-time footprintu). Když člověk chce nacpat kus kódu do kapesního zařízení, tak -Os pomůže, ale zase se to docela zpomalí. V Lispu tohle není celkem problém (na úrovni funkce, nebo dokonce i na úrovni jednotlivých výrazů uvnitř funkce), nešlo by to i v Cčku? Tedy pokud to už nedělá tahle funkce - do vnitřností GCC ale nevidím, abych posoudil, kam až při zmenšování málo používaných kusů kódu zachází.
GCC s profilem umí rozhodnout u většiny optimalizací jestli kompilovat pro -O2 a nebo -Os na základě profilu daného basic bloku. Není to úplně všude, pomalu se to ale zpelšuje (pomoc vítána :) hlavní problém je, že machine description zatím neví o tom, že nějaký profil existuje, takže třeba násobení se pořád optimalizuje podle -Ox. Věci jako alignment, inlinování či optimalizace smyček ale fungují). GCC 4.4 bude mít attributy hot a cold co to umí nastavit profil na úrovni funkce, navíc ty funkce dají do svých podsekcí a zlepší lokalitu.
Co já vím, tak i když je dnes distro kompilované pro i386, neznamená to, že by tam nebyla podpora pro "lepší fíčury". Je to složitější.
1. Podpora "zrychlovacích" instrukcí jako sse, 3dnow. Většinou je zapnutá, i když se kompiluje pro i386. Binárka však obsahuje i náhradní kód pro procesory bez těchto instrukcí. proto i386. Arch zdá se tento kód neobsahuje (kompilátor ho může vynechat), to znamená, že musíte mít minimálně fpu a mmx. Ale i i386 binárka může mít podporu pro sse4.
2. optimalizace na architekturu. Při tomhle se se binárka sestavuje tak, aby to vyhovovalo danému procesoru. Různé procesory různě "reagují" na kód. To se asi týká hlavně out-of-order kousků. Zkrátka se použije řazení instrukcí, které dané Pentium nebo Athlon nejméně zblbne... Binárka je ale pořád univerzální. Myslím, že jedna z možností optimalizace je taky i686, ale toto je stále kompatibilní s i386.
3. O1 O2 Os O3 - tohle jsou úrovně optimalizace gcc. Mezi O1 a O2 je IIRC rozdíl jen v času, který kompilace věnuje řešení. Os se snaží zmenšuit velikost binárky, O3 dělá různé věci, které můžou zvýšit velikost binárky ale i výkon. Potenciálně problémové. Tyhle binárky jsou stále univerzální.
Pak jsou ještě další volby, které můžou zvednout výkon a zbořit stabilitu :)
> 1. Podpora "zrychlovacích" instrukcí jako sse, 3dnow. Většinou je zapnutá, i když se kompiluje pro i386. Binárka však obsahuje i náhradní kód pro procesory bez těchto instrukcí. proto i386. Arch zdá se tento kód neobsahuje (kompilátor ho může vynechat), to znamená, že musíte mít minimálně fpu a mmx. Ale i i386 binárka může mít podporu pro sse4.
Pokud vím, tak tohle umí např. překladač od Intelu, ale GCC ne.
A kolik casu travite poustenim kryptografickych algoritmu? :D
Bavime se jeste porad o optimalizaci celeho systemu, nebo o optimalizaci na urovni jednotlivych kratickych rutin?
Ja jsem kdysi prepisoval nektere veci z C do ASM aby byly rychlejsi, takze mam velmi dobrou predstavu co se da poradnou optimalizaci nekterych loopu dosahnout, ale opravdu si myslim ze system prelozeny na i686 misto i386 z pohledu (obycejneho) uzivatele moc vykonu neziska. Asi neco jako pretaktovani procesoru (to mne osobne taky prislo ve vetsine pripadu zbytecne, jestli nekomu chybelo 5% vykonu, tak si nejspis koupil neadekvatni HW k tomu co potreboval).
Jo, ale je to vyborne pro lidi co pouzivaji pocitace na pomerovani kdo ma vetsi^H^H^H^Hykonnejsi system. To zase jo, to chapu. :D
Co je to za blabol? Cetl jste vubec na co reagujete? Peter mluvil o zoptimalizovanem systemu - tzn. command line utility, samba, xka, kde a ja nevim co jeste.... Rychlost sifrovaneho FS bude zaviset jen a pouze na tom, jak je prelozeno jadro a nejaky fuse modul. To mi vysvetlete, jak KDE nebo Apache prelozeny pro 686 muze mit vliv na rychlost desifrovani filesystemu?? Souhlasim, ze v tomto konkretinm pripade to muze mit dost velky vliv, ale na to, abych tohoto dosahl, nepotrebuju instalovat arch. Ten CryptoFS modul si se vsema moznyma optimalizacema prelozim i v ubuntu a vysledek bude stejny. O zbytku si stejne jako Petr nemyslim, ze by melo nejaky podstatny vliv (tech 5%).
Ja ano, ale Vy bohuzel asi ne. Odpovidal jsem na to, jak casto poustim rutiny pro kryptovani. Na tu druhou cast jsem uz nereagoval, protoze jsem nechtel zbytecne vyvolavat hadku.
Moje zkusenosti ukazuji, ze optimalizovat pro architekturu se vyplaci, napriklad diky tomu mi bezpoblemu funguje pocitac s via c3 jako video (bez optimalizace se celkem casto trhalo). Tez arch krasne slape na mem starem notebooku, vizte http://petris.webhosting.klfree.net/archnastarymhw.avi . Predtim jsem dlouho pouzival slackware, a narust rychlosti pri prechodu na arch byl znatelny.
Samozrejme vliv KDE na rychlosti desifrovani je velmi maly, konkretne zde se vliv optimalizace projevi spise opacne. Optimalizace programu X se totiz projevi zejmena v behu programu X a v behu aplikace Y az zprostredkovane, pokud jsou obe ulohy casove multiplexovany na stejna CPU. Tento vliv se velmi meni podle druhu aplikace, nejznatelnejsi je prave na sifrovani pripadne treba pri sledovani videa. Doufam, ze jsem Vam to vysvetlil dostatecne pochopitelne, jinak se ale klidne jeste zeptejte!
A nesnazte se mi prosim cist mezi radky, ze ubuntu je spatne, nic takoveho mezi ne totiz nevpisuji. Je mi zcela jedno, co maji ostatni na svych pocitacich, do te doby, nez s temi pocitaci musim pracovat ja.
Ale ja se v tomto s Vami v zadnem pripade nehadam! Sice jste v podstate opsal to co jsem psal ja, ale presto dekuji za nabidku dalsiho vysvetleni ;-)
Peter psal, ze optimalizovat cely system na architekturu je v zasade nesmysl, protoze to v celku prinese tak 5% zlepseni, coz je pri normalni praci nepostrehnutelne. Neminim se hadat, ze u nekterych konkretnich aplikaci to muze pomoct velmi vyrazne, ale tvrdit, ze je DISTRIBUCE dobra proto, ze je CELA prelozena pro 686 podle me nema moc smysl.
A vy jste na to napsal (alespon takto to vyznelo), ze to dulezite je, kvuli sifrovanemu filesystemu. A ja Vam na to oponoval, ze kvuli tomu nemusim mit zoptimalizovanou celou distribuci, ze si staci zkompilovat tu jednu danou aplikaci.
A v to cteni mezi radky jste expert Vy, protoze ja jsem Vam absolutne nepodsouval ze byste tvrdil, ze je ubuntu spatne (to by me skutecne zajimalo, kde jste na tohle prisel). Vzal jsem ho pouze jen jako priklad.
Nikde (a ja ani nepsal, ze to tvrdite Vy), ale oponujete clovekovi, ktery tvrdi, ze to tak neni. Ano, ve skutecnosti jste reagoval na jeho otazku, jak casto poustite sifrovaci algoritmy, ktera byla z casti recnicka (viz. ten smajlik) a dale vysvetluje, ze opravdu nema na mysli konkretni rutiny, ale cely operacni system (v cemz jsem s nim za jedno).
Vase nasledna reakce se tedy dala brat dvema zpusoby:
a) neosouhlasite, ze cely OS prelozeny pro 686 je zbytecnost, protoze pri pouziti sifrovaneho FS je optimalizace potreba. Tak jsem to pochopil ja a proto jsem Vam oponoval (zvlast kdyz je z ni citit lehke invektivum).
b) byla naprosto zbytecna,protoze jste se s Peterem vlastne shodl. Pak ovsem nechapu, proc jste to vlastne psal, protoze on sam se nikterak nehada, ze u konkretnich specializovanych rutin ke znacnemu zrychleni skutecne dojde.
Reagoval jsem na to, jak často se pouštějí ony šifrovací algoritmy, protože někoho třeba hned takový případ nenapadne (tím nemyslím konkrétně Petera, čte to tu více lidí).
A svým prvním příspěvkem ve vlákně Optimalizacia jsem podpořil názor vgt, který se vůbec netýkal konkrétní optimalizace pro i686 či zda se vyplatí optimalizovat celý systém, ale optimalizace pro architektury obecně. Odporoval jsem proto, že moje zkušenosti s optimalizací jsou jiné a totiž, že se mi dvakrát vyplatila:
1) Používám EPIU jako videopřehrávač a bez optimalizace se některá videa trhala, po optimalizaci se netrhají. Konkrétní číselný nárůst výkonu tady neodhadnu, ale i kdyby to bylo to 1%, tak se to sakra vyplatilo. (Spíš to bude víc, protože CPU má malou cache -Os a většinu doby tráví chroustáním multimédií -march=c3). Zde by samozřejmě stačilo přeloži s optimalizací jen některé aplikace, ale než se s tím zabývat, tak jsem radši nasadil gentoo a nechal přeložil vše.
2) Můj starý notebook po přechodu na arch ožil, subjektivně se zrychlil tak o čtvrtinu - start aplikací (X+KDE nabíha 10s) i odezva. Samozřejmě, že čím je CPU lepší, tím je výkonový zisk z optimalizace méně znatelný a limitem se postupně začne stávat rychlost přístupu do RAM.
No, pokud to mají dobře naprogramované, tak ty největší žrouty mají ručně napsané v assambleru, protože tak se dá docílit největší zrychlení (aspoň s gcc). A to samozřejmě kompilátor nezrychlí. Takhle to dělá xvid a x264.
Ono je to stejne jedno. To "I dnes se totiž stále kompiluje většina distribucí, i těch téměř striktně desktopových, pro i386 architekturu." je spis jen blabol - treba openSUSE ma .i586.rpm prekladane s "-march=i586 -mtune=i686".
Kompilace pro i386 neznamená, že má být program schopen běžet na starých kompech ale to, že se nepoužijí multimediální instrukce, které jsou sice rychlejší, ale mají taky o osm řádů menší přesnost (nepracují s dvojnásobnou přesností). Na počítačích se nehrají jenom hry ale (budete se divit), občas se na nich i počítá. U výpočtů v integer - což je většina utilit a bitmapové gragiky - je optimalizace pro i686 zbytečná, protože celkem nic nepřinese. Každopádně by měl o direktivách kompilátoru rozhodovat autor programu a ne distributor.
Problém s optimalizací je taky to, že ne vždy dokáže kompilér automaticky najít místa, která by se dala zrychlit různými simd instrukcemi. Zkrátka automatická kompilace není samozřejmě dokonalá - co jsem slyšel - HLAVNĚ v gcc.