Kompilatorer för Cortex M4
Kompilatorer för Cortex M4
Jag håller på och utvärderar hur bra lite kod kör på Cortex-M4-platformen. Har hittills testat med NXPs LPC4337 och Code Red-miljön. Funkar ok, och går att köra på Mac, vilket jag tycker är bra.
Code Red använder sig av gcc om jag fattat det rätt, och nu funderar jag på om man kan förvänta sig markant bättre (snabbare) prestanda av någon annan kompilator? Om inte, så nöjer jag mig med Code Red så länge, även om Eclipse-miljön känns osmidig på Mac (dock bättre än att springa iväg till någon annan dator om det inte behövs).
Code Red använder sig av gcc om jag fattat det rätt, och nu funderar jag på om man kan förvänta sig markant bättre (snabbare) prestanda av någon annan kompilator? Om inte, så nöjer jag mig med Code Red så länge, även om Eclipse-miljön känns osmidig på Mac (dock bättre än att springa iväg till någon annan dator om det inte behövs).
-
- Inlägg: 81
- Blev medlem: 13 april 2010, 14:40:04
- Ort: Stockholm
Re: Kompilatorer för Cortex M4
Jag kör Texas Cortex M4 och IAR. Det är väl något av en vanesak men jag trivs bra med den kompilatorn och debug miljön.
Det går att väcka CPUn med realtidsklockan men just den detaljen verkar inte debug miljön kunna hantera.
Det går att väcka CPUn med realtidsklockan men just den detaljen verkar inte debug miljön kunna hantera.
Re: Kompilatorer för Cortex M4
Markant bättre lär det inte bli, bättre att man skriver "markant" bättre kod istället.
Re: Kompilatorer för Cortex M4
Jag trodde allt fler strävade efter att just använda GCC för att inte hamna i ett dilemma där stora programmeringsprojekt blir obrukbara efter ett antal år när kompilatorn inte längre uppdateras. Sedan är väl framförallt idag datorkraft en mindre kostnad jämfört med utveckling och underhåll hos många projekt.
Re: Kompilatorer för Cortex M4
Tack för hjälpen! Jag har ingen erfarenhet från ARM tidigare, men däremot från DSP-platformar som TI C67x, Motorola 56k och SHARC, och där kan det vara stor skillnad mellan olika kompilatorversioner iaf. Även på en vanlig PC är det stor skillnad mellan t.ex. GCC och Intels kompilator för signalbehandlingsgrejer. I det fallet handlar det mycket om SSE gissar jag, men det kanske är olika hur kompilatorerna för ARM fixar DSP-instruktionerna för Cortex M4 också tänkte jag.
Går det t.ex. att skriva C-kod som resulterar i 32x32->64 MAC-instruktionen?
Går det t.ex. att skriva C-kod som resulterar i 32x32->64 MAC-instruktionen?
Re: Kompilatorer för Cortex M4
Det är framförallt signalbehandling jag är intresserad av borde jag tillägga.
Re: Kompilatorer för Cortex M4
SIMD instruktionerna får du nog hantera själv.
Finns macros definerade för dessa i någon core.h fil..
Finns macros definerade för dessa i någon core.h fil..
Re: Kompilatorer för Cortex M4
SIMD är inte så intressant då de enbart funkar på 16- och 8-bitarstal. Mac-instruktionen med full precision borde man ju kunna uttrycka i C däremot kan man tycka, men det kanske är lite överkurs för kompilatorerna. Kanske finns macron för de instruktionerna också?
Re: Kompilatorer för Cortex M4
Finns nog, annars så gör man ett eget lite lätt. kolla i core_cmInstr.h t.ex
Re: Kompilatorer för Cortex M4
Menar du med inline assembler? Många kompilatorer får stora problem att optimera om det kommer inline assembler mitt i C-koden tyvärr, men det är också ett område där kompilatorer skiljer sig åt, så om någon har erfarenheter av detta så är jag nyfiken! Ofta är det bättre om det finns några intrinsics som kompilatorn vet vad de gör, och det är här jag gissar att mer specialiserade kompilatorer skulle kunna vara bättre än gcc.
Re: Kompilatorer för Cortex M4
Jag kör Linaros GGC distribution och den genererar MAC instruktioner, både för FPUn och heltal.
Vad är du ute efter lite mer specifikt? Är du osäker är det bara att köra en disassembly och kolla på assembly koden.
Vad är du ute efter lite mer specifikt? Är du osäker är det bara att köra en disassembly och kolla på assembly koden.
Re: Kompilatorer för Cortex M4
Det är digitala IIR-filter jag är intresserad av.
Typiskt är väl något sånt här:
Koden ovan funkar säkert inte, men är ett rimligt exempel på vad det handlar om. Och gcc som följer med LPCXPresso lyckas faktiskt använda instruktionerna UMULL och UMLAL ser jag nu, efter att ha typkonverterat på rätt sätt. Skoj! Det ser inte supereffektivt ut iof, men alltid något.
Typiskt är väl något sånt här:
Kod: Markera allt
void filter(uint32_t* u, const int N, const uint32_t* A, uint32_t* x)
{
uint32_t u1;
uint64_t tmp;
uint32_t s;
uint32_t x0,x1,x2;
uint32_t A0 = A[0];
uint32_t A1 = A[1];
uint32_t A2 = A[2];
x0 = x[0];
x1 = x[1];
x2 = x[2];
for(s=0; s<N; s++) {
u1 = u[s];
tmp = (uint64_t)A1*(uint64_t)u1;
tmp = tmp + (uint64_t)A2*(uint64_t)x0;
tmp = tmp - (uint64_t)A0*(uint64_t)x1;
x2 = (uint32_t)(tmp >> 32);
x1 = x0;
x0 = u1;
u[s] = x2;
}
x[0] = x0;
x[1] = x1;
x[2] = x2;
}
Re: Kompilatorer för Cortex M4
Om du är intresserade av IIR-filter, varför använder du inte bara DSP biblioteket som ARM ger ut med optimerad kod?
Bara att du tar och kör med deras BiQuad funktion.
Bara att du tar och kör med deras BiQuad funktion.
Re: Kompilatorer för Cortex M4
Tack för tippset! Jag har tänkt att kolla på den också, men koden jag behöver köra innehåller många varianter på filter, och jag gissar att deras bibliotek inte stödjer alla dessa. Ser iof att de har en biquad med dubbel precision på tillstånden i CMSIS-DSP-biblioteket, vilket var intressant. Använder du detta bibliotek själv?
Re: Kompilatorer för Cortex M4
Japp, alla signalanays algoritmer jag skriver baserar jag på dom. 
Är det något super special jag ska göra så kanske jag skriver en egen men det är väldigt sällan.

Är det något super special jag ska göra så kanske jag skriver en egen men det är väldigt sällan.