[FreeBSD] erdemes -e mindent a ports -bol?

Hajdu Zoltan hajduzoltan at bsd.hu
2001. Jan. 19., P, 12:00:59 CET


>Mert normalis programozo nem irja meg ugyanazt 18-szor. Csak PC-kben van
>harom kulonbozo gyarto, fejenkent sok-sok processzorcsaladdal es azokban
>is kulonbozo modellekkel. Maskent kell optimalizalni Athlonra es maskent
>Pentium 4-re, stb.

Mondjuk PC -re nem kellene 18x, mert olyan sok variacio nincs. A 386 es a 486 kozott nincs nagy
kulonbseg, szoval kellene 1 sima 32 bites, 1 p5, az ALU-k miatt, (k5 included) 1 p6 kihasznalva a szuperskalar
felepitest, (ez ugye jo pentiumpro, PII, Celeron, PIII - ra: ugyanaz a mag), egy MMX, egy 3dnow! meg egy k7. Max 
10 minden finomságot (k6, Cyrix MMX extensions) beleszamolva. Mivel nem az egesz alkalmazasról van szo, 
hanem csak a kritikus rutionkrol, ez nem olyan sok, ha a vegeredmenyt tekintjuk.  

>vegyuk csak a kodot. Es vegyunk egy picit bonyolultabb feladatot, pl.
>n*n-es egesz matrix determinansanak kiszamitasat (ez _gyakran_
>elofordulo muvelet 3D-s grafikaban, pl. hasznalhato arra, hogy
>eldontsuk, hogy egy pont egy sik alatt, folott vagy magan a sikon van).
>Melyik lesz hamarabb kesz es mennyivel, az asm vagy a C?
>IMHO a C legalabb 10-szer hamarabb kesz lesz.

Mivel a fentebb emlitett muvelet kozel sem olyan veszes, mint ahogy hangzik, egyaltalan
nem biztos, hogy gyorsabban megirhato C-ben mint asm-ben, vagy ha nem is ugyanolyan gyorsan, de
10x lassaban biztosan nem. Egyebkent a pelda kivállo, mivel ebben az esetben tokéletesen kihasznalhatoak
a SIMD utasitaskeszletek, de _egyik_ mai fordító _sem_ fog neked SSE vagy 3Dnow! kodot kesziteni:
sima x87 utasitasok garmadajat pakolja majd a binarisba.

>Melyikben konnyebb hibat keresni es mennyivel, az asm-ban vagy a C-ben?
>IMHO a C valtozat legalabb 10-szer konnyebben debugolhato.

Ez IMHO hozzaertes kerdese. 

>Melyiket konnyebb megertenie a csapat uj tagjanak es mennyivel, az
>asm-ot vagy a C-t?
>IMHO a C kodot legalabb 10-szer konnyebb megerteni, mint az asm-ot.

Lasd fentebb. Ha eleve asm kodert keresnek, azt fogja gyorsabban megerteni :)
Egyebkent az asm nem boszorkanysag, az abban megirt, jol dokumentalt forras is konnyen
megertheto, ellentetben nehany ember C kodjaval :)

>Melyik foglal kisebb helyet, az asm vagy a C?
>IMHO az asm kod maximum 5%-zal lesz kisebb, mint a C.

Honnan az adat? A sajat tapasztalataim mast mutatnak. Kis programoknal
szamold hozza az executable headereket meg hasonlokat, ezert ott lehet kis
elteres. 

>Melyik gyorsabb, az asm, vagy a C?
>IMHO az asm kod maximum 5%-zal lesz gyorsabb azon a processzoron, amire
>az asm kodot optimalizaltak.

Ez eliras? 50 vagy 500 %-ra gondoltal? Az adott processzorra optimalizalt asm 5%-al lenne 
csak gyorsabb mint a C? Nézzuk az elozo levelemben emlitett bitshifting vs. mul technikat:

ugyebar egy 320x200 kepernyon 256 szinnel egy pont helye a kepernyon: 320*y + x
tehat logikusan valami ilyesmi (most lehet hogy igy fejbol nem lesz 100%):

mov ax, [y]
mov dx, 320
mul dx
add ax, [x] 

csakhogy a mul nagyon lassu, 32 bites operandusok eseteben egy 486-on pl. 
30-42 clock alatt van meg. Probaljunk valami mast:

mov dx, [y]
mov ax, dx
shl dx, 8                    8 clock
shl ax, 6                    8 clock
add ax, dx               3 clock
add ax, [x]                  

cuzammen nincs tobb 20 clock-nal, s meg finomithatunk rajta: ugy valaszthatjuk
meg a regisztereket, hogy utanna kozvetlenul lehessen stosw -olni a memoriaba.
Ez 2x, azaz 100% gyorsulas IMHO, ami nem mindegy egy pixelrajzolo rutinnal, ami 
millioszor fut le percenkent. S ezt meg lehetne is utannacsinalni C-ben, de eztan jonnek
azok, amiket nem: a pentium procik U es V pipe-ja, ahol hatalmas gyorsulast lehet elerni, 
illetve hatalmas performance penalty-kat, ha nem optimalis a kod. 

Persze ezek nem kivitelezhetoek RAD eszkozokkel, le kell ulni melle es sokat gondolkozni
rajta. Valamit valamiert :)

Üdv:


Hajdú Zoltán
Miskolci Egyetem, stb, stb...  




További információk a(z) BSD levelezőlistáról