PIC vs ATMEL #2

Nagy Endre gumo at lucifer.kgt.bme.hu
Wed Feb 11 10:31:08 CET 2004


> > A problema ott van, hogy asm-ben irtak eredetileg. Ha C-ben irtak volna,
> > most nem kellene atirni.
>
> Az biztos, mert nem is lett volna termek az elozo verziobol sohasem.
> A 80C552 verzio 16 masodpercig gyujtott adatot (szabvany) kb 10 masodpercig
> analizal. C-ben percek lennenek, de valoszinu hogy bele sem fert volna a

Ezt most hiszed, vagy tudod? Kiprobaltad?

> Kuldhetek mintat. Kivaloan dokumentalva van. (Mibol gondoltad hogy nincs???)

Ha kivaloan dokumentalva lenne (nem az asm forras, hanem maga a program),
akkor egy kezdo C programozo is lekodolhatta volna.

> Ennek ellenere nem sikerult meg senkinek. Ismetlem, tobb 10000 sor.

Asm-ben igen. C-ben mennyi lenne, ha nem asm-bol kene atirni?
Ekkora projectet asm-ben irni azt ugy hivjak, hogy biztositott munkahely.

> Mas esetekben is hasznos az asm. Tudom, a ledvillogtatot is sokan
> valami embedded linuxos kartyaval csinalnak... Jo dragan.

Tulzol, ilyet senki nem mondott. Epp arrol beszelunk, hogy a C kozel
optimalis asm-et general, nem pedig embedded linuxot.

> > Hogy rovid, szemleletes es hordozhato legyen. Egyebkent ha eletbevago egy
> > adott asm felhasznalasa, beteheted egy file-ba, a linker majd elintezi. Vagy
> > beteheted egy libbe is.
>
> En inkabb forditva probaltam, asm-bol akartam C-t hivni.
> Nem mukodik, bar meg lehetne oldani ha nagyon kene...

Megoldhato, de minek? C-be szokas asm betetet tenni olyan helyeken, ahol
az elengedhetetlen. Ha az IIR szurodnel par utasitas kulonbseg mar
halalos, akkor beteheted asm-be.

> Valoban, 32 bites procikra neha egesz jol optimalizal.
> Azert a kezi optimalizaciot nem tudja utolerni.

Neha meg azt is.

> Es amig nem talaljak fel a mesterseges intelligenciaval mukodo
> forditokat, erre nincs is semmi esely.

Persze, sokkal jobban kene ismerni a forditonak a programozo szandekat, de
egyreszt ezt a forditoval lehet sejtetni, masreszt nagyon durva
heurisztikak vannak. Pl. egy integer 8-cal osztasa szo nelkul shiftelesse
optimalizalodik, ahogy asm-ben is tennenk. Vagy pl. felcserelodik a
kulso-belso ciklus, ha ugy tobb cache hitet general. Ehhez asm-ben mar
tapasztalt programozo kene.

> A 8 bites procikra mind nagyon rosszul forditanak.

Szerintem egyaltalan nem.

> Irtam is a listara, probaltam kideriteni hogy hogyan kell atadni a
> parametereket a C fuggvenynek ha asm-bol hivom. Meglepo modon ez az
> optimalizacio szintjetol is fugg. (ha kikapcsolom az optimalizaciot,
> regiszterben varja, ha bekapcsolom, a memoriaban, erdekes...)

Vannak ezt szabalyozo parameterei is a forditonak.

> A generalt kodot barmikor erolkodes nelkul megverem, ennel mindig sokkal
> jobbat szoktam irni.

Sokkal jobbat szerintem nem lehet.

> De ha mar annyira jonak tartod a C forditokat, irj legyszives egy 24 bites
> koefficiensekkel es nodeokkal es 48 bites akkumulatorral dolgozo masodrendu
> IIR savzaro szurot, es hasonlitsuk ossze a teljesitmenyet az asm
> verzioval. De akar lehet 16/32 bites is, az elso verziom nekem is olyan
> volt, nem akarlak nagyon mexivatni a 24 bittel, mert mire azt C-ben
> lekodolod, en 3x megirom assemblyben.

A pontos korulmenyeit a dolognak nem reszletezted, de legyen:
http://www.kgt.bme.hu/nagye/iir/

Megjegyzesek: a fordito hivasi kornyezet hijan nem tudott tokeletesen
optimalizalni. Pontosabban tudott, csak akkor eldobta az egesz nem
hasznalt algoritmust, ezert a ki- es bemenetet le kellett horgonyoznom a
memoriaba static modositoval. Konkret kornyezetben lehetne
regiszterekben. Magat az algoritmust a main()-be irtam, mert amig
konkretan nem hasznaljak fuggvenykent, addig referencia hijan a gcc nem
tudja inline-ositani, es a legrosszabb esetre keszul, minden regisztert
ment. A __ kezdetu hivasok a libc-be mutatnak, ami tobbnyire az atmel
appnotes-on alapul, pl. 32 bites elojeles szorzas.

Tettem bele debug infot (hogy ronda legyen :), de a lenyeg a prologue utan
van.

Kivancsi vagyok, hogy hasonlo korulmenyek kozt tenyleg raversz-e sokszaz
szazalekot asm-ben, akar meretre, akar futasidore.

> Teljesen termeszetes, hogy az algoritmus bizonyos reszei tobb procira
> meg vannak irva, es a masik forrast forditva 30% teljesitmeny novekedes
> illetve csokkenes merheto! Mind a ketto C forras. Latatlanban is biztos

Elofordul. Sejtetni lehet a C forditoval, hogy mit varunk tole.

> vagyok benne, hogy asm-be atirva meg nagyobb teljesitmeny lenne elerheto.

Marginalis novekedes talan lenne.

> Es ha mar amugy is minden procira mas C forras kell, nem sok ertelme van...

De, hogy azonnal mukodik masutt is, legfeljebb 30%-kal lassabban. Nem
ennyin szokott mulni egy project. Ha meg ennyin, akkor nem kesz modulokbol
lapatoljuk ossze, hanem odafigyelunk ra.

> Ha a forditok valoban olyan jo kodot tudnanak generalni, hogy azon
> lenyegesen mar nem lehetne optimalizalni, akkor en is magasszintu
> nyelvben programoznek mindig...

Mit ertunk lenyegesen alatt? 10s helyett tobb perc az oke, de ilyet a C
nem tesz.

> A valodi sebessegeket pedig azonnal osszehasonlitjuk, amint kesz a C-ben
> irt szurod. En sajnos nem fogom tudni futtatni, mert a C verzio biztos nem
> lesz kesz a szuro idoablakaban, de majd valami JTAG emulatorral :) kimerjuk.

Hat jo, merd, hasonlitsd...

> Aggaszto hogy ilyen tevhitek terjednek a listan, egyesek mar nem is
> tudjak hogy egyaltalan mi az hogy assembler...

Milyen tevhitek? Hogy egy jo C fordito egy jo asm programozoval vetekszik?

> > Effele kompromisszumok nelkul is hasznalhatnal hordozhatobb, tomorebb
> > programnyelvet.
>
> Ez mar egy altalanosabb, igy nehezebben cafolhato kijelentes :)
> Pontosan milyen nyelvre gondoltal?

A p-code-hoz kozeli nyelvek pl. eleg hatekonyak minden korrekt stack-kel
rendelkezo procin.

> Itt jegyeznem meg, hogy az AVR procik furcsasagai es kellemetlen
> meglepetesei, ha ugyanarra gondolunk, mind egy-egy nehany soros
> makroval egyszeruen es tokeletesen eltuntethetok...
> (Erdekes hogy erre csak en jottem ra)

Erdekes, hogy mekkora onbizalmad van...

Na megyek, melo van.

Gumo



More information about the Elektro mailing list