Sari la conținut
ELFORUM - Forumul electronistilor

Comparatie performante PIC - AVR. Scor 1059 us la 130 us.


simplex

Postări Recomandate

Comparatie performante PIC - AVR. Scor 1059 us la 130 us.

 

De obicei comparatiile PIC - AVR, pe care le citesc pe forumuri, mereu se incheie la egalitate, participantii la discutie nereusind sa declare un cistigator net.

 

Totusi, recent a sarit un iepure de unde nici nu ma asteptam.

Cautind informatii legate de uControllerul 8051 enhanced, am gasit un site chinezesc care compara performantele 8051-ului produs de ei cu cele ale unui PIC si AVR avind caracteristici asemanatoare.

Detaliile testului se gasesc aici: http://www.stc-51.com/comparing.php

 

Involuntar insa, este comparat de fapt si PIC-ul cu AVR-ul iar din tabelul, de la adresa citata mai sus, rezulta ca PIC-ul pierde clar la viteza in fata AVR-ului, cistigind insa, dar nu cu mult, la lungimea codului, fisierul executabil pentru PIC fiind mai scurt decit cel echivalent rulat pe AVR.

 

Tabel de comparatie PIC - AVR

PIC16F77 ----- 12MHz - 1059 us - 132 octeti cod - 105 octeti date - MPLab IDE V8.63

ATMEGA164P - 12MHz - 130 us - 198 octeti cod - 100 octeti date - AVR Studio 4.18

 

Asta ar insemna ca AVR-ul este de 8 ori mai rapid ca PIC-ul lucru care arunca in aer egalitatea dintre cele doua, despre care se vorbeste atit.

 

Deoarece pe elforum exista atit utilizatori de PIC cit si de AVR, testul chinezilor poate fi repetat usor si confirmat sau infirmat. Ar fi interesant de vazut cit de corecte sunt rezultatele prezentate in tabelul de mai sus.

 

Programul executat pe cele doua uControlere este:

 

typedef unsigned char uchar;

uchar str1[50],str2[50];

 

void main(void)

{

uchar i,t;

 

TRISB = 0x00; //for PIC

//DDRB = 0x01; //for avr

i=0;

while(1)

{

//begin

PORTB = ~PORTB; //for PIC and AVR

//P1 = ~P1; //for stc12c5a16ad and at89c55wd

for(i = 0; i < 50;i ++)

{

str1 = i;

str2 = 255 - i;

}

for(i = 0;i < 50;i ++)

{

t = str1;

str1 = str2;

str2 = t;

}

//end

}

}

 

Sursa: http://www.stc-51.com/comparing.php

Link spre comentariu
  • Răspunsuri 17
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • svm86

    4

  • matache

    4

  • Liviu M

    3

  • simplex

    3

Top autori în acest subiect

PIC16f77 are CPU Speed (MIPS) 5 la 20Mhzatmel are Up to 16 MIPS Throughput at 16 MHz1. Ruland ambele la 12Mhz, PIC-ul pleaca din start in dezavantaj.2. Compilatorul poate ajuta, in link este scris "MPLab IDE V8.63" care nu este un compilator! 3. PIC-ul ales nu este foarte performant. Are doar 39 instructiuni. Atmel... 131!Nu sunt in un fan al produselor microchip, dar lucrez mult cu ele.

Link spre comentariu

Nu sunt in un fan al produselor microchip, dar lucrez mult cu ele.

Atunci, cind vei avea ceva timp liber, ruleaza programul test de mai sus pe PIC-urile care iti sunt la indemina si folosind optimizarile cele mai nimerite si apoi spune ce rezultate ai obtinut.
Link spre comentariu

Nu sunt in un fan al produselor microchip, dar lucrez mult cu ele.

Atunci, cind vei avea ceva timp liber, ruleaza programul test de mai sus pe PIC-urile care iti sunt la indemina si folosind optimizarile cele mai nimerite si apoi spune ce rezultate ai obtinut.
Voi face testul pe PICurile pe care le am disponibile. Dar voi face sa lucreze la aceeasi viteza. 12mips pentru PIC inseamna 48Mhz :da Luni voi reveni cu teste.
Link spre comentariu

Am facut o simulare cu un pic24f16ka102, este pe 16 biti procesorul.Are mai putine instructiuni decat atmelul (vreo 70 si ceva). La prima incercare am reusit sa scot 223usec, ruland cu 12MIPS (24Mhz).Compilatorul folosit CCS. Ma uitam prin codul produs si am ramas surprins cate intructiuni foloseste sa faca un SWAP cu toate ca are instructiune dedicata.(SWAP Wn Wn = Byte Swap Wn) - dezamagit de compilator pentru ca foloseste instructiune aici.Am ales procesorul asta pentru ca are mai multi registrii de lucru. Atmelul ala are 32. Ceea ce ii da posibilitatea sa salveze multe variabile, si sa le acceseze in o singura instructiune.O experienta placuta. Tu ce rezultate ai obtinut? si cu ce ai testat?

Link spre comentariu

Tu ce rezultate ai obtinut? si cu ce ai testat?

Deocamdata nu am facut proba. Voi lasa sa mai treaca ceva timp pina se acumuleaza citeva teste facute de altii. Nu as vrea ca tot eu care am deschis subiectul sa vin apoi cu diverse evaluari de viteza intrucit asta ar insemna ca imi raspund singur ceea ce nu este tocmai bine.
Link spre comentariu
:) pai deja comparam mere cu pere.E practic imposibil sa gasesti un pic cu un echivalent avr astfel incat sa aibe sanse egale in orice aplicatie. nu degeaba sunt declarati grosso modo la egalitate in multe teste. daca nu ar fi asa nu ar exista pe piata cel din urma la un asemenea test. important e sa le exploatezi eficient arhitectura pentru a obtine ce vrei. restu sunt eternele batalii cum este si cea intre windows si linux care nu-si are sens atat timp cat nu vizeaza acelasi public. windows vizeaza e cei ce nu vor sa faaseasca o solutie ci sa le fie sugerata de altii. linux este pentru cei ce sunt dispusi sa-si bata mintea cu calculatorul.
Link spre comentariu

In acel test s-a exploatat faptul ca AVR8 are trei registrii index, fiecare cu incrementare automata (x+, y+, z+) pe cand PIC8 doar unul, fara incrementare automata.AVR8 are 32 registrii de lucru, PIC doar unul.Ciclul de intructiune la AVR8 este 1*Tosc, la PIC este 4*Tosc.Singurele lucruri ce ma mai tin la PIC8 sunt:1) Executa instructiuni read-modify-write direct cu SRAM-ul sau cu porturile, pe cand AVR8 trebuie sa aduca variabila in registru, s-o modifice si s-o puna inapoi in memorie.Acelasi cod:****AVR8****LDS R16,varCOM R16STS var,R16****PIC8****COMF var,F2) Selectarea destinatiei intre registru si SRAM (sau port).Acelasi cod:****AVR8****LDS R16,var1DEC R16LDS R17,var2SUB R17,R16STS var2,R17****PIC8****DECF var1,WSUBWF var2,FTotusi, aceste avantaje sunt eclipsate de durata mai mare a ciclului de instructiune (cu pana la 4 ori) la PIC8.Astfel, in primul caz 5-4 ciclii, in al doilea caz 8-8 ciclii (AVR8 - PIC8).Oricum, aud ca la PIC16 si PIC32 deja altfel stau lucrurile, PIC-ul fiind in avantaj.

Link spre comentariu

Cati dintre voi scoateti si ultima picatura dintr-un microcontroller? Sau va chinuiti sa sa optimizati codul in asa fel incat sa "transpire" controllerul executandu-l?

Eu sincer nu. Daca mi se pare ca am mai multe de spus decat poate controllerul, iau unul mai mare.

Mai ales ca programand in C imi e greu sa fac o comparatie ca cea a lui 10vid (care e, probabil, singura care ar putea genera o migrare sre alta arhitectura).

Asa ca la mine alegerea PICurilor a fost dictata nu de un comparativ de performante, ci de:

- de asta am auzit primul/mai mult

- mi-a fost mai usor sa-l procur

- mi-a fost mai clar ce sa aleg (selectorul de produse/cataloagele vanzatorilor mi s-au parut mai clare)

- scule de dezvoltare suficient de gratis si de bine integrate.

Asa ca, fara suparare, mie cascada asta din ultima perioada de topcuri "comparatie x cu y, e ? mai bun" mi se pare pierdere de vreme.

Link spre comentariu

I) Tip procesor - AtmelAT89LP428 pe 8 biti, care este un 8051 accelerat (tip nou)

Frecventa de test - 12 MHz

Timp de rulare al codului scris cu verde - 251 usec

Precizari suplimentare - test executat pe simulator Keil apartinind mediului de dezvoltare Keil uVision4.

 

II) Tip procesor - AtmelAT89C2051 pe 8 biti, un 8051 standard (tip vechi)

Frecventa de test - 12 MHz

Timp de rulare al codului scris cu verde - 2006 usec, de 8 ori mai mare ca in cazul (I).

Precizari suplimentare - test executat pe simulator Keil apartinind mediului de dezvoltare Keil uVision4.

Link spre comentariu

Microcontrollere populare pe 8 biti8051 standard -> PIC -> AVR -> 8051 acceleratWORST >--------->------->--------> BEST8051 standard (12 cicli / instructiune) este un CISC classic. Are set bogat de instructiuni, multe lucrind direct cu memoria. Ruleaza mnemonicile in multi cicli. Este microprogramat, deci lent. Programele scrise pentru 8051 sunt compacte.PIC (4 cicli / instructiune) este un CISC cu set redus de instructiuni (ca la RISC) lucru care ii permite sa-si execute mnemonicile in mai putin timp si drept urmare mai repede decit 8051 standard.Instructiunile complicate care ar necesita multi tacti sunt scoase. Codul este ceva mai mare ca la 8051.AVR (1, 2 cicli / instructiune) este un RISC cu set bogat de instructiuni (ca la CISC). Desi are multe mnemonici, arhitectura sa este de tip Load – Store (cu memoria lucreaza doar comenzile Load, Store si nimic altceva), ceea ce il apropie cel mai mult de conceptul RISC modern. Programele sunt sensibil mai lungi ca la 8051.8051 accelerat (1, 2 cicli / instructiune) este un CISC cu viteza de RISC avind avantajul eliminarii setului obligatoriu Load – Store existent la AVR. Aceeasi lungime a codului ca la 8051 standard.

Link spre comentariu

PIC (4 cicli / instructiune) este un CISC cu set redus de instructiuni (ca la RISC)

uChip vinde picurile pe post de RISCuri.

Microcontroller Core Features:• High performance RISC CPU

Link spre comentariu

Conceptul de RISC este foarte ambiguu, motiv pentru care fiecare il interpreteaza cum vrea.

In terminologie moderna notiunea de RISC nu mai are o semnificatie clara fiind inlocuita cu cea de arhitectura LOAD - STORE.

vezi: http://en.wikipedia.org/wiki/Reduced_in ... _computing

PIC-ul nu este Load - Store, in mod clar.

 

Unii zic ca RISC ar fi un CPU cu putine instructiuni care se executa rapid dar nu neaparat intr-un tact sau doi.

Altii spun ca RISC ar fi un procesor cu instructiuni care ruleaza in putini tacti (unu, doi) chiar daca numarul lor nu este mic.

 

PIC-ul are putine instructiuni care se executa insa in 4 tacti nu in unul asa cum ar trebui la un RISC.

Link spre comentariu

PIC-ul are putine instructiuni care se executa insa in 4 tacti nu in unul asa cum ar trebui la un RISC.

Pe undeva pe pagina aia de la wiki pe care ai postat-o mai sus scrie de cicli de acces al memoriei la executia unei instructiuni, nu de numarul de tacti necesari unei instructiuni.

The term "reduced" in that phrase was intended to describe the fact that the amount of work any single instruction accomplishes is reduced—at most a single data memory cycle—compared to the "complex instructions" of CISC CPUs that may require dozens of data memory cycles in order to execute a single instruction

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări