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