Hur snabbare är uint vs float?
Hur snabbare är uint vs float?
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å...".
Så om "Beror på" är inbyggda ARM system då? Hur snabbare är då heltal jämfört med flyttal?
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å...".
Så om "Beror på" är inbyggda ARM system då? Hur snabbare är då heltal jämfört med flyttal?
Re: Hur snabbare är uint vs float?
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.
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.
Re: Hur snabbare är uint vs float?
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.
Känns som att denna tråd kommer bli en lång tråd.
Re: Hur snabbare är uint vs float?
Man kan nog sammanfatta det med, "det beror på"...
Enklast är att slå upp tiderna i databladet för processorn man använder.
Enklast är att slå upp tiderna i databladet för processorn man använder.
Re: Hur snabbare är uint vs float?
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?
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?
Re: Hur snabbare är uint vs float?
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.
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.
Re: Hur snabbare är uint vs float?
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.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?
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.
Jag har FPU. Men bara för float, inte double. Men jag kör bara float.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.
Re: Hur snabbare är uint vs float?
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.
Re: Hur snabbare är uint vs float?
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?
Är det någon som har MATLAB eller Octave här?
Re: Hur snabbare är uint vs float?
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.
Re: Hur snabbare är uint vs float?
Re: Hur snabbare är uint vs float?
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.
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.