Hur snabbare är uint vs float?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Hur snabbare är uint vs float?

Inlägg av DanielM »

Hej!

Jag skall utföra denna beräkning

\(\nabla J = ||Ax - b||_2 + \lambda ||x||_1\)

Där \(\lambda > 0\)

Här så kommer A vara heltal, 0..255 och då passar uint8_t riktigt bra. Men att minimera denna ekvation ovan kräver en hel del beräkningar. Jag kan göra detta i flyttal, men jag vet inte hur snabbare det blir om jag gör det i heltal. Jag har sökt lite på internet och jag får alltid svaret "Det beror på...". :humm:

Så om "Beror på" är inbyggda ARM system då? Hur snabbare är då heltal jämfört med flyttal?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45175
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur snabbare är uint vs float?

Inlägg av TomasL »

Heltal är per natur oerhört mycket snabbare än flyttal, även om man har FPU.
Dock så vilken ordlängd man skall använda beror på arkitektur.
Oftast är heltalen snabbare om man använder nativ ordlängd, dvs för en 32-bitars processor, så är det oftast lämpligare att använda 32-bitars heltal jämfört med 8-bitars.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Hur snabbare är uint vs float?

Inlägg av DanielM »

Det finns väll ingen som har mätt upp hur snabbt det är?

Känns som att denna tråd kommer bli en lång tråd. :wink:
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Hur snabbare är uint vs float?

Inlägg av sodjan »

Man kan nog sammanfatta det med, "det beror på"...
Enklast är att slå upp tiderna i databladet för processorn man använder.
mounte
Inlägg: 204
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Hur snabbare är uint vs float?

Inlägg av mounte »

Vilken ARM processor?
Hur frekvent MÅSTE du lösa/optimera systemet?
Hur robust måste lösningen vara för dåligt konditionerade matriser etc.?

Ofta stöter man på patrull hur man ska hantera avrundningar korrekt för att inte addera systematiskt brus/fel till optimeringen. Många sådana problem "löser sig självt" när man jobbar med flyttal direkt på fpu.

och slutligen, hur stor systemmatris har du? är den konstant eller kommer dimensionen variera?
SvenW
Inlägg: 1116
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Hur snabbare är uint vs float?

Inlägg av SvenW »

Helt rätt, 'det beror på..'

Med en äldre ARM-processor som beräknar flyttalen i mjukvara så är skillnaden enorm.
Med senare varianter som har fpu, och med kompileringsflaggorna rätt satta, så år skillnaden marginell.
Men troligen är ändå heltal lite snabbare.

Det bästa är att skriva testexempel och jämföra.
Programmeringsarbetet kanske är svårare och mer omfattande med heltal, beroende på om enkla lösningar fungerar eller inte.

Så mitt grundtips blir: använd flyttal om det finns en fpu, annars absolut inte.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Hur snabbare är uint vs float?

Inlägg av DanielM »

mounte skrev: 31 maj 2021, 18:00:32 Vilken ARM processor?
Hur frekvent MÅSTE du lösa/optimera systemet?
Hur robust måste lösningen vara för dåligt konditionerade matriser etc.?

Ofta stöter man på patrull hur man ska hantera avrundningar korrekt för att inte addera systematiskt brus/fel till optimeringen. Många sådana problem "löser sig självt" när man jobbar med flyttal direkt på fpu.

och slutligen, hur stor systemmatris har du? är den konstant eller kommer dimensionen variera?
Låt oss säga. 32*32 = 1024 på höjden A. Sedan 200 på bredden Så 1.024*200 = 204.8 kB i flash blir det för A matrisen. Element uint8_t.

I detta fall så ska vektor \(x\) vara gles, dvs den ska bara innehålla 0:or och vissa tal. Så jag har ringa intresse om lösningen kommer vara bra eller inte. Det viktigaste är att det blir massa 0:or i vektorn samt vissa tal som "sticker uppåt".

Matrisen A är konstant. Den är dessutom kvadratisk innan beräkningen.
SvenW skrev: 31 maj 2021, 18:02:05 Helt rätt, 'det beror på..'

Med en äldre ARM-processor som beräknar flyttalen i mjukvara så är skillnaden enorm.
Med senare varianter som har fpu, och med kompileringsflaggorna rätt satta, så år skillnaden marginell.
Men troligen är ändå heltal lite snabbare.

Det bästa är att skriva testexempel och jämföra.
Programmeringsarbetet kanske är svårare och mer omfattande med heltal, beroende på om enkla lösningar fungerar eller inte.

Så mitt grundtips blir: använd flyttal om det finns en fpu, annars absolut inte.
Jag har FPU. Men bara för float, inte double. Men jag kör bara float.
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: Hur snabbare är uint vs float?

Inlägg av mankan »

Sedan finns ju möjligheten med vektoriserade heltal och även flyttal på en del CPU:er. Med lite template-iserad C++ matriskod borde du kunna göra ett enkelt test.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Hur snabbare är uint vs float?

Inlägg av DanielM »

Jag kör C-kod rakt av. Jag är van med det och det finns störst support för C-kod inom inbyggda system :)

Är det någon som har MATLAB eller Octave här?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45175
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur snabbare är uint vs float?

Inlägg av TomasL »

DanielM skrev: 31 maj 2021, 17:55:19 Det finns väll ingen som har mätt upp hur snabbt det är?

Känns som att denna tråd kommer bli en lång tråd. :wink:
Har mätt hastigheten med olika stora UINTar, på en MIPS. Där visade det sig att 32 bitars var snabbast, alternativt 16 bitars om man kompilerade med 16-bitars option.
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur snabbare är uint vs float?

Inlägg av hummel »

DanielM skrev: 31 maj 2021, 17:55:19 Det finns väll ingen som har mätt upp hur snabbt det är?
För vilken ARM-arkitektur?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Hur snabbare är uint vs float?

Inlägg av DanielM »

Det som STM kör? Cortex M3.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Hur snabbare är uint vs float?

Inlägg av DanielM »

TomasL skrev: 31 maj 2021, 19:04:53
DanielM skrev: 31 maj 2021, 17:55:19 Det finns väll ingen som har mätt upp hur snabbt det är?

Känns som att denna tråd kommer bli en lång tråd. :wink:
Har mätt hastigheten med olika stora UINTar, på en MIPS. Där visade det sig att 32 bitars var snabbast, alternativt 16 bitars om man kompilerade med 16-bitars option.
Vad var skillnaden då?
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur snabbare är uint vs float?

Inlägg av hummel »

DanielM skrev: 31 maj 2021, 19:18:28 Det som STM kör? Cortex M3.
Menar du ST när du skriver STM?
ST har i alla fall Cortex-M3, M4 och M7 om jag minns rätt och även några 8-bitars.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Hur snabbare är uint vs float?

Inlägg av DanielM »

Ja, det menar jag.

Men en annan viktig fråga, är hur snabbt det går att göra 1000 iterationer i en lite större processor på ca 100 MHz.
Skriv svar