kodtabla
Moczik Gabor
progzmaster at freemail.hu
Tue Mar 22 11:56:40 CET 2005
Rancz Lajos wrote:
> while (!Felt1 && Felt2 && Felt3 && !Felt2);
> if (Felt1)
> {
> }
> else
> {
> }
> while (Felt1 && Felt2 && ... && Felt5);
> if ()
> {
> }
>
> Na ez van kb 15-ször (most épp ilyet csinálok), itt ha egy kicsit változik valamelyik feltétel, vagy while akkor a fordító simán Bool algebrával kisakkozza, hogy mit kell csinálni, hogy kell összevonni, mit mivel (kódcsökkenés 5200 bytról 2300ra). Én is ki tudom számolni ha akarom, de mivel én végig tudom csinálni kb. 20-25 perc alatt, a fordító pedig 20 másodperc alatt, a villany pedig kb. 30 Ft/kWh az én mérnöki munkabérem pedig 8-10 ezer/óra, ezért nem fogom én csinálni. Nem Kínában vagyok, hogy számítson, hogy a termékemben egy 750 Ftos vagy egy 1000 Ftos alkatrész van. Mindegy. Soha nem fogja behozni az árát, ha leállok tökölni, viszont kell tegnapra.
Csak otletkent:
Feltetelezem, hogy a feladat a feltetelek kulonbozo kombinacioit hasonlitja
ossze. Ezt en ugy gyorsitanam, hogy kiertekelnem elore a felteteleket egy
eleg szeles valtozo bitjeibe, utana egy switch/case utasitassal agaztatnam
el, egybol a kivant reszre ugrana.
Nem mukodik, ha a kovetkezo vizsgalatot az elozo erdemenye is
befolyasolhatja. Kis overhead a bitek feltoltese (hint: struct bitfields),
de lehet hogy nyersz vele annyi kodmeretet/sebesseget a kiertekelesnel.
Nem tudom, hogy a sokat emlegetett common subexpression elimination csak egy
fuggvenybe rakja a kozos felteteleket, igy csak kodmeretet csokkent,
futasidot meg egy call hivassal novel, vagy kiertekeli egy lathatatlan
valtozoba, es utana ezt hasznalja. Nyilvan utobbinak lenne ertelme, hacsak
nem kodmeretre es memoriara kell optimalizalni.
Van meg egy peldam, ahol az optimalizalo nem fog segiteni:
pl. PIC-en a CARRY-be kell tenni az RD7 portbitet, ciklusban hivott
fuggveny, kritikusabb helyen inline-olt, hogy egy call-al is gyorsabb
legyen, tehat szamit hany utasitasbol jon ossze.
Ha C-ben azt irod hogy CARRY=RD7, akkor a PICC generalni fog egy minimum 4
utasitasbol allo kodot, amivel az RD7 bitet teszteli (btfsc/btfss), es ennek
megfeleloen allitja be a carry-t. En meg ismerem a hw-t, tudom, hogy az
adott helyzetben nem szamit a PORTD tobbi bitje, es egy RLF utasitassal
egybol a carryba lehet shiftelni az RD7-et.
Tipikusan bitfaragas, ugy nez ki, mint amit a forditonak tudnia kellene,
csak az a baj, hogy nem ismeri a hardver mukodeset.
Szoval barki barmit mond, nem art ismerni a hardvert, meg latni kell, mi az
amit egyaltalan eselye van a forditonak optimalizalni.
--
((( Móczik Gábor )))--((( hu <- DOT <- freemail <- AT <- progzmaster )))
((( ICQ=171823363 )))--((( Autos levlista: progzmaster.homelinux.org )))
More information about the Elektro
mailing list