[ Lazoman @ 23.09.2014. 21:09 ] @
Da li neko može da mi objasni šta je tačno FPU (Floating Point Unit) i za šta se koristi u mikrokontrolerima? Kakve su to floating point instrukcije? Hvala
[ bogdan.kecman @ 23.09.2014. 21:23 ] @
floating point -> broj sa pomerljivim zarezom

za razliku od INT-a koji je ceo broj float i double rade drugacije, mogu
da prikazu jako mali broj (0.0000000000001234) ili jako veliki broj,
fora je u MANTISA+EXPONENT, dakle imas mantisu koja predstavlja
"koristan" deo broja i exponent koji pokazuje gde je taj koristan broj u
odnosu na decimalnu tacku/zarez. Ako te vise zanima o samoj
reprezentaciji pogledaj wiki


CPU koji ne ume ra radi floating point ima ALU koji ume samo da radi sa
int brojevima tako da sabiranje traje u proseku 1 takt, oduzimanje 1,
mnozenje 1-5 i slicno, sa druge strane ako treba da saberes 2 float-a
cpu to ne ume vec se to simulira u software-u i sabiranje 2 float-a
uzima u proseku 50 taktova, mnozenje 2 float-a 300 taktova i slicno .. +
zauzimaju mnogo flash-a + zauzimaju ram.

FPU ume da direktno operise floating point brojevima tako da je
sabiranje 2 floating point broja 1-2 takta, mnozenje 2-5 taktova i
slicno. Dakle FPU je modul slican kao sto je ALU jedino sto ALU
funkcionise sa int a FPU sa float. FPU moze da bude integrisan u mcu/cpu
a moze da bude externi hw modul. Uglavnom nije integrisan u mcu posto
"kosta", sastoji se iz puno tranzistora tako da ako ti treba fpu turis
externi. Integrisan je u vecinu CPU koji su namenjeni za neke "general
use" stvari (serveri, dekstopi..) a u vecinu mcu nije integrisan jer je
tu upotreba malo specijalizovanija a cena znacajna pa kome treba stavi
externi. Naravno postoje cpu bez i mcu sa integrisanim

http://en.wikipedia.org/wiki/Floating-point_unit
[ mikikg @ 18.10.2014. 21:11 ] @
Pitanje, na STM32F4 koji ima FPU i enablovan u startup-u, kako iskoristiti to prakticno za operacije ovog tipa:

Code:
double kal = 2513.3F;
double rezultatl = 0;
rezultat = 4096 * 1000 / kal;


Negde smo spominjali da compiler (KEIL) nije bas toliko pametan da ovakav izraz prekombinuje u funkcije koje direktno koriste HW FPU instrukcije ili je ipak pametan?

Kako to napisati da se bas koriste FPU instrukcije?
[ mikikg @ 18.10.2014. 22:12 ] @
Ipak compiler radi neku optimizaciju jer dobijam rezultate koji su odpilike 4x brzi kada se ukljuci HW FPU na nivou projekta.
Za info, double precision FP (64bit) je sporiji nekih 11x nego single precision FP (32bit) kada je enablovan HW FPU, nisam probao sa SW FPU, moguce da bi bio jos losiji odnos.
[ Odin D. @ 18.10.2014. 22:40 ] @
Ako su promjenjive tipa float, i ako je uključena opcija za FPU u kompajleru - to bi trebalo da je dovoljno samo po sebi.
E sad, ako su promjenjve tipa double, ko zna zna, ko ne zna - ja...
[ bogdan.kecman @ 19.10.2014. 01:03 ] @
ako je kal double/float i upaljen ti je hw on ce iskoristiti fpu.. ne ume da koristi dsp funkcije (integer kompleksan math u jednoj instrukciji tipa pomnozi ova dva, ovaj povecaj za jedan i onda podeli sa ovim sto si prethodno smanjio za jedan) ali fpu koliko ja znam keil tera ok na arm-u

gcc na arm-u meni nije koristio fpu instrukcije ali to moze da bude zato sto nisam umeo da upalim podrsku

Citat:
double precision FP (64bit) je sporiji nekih 11x nego single precision FP (32bit) kada je enablovan HW FPU, nisam probao sa SW FPU


on double precission radi softwerski uvek na ovim arm mcuima tipa F4 posto njegov FPU ume da barata samo 32bitnim brojevima (vidi doc) .. e sad da li za double precision koristi fpu instrukcije ili to radi preko inta nemam pojma, to sad vec iskljucivo zavisi od kompajlera pogledaj asm koji generise