vrijdag 24 oktober 2008

Nieuwe waarden

Voor de CPU versie van SPH hebben we nog wat zitten optimaliseren om een goede vergelijking te kunnen bekomen met de uiteindelijke versie op de GPU. De optimalisaties die we hebben doorgevoerd waren voornamelijk het slechts 1 keer berekenen van de buren, en de krachten bereken in slechts 1 functie. Zo kunnen we onder andere de kernel berekeningen herbruiken bij het berekenen van de surface tension. Voor de rest hebben we het geheel gecompiled met de -ffast-math en -O1 optie, om zo nog de FPS wat te boosten.

Wel heerst er nog een bug in onze code, dat vooral bij hoge particle-count zichtbaar is. Momenteel krijgen we een onstabiele gedrag bij meer als 1000 particles. Zelfs voor 2197 particles moeten we de timestep verlagen naar 0.001. Voor de rest van de tabel gebruiken we als timestep 0.0014.

We hebben ook de werkelijke fps berekend aan de hand van de timestep en de opengl frames per second. We nemen 30 fps als referentiewaarde voor een interactieve applicatie. Als onze timestep bijvoorbeeld 0.001 milliseconden is hebben we 1000 berekeningen nodig om 1 seconde te kunnen simuleren. Uit deze 1000 berekeningen zullen we dan 30 frames op het scherm tonen. Als die 1000 berekeningen niet binnen 1 seconden lukken is onze applicatie niet meer interactief. In onderstaande tabel zien we dat onze applicatie interactief is tot 729 particles (= 30 fps). Wanneer we zouden spreken over een simulatie aan 15 fps, zouden we maar om de 2 seconden een volledige seconde gesimuleerd hebben. Deze FPS notatie is vooral handig om mee te vergelijken: als we dus in het vervolg over FPS spreken zal voor de duidelijkheid dit systeem gevolgd worden.


ParticlesOpenGL Frames Per Second100 frames met visualisatie (s)100 frames zonder visualisatie (s)Werkelijke Frames Per Second
1254500-55000.140.05231
3431100-13000.360.1150.4
7294500.750.2330
10003301.070.2913.8
21971402.110.634.2

Geen opmerkingen: