Optimalizace kodu

Josef Štengl ok1ced@nagano.cz
Středa Leden 3 20:45:08 CET 2007


No jelikoz je C nizkourovnnovy programovaci jazyk tak bych rekl ze v
prvnim pripade kopirujete pointery na dane struktury a v druhem pripade
celou strukturu, coz znamena kopirovani jednoho prvku ku 64
prvkum. 

Architekturu sice neznam, ale pochybuji ze to ma neco jako DMA a tak to
kopiruje otrocky po prvku o velikosti registru procesoru (zbernice, dle
toho co je mensi).

V tom foru nemenite strukturu, jde jen o linearni prenos dat. Jestli je
podobny architektonicky "humus" jako '51 tak vyzkousejte optimalizovat
promenne, aby se pro prenos pouzivaly primo registru procesoru. Vhodnou
optimalizaci se da casova narocnost snizit az na 32% puvodniho casu
(no bylo to i mensi :-) a to jen optimalizaci promennych (jednalo se 
o vypocet CRC16). Neni treba asembler, jen je treba premluvit kompilator 
aby to prekladal tak jak chcete. Jelikoz nepouzivate KEIL, tak to mozna
i zvladne beze prilisneho premlouvani. 
ced


On Wed, Jan 03, 2007 at 03:31:37PM +0100, Michal HW wrote:
> Pracuji na vetsim SW v C - HT-Soft + 18F8722.
> 
> Pokud presunuji structury z vnitrni RAM do externi, kompilator z toho udela 
> par radku kodu:
> 
> Structura_Externi=Structura_Vnitrni;
> 
> 
> Ale pokud totez udelam s polem rucne:
> 
> for (Pocet_B=63;Pocet_B!=255;--Pocet_B) {
>     Data_Externi[Pocet_B]=Data_Vnitrni[Pocet_B];
> }
> vznikne monstrozni kod. Pokazde se pocita HW ukazatel(TBLPTR) pro externi a 
> vnitrni pamet.
> 
> Lze to optimalizovat v C kodu bez nutnosti zmeny datovych structur?
> Nebo mam zmenit pole na structury?
> Jak to optimalizuji jine kompilatory?
> Michal Gregor
> 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 



Další informace o konferenci Hw-list