Voor een test net de altera nios ii processor had ik de volgende functie gemaakt om het integraal van een tweede orde vergelijking te benaderen en zo de processor te stressen
Daarvan heb ik een aanroep gedaan moet de volgende argumenten
a=3.0
b=0.0
v=2.0
intStart=-1.0
intStop=1.0
step=0.01
Daarna heb ik hetzelfde gedaan maar dan met een floating point berekening:
Vervolgens heb ik het aantal ticks gemeten die nodig is om de functie uit te voeren en dat vertaald naar een tijd, daar kwam uit dat voor de double ongeveer 13 ms nodig was maar voor de float 5 ms
Ik zou verwachten dat de double sneller was met vermenigvuldigen dan de float maar dat blijkt niet zo te zijn. Ik zou hier geen verklaring voor weten, kan iemand mij dit verhelderen? Ook een google zoektocht deed blijken dat een double sneller moet zijn, maar dit is gemeten op een pentium mmx ipv een nios processor en daarom (volgens mij) niet zo heel veel waard kwa meting
Even voor de duidelijkheid
Ik draai op een Cyclone II fpga waarop ik de Nios II/f softcore processor heb gedownload, daarop heb ik de MicroC rtos draaien met mijn programma in een thread met de hoogste prioriteit
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| double secondOrderIntegral(double a, double b, double c, double intStart, double intStop, double step) { double pointer; double integral = 0.0; pointer = intStart; while (pointer <= intStop) { integral+=step*((a*pointer*pointer)+(b*pointer)+c); pointer+=step; } return(integral); } |
Daarvan heb ik een aanroep gedaan moet de volgende argumenten
a=3.0
b=0.0
v=2.0
intStart=-1.0
intStop=1.0
step=0.01
Daarna heb ik hetzelfde gedaan maar dan met een floating point berekening:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| float secondOrderIntegral(float a, float b, float c, float intStart, float intStop, float step) { float pointer; float integral = 0.0; pointer = intStart; while (pointer <= intStop) { integral+=step*((a*pointer*pointer)+(b*pointer)+c); pointer+=step; } return(integral); } |
Vervolgens heb ik het aantal ticks gemeten die nodig is om de functie uit te voeren en dat vertaald naar een tijd, daar kwam uit dat voor de double ongeveer 13 ms nodig was maar voor de float 5 ms
Ik zou verwachten dat de double sneller was met vermenigvuldigen dan de float maar dat blijkt niet zo te zijn. Ik zou hier geen verklaring voor weten, kan iemand mij dit verhelderen? Ook een google zoektocht deed blijken dat een double sneller moet zijn, maar dit is gemeten op een pentium mmx ipv een nios processor en daarom (volgens mij) niet zo heel veel waard kwa meting
Even voor de duidelijkheid
Ik draai op een Cyclone II fpga waarop ik de Nios II/f softcore processor heb gedownload, daarop heb ik de MicroC rtos draaien met mijn programma in een thread met de hoogste prioriteit
[ Voor 13% gewijzigd door Verwijderd op 18-07-2005 11:19 ]