arm w C czy 51 w asm

Jan 31, 2006 12 Replies

witam ostatnio zastanawiam sie czy np program pisany w asemblerze na np AT89S52 z kwarcem 24mhz bedzie szybszy od programu pisanego w C na jakis mikrokontroler z serii ARM atmela z maksymalnym kwarcem? wydaje mi sie ze ARM bedzie szybszy ale chcia³bym poznaæ opinie grupowiczów na ten temat



Pozdrawiam AzaZeL



U¿ytkownik "AzaZeL" <AzaZeL snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomoœci news:drndqd$bt6$ snipped-for-privacy@bgnet.pl...

Bêdzie szybszy. Poza tym zawsze mo¿esz krytyczne czasowo sekcje napisaæ w asemblerze. Ma³o korzystnie wygl¹da wywo³ywanie funkcji, dlatego lepiej nie zagnie¿d¿aæ ich zbyt bardzo. Sam musia³em cztery razy powtórzyæ ten sam kod, aby unikn¹æ wywo³ywania funkcji w przerwaniu. Ale nie sk³oni³o mnie to do powrotu na asembler.

U¿ytkownik "Bogdan Gutknecht"

Znaczy siê chcia³em powiedzieæ, ¿e szybszy bêdzie ARM w C ni¿ 51 w asemblerze. Nawet szybszy by³by AVR ze wzglêdu na to, ¿e potrzebuje tylko jeden cykl zegara na instrukcjê.

Obecne kompilatory mają na tyle rozwinięte algorytmy optymalizacji, że bardzo często potrafią na podstawie języka C wygenerować kod znacznie szybszy, niż analogiczny napisany w assemblerze przez nawet bardzo doświadczoną osobę. Oczywiście, krytyczne pod względem wydajności funkcje zawsze można zaimplementować wstawkami w asm. Pisząc w języku C także jednak trzeba myśleć o optymalizowaniu - przerażające jest, ile osób nie wie na przykład co to są funkcje typu inline.

Porównywanie tutaj wydajności C51 i ARM nie ma sensu, ponieważ to zupełnie inne światy.

na jakims Pentium, o ile "doswiadczona osoba" nie ma pojecia o niuansach kolejek, cache, pipelineningu itp.

Arm chyba tych klopotow nie ma, a 51 to z kolei klopot dla kompilatora. Co szybsze .. stawiam na arm, ale nielicznych programach kompilator moze dac d*.

J.

ARM bedzie szybszy. Obecne kompilatory C bardzo dobrze optymalizuja kod wynikowy tak ze nie jest on znaczaco gorszy niz wysmazony recznie w asemblerze. Natomiast porownanie samego jadra ARM z np. rozkazami warunkowymi z dziadkiem '51 juz wyglada niezle. Dodatkowo AT89S52 z kwarcem 24MHz ma wydajnosc 2 MIPS (najkrotszy rozkaz trwa 12 taktow zegara) :-( a AT91RM9200 (ARM Atmela) taktowany zegarem 200 MHz ma wydajnosci 200 MIPS (wiekszosc rozkazow 1-cyklowa) czyli 100x wieksza. :-)

Wniosek: jezeli potrzebujesz wydajnosci to zastosuj ARMa i sie nawet nie zastanawiaj dluzej. Nawet stosunkowo tani AT91SAM7S64 wydoli 55 MIPS @

55 MHz.

Racja, ale też nie można bezpośrednio porównywać MIPS'ów procesorów RISC i CISC - czasem, aby dokonać tego co robi jedna instrukcja procesora CISC, procesor RISC potrzebuje kilku instrukcji .. Co oczywiście nie zmienia faktu, że ARM wypada nieporównywalnie lepiej.

Akurat 8051 te¿ trochê przypomina RISC, bezpo¶rednio na pamiêci niewiele da siê zrobiæ, zazwyczaj trzeba przes³aæ do akumulatora, co¶ policzyæ i odes³aæ wynik. :-)

Pozdrawiam Piotr Wyderski

taaa - Reduced to on naprawde jest :-)

J.

z tym "nieporównywalnie lepiej" to chyba nie jest do koñca prawda. Ostatnio ten sam fragment programu napisany w keilu C testowa³em na ARMie analoga ADuC7026 - 45Mhz i 51 Silabs(Cygnal) 8051F120 - 100Mhz. Program czyta³ dane z przetworników ADC przelicza³ kilka filtrów i generowa³ sygna³y przez DACe. W sumie ok. 60 mno¿eñ typu float. W tle chodzi³y ró¿ne przerwania. To co 51 zrobi³a w 410us ARM zrobi³ w 390us. Niby szybciej, zegar te¿ ma wolniejszy, ale prawdê mówi±c spodziewa³em siê czego¶ lepszego. Porównuj±c cenê i to ile siê musia³em nachrzaniæ z otoczk± programu dla ARMa to dla prostego przetwarzania sygna³ów wolê jednak 51. Blue

Dlatego podstawowe powinno być porównanie możliwości samego jądra procesora. Dla '51 dodanie kilku liczb wykorzystywanych często w pętli to mordęga - każdą trzeba przepchnąć przez akumulator i spowrotem do rejestru. ARM zrobi to bez bólu na dowolnym z kilkunastu rejestrów (ma

16 ale w to się wlicza SP i PC). Jak robisz operacje na liczbach 16- lub 32-bitowych to już w ogóle '51 przegrywa z kretesem a AVR jest niewiele lepszy. Natomiast w ARMach zdecydowanie najbardziej podobają mi się rozkazy warunkowe: otóż prawie każdą instrukcję można wykonać (lub nie) w zależności od stanu kilku flag procesora, do tego dla [prawie] każdej instrukcji można określić, czy ma zmieniać flagi procesora, czy w ogóle ich nie ruszać. Niby prosty pomysł, ale zabiera kilka bitów z kodu każdego rozkazu i dlatego dopiero w 32-bitowym ARMie takie rozwiązanie jest możliwe. Kod wynikowy dla ARMa jest najczęściej dłuższy niż dla AVRa czy '51 bo rozkazy mają po 32 bity, ale jego wykonanie zabiera znacznie mniej czasu właśnie ze względu na duże możliwości jądra (nawet porównując z 1-cyklową '51 Cygnala).

Przytoczone tu wcześniej przez Blue porównanie wydajności ARMa chodzącego z zegarem 2x niższym niż '51 a i tak wykonującym szybciej ten sam algorytm całkowicie upewnia mnie w przekonaniu, że przyszłość należy do ARMów (pozostaje tylko kwestia ceny). Nawet tych w małych obudowach - w końcu jeżeli nie potrzeba kilkudziesięciu MIPSów to zawsze można zejść z zegarem ku oszczędności poboru mocy. Bo akurat jądro ARMa ma bardzo dobry stosunek wydajności do pobieranej mocy (MIPS/mW) porównywalny nawet z DSPkami. BTW: Niektórzy producenci liczą odwrotnie, w mW/MHz.

Przeliczając z dokumentacji procesorów Atmela: AT89S52: 25 mA @ 5V przy 12 MHz (1 MIPS) czyli 8 MIPS/mW ATMEGA8: 15 mA @ 5V przy 12 MHz (12 MIPS) czyli 160 MIPS/mW AT91SAM7S64: 31,3 mA @ 3V3 plus 29,3 mA @ 1,8V przy 50 MHz (50 MIPS) czyli 320 MIPS/mW

Warto przypomnieć to co wyżej, czyli że dodatkowo MIPSy '51 są dużo "słabsze" niż MIPSy ARMa.

mnozenia float ? To stawiam ze '51 miala biblioteke niewiarygodnie cudowna, a arm chyba troche skopana ..

Eeee .. czy to aby na pewno jest "zwykla" 8051, tzn pominawszy predkosc ? Rzeklbym ze DSP to juz jest to zastosowanie gdzie '51 staje sie koszmarem ..

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required