Layout,graphics and scripting by EyE

Snelheidstest met JNI

C/C++ hebben de naam, 'snelle talen' te zijn. Een GUI maken is echter handiger in een taal als Java.

Via de Java Native Interface kan een native (C/C++) shared library in de Java applicatie worden ingeladen.

Om te testen of dit werkelijke snelheidswinst oplevert, is een klein testprogramma gemaakt. Dit programma doet het volgende:

  1. Maak een array van doubles array[i]=(double)i; ter lengte n
  2. Doe een lus van m iteraties (stellen de stappen in de path-tracing voor) Doe hierbinnen een lus van n2=n*n. En daarbinnen een lus over de array-elementen, zodat een orde n3 ontstaat, gelijk aan de orde van een SVD. Op ieder element worden vier basis floating-point-operaties toegepast.
  3. Bepaal de tijdsduur
Bovenstaande kan op vier manieren:
  1. Array aanmaken in Java, en berekeningen in Java
  2. Array aanmaken in Java, doorgeven aan C++, en C++ de berekeningen laten doen
  3. Array aanmaken in C++, en berekeningen in C++, na afloop array retourneren aan Java
  4. Om te testen of communicatie ertoe doet: Array aanmaken in C++, en berekeningen in C++, na afloop array NIET retourneren aan Java
Voor een aantal n is dit getoond in figuur 1 (zie figuur 2 voor logschaal tijds-as).

Uit de resultaten blijkt dat Java sneller is dan C/C++!

Voordat een definitieve keuze wordt gemaakt over de programmeertaal, moet nog een test gedaan worden met een echte SVD in Java en C++.

Figuur 1 mn_data4.eps: vaste m(=50), variabele vectorlengte n, algo van $\mathcal{O}(n^3)$.
\includegraphics[height=10cm]{mn_data4.eps}

Figuur 2 mn_data4_ll.eps: vaste m(=50), variabele vectorlengte n, algo van $\mathcal{O}(n^3)$.
\includegraphics[height=10cm]{mn_data4_ll.eps}



Practicum CS 2000 2000-10-31