Porównanie wydajności: Asembler AT89S52 vs C na mikrokontrolerach ARM Atmela
arm w C czy 51 w asm
From: "AzaZeL" <AzaZeL_B_at_nospam_poczta.onet.pl>
Subject: arm w C czy 51 w asm
Date: Tue, 31 Jan 2006 11:23:15 +0100
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
From: "Bogdan Gutknecht" <b_gutknecht_at_nospam_interia.pl>
Subject: Re: arm w C czy 51 w asm
Date: Tue, 31 Jan 2006 11:57:52 +0100
Użytkownik "AzaZeL" <AzaZeL_B_at_nospam_poczta.onet.pl> napisał w wiadomości
news:drndqd$bt6$1_at_nospam_bgnet.pl...
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
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.
From: "Bogdan Gutknecht" <b_gutknecht_at_nospam_interia.pl>
Subject: Re: arm w C czy 51 w asm
Date: Tue, 31 Jan 2006 12:25:59 +0100
Użytkownik "Bogdan Gutknecht" <b_gutknecht_at_nospam_interia.pl> napisał w wiadomości
news:drnfrp$i16$1_at_nospam_atlantis.news.tpi.pl...
Użytkownik "AzaZeL" <AzaZeL_B_at_nospam_poczta.onet.pl> napisał w wiadomości
news:drndqd$bt6$1_at_nospam_bgnet.pl...
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
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.
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ę.
From: "AzaZeL" <AzaZeL_B_at_nospam_poczta.onet.pl>
Subject: Re: arm w C czy 51 w asm
Date: Tue, 31 Jan 2006 12:32:47 +0100
dziekuje za odpowied
AzaZeL
From: voices <voices_at_nospam_zrgnyyvpenva.pbz.ROT13>
Subject: Re: arm w C czy 51 w asm
Date: Tue, 31 Jan 2006 14:24:40 +0100
AzaZeL wrote:
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
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.
--
voices (at) metallicrain (dot) com
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: arm w C czy 51 w asm
Date: Tue, 31 Jan 2006 18:36:02 +0100
On Tue, 31 Jan 2006 14:24:40 +0100, voices wrote:
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ę.
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.
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: arm w C czy 51 w asm
Date: Fri, 03 Feb 2006 23:56:32 +0100
AzaZeL wrote:
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?
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 _at_nospam_
55 MHz.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
From: voices <voices_at_nospam_zrgnyyvpenva.pbz.ROT13>
Subject: Re: arm w C czy 51 w asm
Date: Sun, 05 Feb 2006 15:06:32 +0100
Adam Dybkowski wrote:
AzaZeL wrote:
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?
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. :-)
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.
--
voices (at) metallicrain (dot) com
From: "Piotr Wyderski" <wyderski_at_nospam_mothers.against.spam-ii.uni.wroc.pl>
Subject: Re: arm w C czy 51 w asm
Date: Sun, 5 Feb 2006 16:35:13 +0100
voices wrote:
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 ..
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
--
"If you were plowing a field, which would you rather use?
Two strong oxen or 1024 chickens?" -- Seymour Cray
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: arm w C czy 51 w asm
Date: Sun, 05 Feb 2006 21:07:57 +0100
On Sun, 5 Feb 2006 16:35:13 +0100, Piotr Wyderski wrote:
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. :-)
taaa - Reduced to on naprawde jest :-)
J.
From: "Blue" <hellblau_at_nospam_poczta.onet.pl>
Subject: Re: arm w C czy 51 w asm
Date: Sun, 5 Feb 2006 22:35:59 +0100
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.
--
> voices (at) metallicrain (dot) com
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
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: arm w C czy 51 w asm
Date: Mon, 06 Feb 2006 02:01:09 +0100
On Sun, 5 Feb 2006 22:35:59 +0100, Blue wrote:
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.
mnozenia float ? To stawiam ze '51 miala biblioteke niewiarygodnie
cudowna, a arm chyba troche skopana ..
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.
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.
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: arm w C czy 51 w asm
Date: Sun, 05 Feb 2006 23:16:11 +0100
voices wrote:
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.
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.
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 _at_nospam_ 5V przy 12 MHz (1 MIPS) czyli 8 MIPS/mW
ATMEGA8: 15 mA _at_nospam_ 5V przy 12 MHz (12 MIPS) czyli 160 MIPS/mW
AT91SAM7S64: 31,3 mA _at_nospam_ 3V3 plus 29,3 mA _at_nospam_ 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.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.