Odpuzovac na hlodavce

spam na nagano.cz spam na nagano.cz
Středa Červenec 22 07:21:15 CEST 2015


-Os je optimalizace na velikost ne rychlost.

L.
--
Stručně  naklofáno na mobilu.

-----Original Message-----
From: Jan Waclawek <konfera na efton.sk>
To: HW-news <hw-list na list.hw.cz>
Sent: st, 22 Čvc 2015 2:09
Subject: Re: Odpuzovac na hlodavce

Tu dobu je nemozne posudit, pretoze to
- zavisi od stupna nastavenej optimalizacie
- zavisi od inych nastavenych prepinacov
- zavisi od verzie kompilatora (vid nizsie)
- pouzivate tam funkcie do ktorych nevidim

Rozdiely mozu byt dramaticke, ano, aj 2x aj viac.

Na druhej strane, pre Vas je to zistit resp. odhadnu velmi jednoduche -
vyhodte ten kus kodu ktory sposobuje premenlive casovanie (t.j. tu kaskadu
if-ov s delaymi, na konci slucky) vlozte toggle nejakeho pinu a pozerajte
na osciloskope.

Ak prekladate v tych roznych prostrediach s rovnakymi prepinacmi, rozdiel
bude pravdepodobne sposobeny verziou prekladaca. avr-gcc vo vseobecnosti
produkuje (produkoval) horsi a horsi kod s kazdou novou verziou az do
nejakej verzie 4.7; samozrejme to zavisi od vela faktorov, ale vseobecny
trend bol tento. Dovodom je, ze jadro optimalizacii je pre dominantne
32-bitove procesory, a nasledky vylepsovania tychto optimalizacii su pre
avr casto pesimalizujuce. Pochopitelne sa s novymi verziami opravovali
chyby starych, pridavali nove vlastnosti a nove cipy, takze nie je dobre
pausalne povedat ze sa treba drzat nejakej konkretnej velmi starej verzie.

Co sa tyka prepinacov, tak tie, ktorymi sa nastavuje "nahrubo"
optimalizacia, vyzeraju jednoducho - -O0 je bez optimalizacie, -O1 az -O3
je postupne zvysujuca sa optimalizacia na velkost kodu, -Os je
optimalizacia na rychlost. No ale za tymito prepinacmi sa skryva sada
inych prepinacov, casto so zlozitou funkcionalitou, navzajom sa
ovplyvnujuce, casto zapinajuce prave optimalizacie ktore su pre 32-bitove
procesory optimalne ale pre AVR pesimalne. Tych prepinacov je vela -
niekolko desiatok, a niektore maju este parametre - takze vyskusat ucinok
vsetkych, a najma vsetky ich kombinacie, je prakticky nemozne. No a
pochopitelne je ucinok tychto parcialnych optimalizacii zavisly na
konkretnom zdrojovom kode. Konkretna skusenost pre AVR je napriklad taka,
ze -Os produkuje dost casto mensi kod nez -O3. Ako dodatocny bonus k
zlozitosti problematiky, co je to "rychlost", je urcit v skutocnych
nesyntetickych programoch velmi, velmi tazke.

Rovnako nie je jednoduche doporucit nejaku "mikromanipulaciu", ktorou sa
prekladac prinuti vygenerovat ekvivalentny ale rychlejsi/mensi kod.
Napriklad vo Vasom pripade optimalizator pravdepodobne neuhadne, ze ta
sustava shift-or sa da nahradit maskovanim; ba dokonca niektore (prave tie
novsie) verzie mali problem optimalizovat aj tie shifty (ktore sa
mimochodom daju kaskadovat a ktore sa daju robit ako 8-bitove. Takze ak
rucne prepisete ten kod tak aby sa pouzili masky, moze vyjst rychlejsi;
toto je vsak ukazkovy priklad toho, ze sa v tom strati ten povodny
"algoritmus" resp. ten priamy odkaz na povodne HW riesenie.

Ja osobne to vsak nemam rad. Su nejake vseobecne pravidla - typu nepouzivat
zbytocne velku premennu a nepouzivat zbytocne znamienkove typy (a int je
obvykle zbytocne velky a znamienkovy) - ktorymi sa prekladacom da pomoct a
tie treba dodrziavat. Ale mikromanipulacia je podla mna v dlhodobom
hladisku kontraproduktivna (to je na dlhsiu debatu pivneho charakteru -
dojdite, popijeme, podiskutujeme). Ak mate potrebu drzat kontrolu nad
niektorym aspektom programu (napr. casovanim), napiste ho v asembleri.
Zhodou okolnosti ten vas napisat je velmi jednoduche, mozno este
jednoduchsie nez to co ste zbastlili v tom C++duine. Dalsia vec, co by ste
kazdopadne mali spravit, je, necasovat delayom ale HW timerom - ten kod
pochopitelne musi byt aj tak dostatocne rychly.

Ja viem, ze som slubil v paralelnom vlakne ze sa z arduinovskeho programu
pokusim spravit normalny, ale nemal som na to cas, preto neviem prelozit
ani ten Vas. Ale ak niekam date vysledok prekladu - staci elf - tak mozme
podebatovat nad disasemblingom trocha podrobnejsie.

wek


PS. Prosim nepouzivajte html pre pisanie do konfery, a najma ak vkladate
zdrojove texty; pozrite, ako to dopadlo:
http://list.hw.cz/pipermail/hw-list/2015-July/478367.html


_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150722/eb1770ea/attachment-0001.html>


Další informace o konferenci Hw-list