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:
Maak een array van doubles array[i]=(double)i; ter lengte n
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.
Bepaal de tijdsduur
Bovenstaande kan op vier manieren:
Array aanmaken in Java, en berekeningen in Java
Array aanmaken in Java, doorgeven aan C++, en C++ de berekeningen laten doen
Array aanmaken in C++, en berekeningen in C++, na afloop array retourneren aan Java
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
.
Figuur 2
mn_data4_ll.eps: vaste m(=50), variabele vectorlengte n, algo van
.