Porównanie wydajności: Asembler AT89S52 vs C na mikrokontrolerach ARM Atmela

arm w C czy 51 w asm





Poprzedni Następny
Wiadomość
Spis treści
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



Poprzedni Następny
Wiadomość
Spis treści
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.


Poprzedni Następny
Wiadomość
Spis treści
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ę.


Poprzedni Następny
Wiadomość
Spis treści
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



Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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.


Poprzedni Następny
Wiadomość
Spis treści
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.

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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.


Poprzedni Następny
Wiadomość
Spis treści
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



Poprzedni Następny
Wiadomość
Spis treści
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.


Poprzedni Następny
Wiadomość
Spis treści
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.