Skrivet av hasenfrasen:
Testa, men kompilerad C++ lär du får svårt att bräcka med tolkad kod.
Ja. C++ kod lär vara svårare än Java kod. C++ är ju dessutom svåraste språket. Men jag finner det svårt att hitta något mer effektivare språk som har rätt bibliotek samt går att kompilera. Jag har testat Julia, men det är hur segt som helst. Bluffspråk!
Skrivet av mmarks:
som tidigare sagts så har jag väldigt svårt att tro att java kan bräcka c/c++ när det kommer till rena beräkningar just pga att det är kompilerad kod. Med det sagt så hade jag nog med den info du ger fortfarande försökt bilda mig en uppfattning om ifall det går att komma undan med java av den enkla anledningen att ditt program blir lättare att underhålla om det är skrivet i ett språk istället för flera olika.
Tanken är att Java ska sköta webbapplikationen och I/O på hårdvaran. C++ sköta beräkningen för att Java ska avgöra hur I/O ska vara. Tänk dig att du ska spotta ut ett värde mellan 0 och 255. Men du vet inte vilket värde du har. Allt du har är värden i en 100 lång array. Du skickar arrayen till C++ och låter C++ göra en djup beräkning med matriser och kvadratisk programmering samt massa for-loopar. Efter C++ är klar så skickar den tillbaka ett värde till dig så du kan avgöra vilket värde mellan 0 och 255 du ska spotta ut.
Skrivet av Baxtex:
Beror på hur bra du behärskar de andra språken. Det är inte särskilt konstigt att blanda in andra språk i samma program/system, ibland behövs det då språk är bra på olika saker. Definera tydliga interfaces mellan modulerna så att du enkelt kan byta ut de mot andra ifall det inte fungerar.
Jag är ny på C++. Men jag kan Java.
Skrivet av KAD:
Enda sättet att veta om du vinner prestanda är nog att benchmarka två beräkningsprogram i de olika språken mot varandra.
Om webbgränssnittet och beräkningen alltid kör på samma burk kan man ju överväga andra tekniska gränssnitt än sockets, till exempel stdin/stdout, fil, JNI eller delat minne. Jag hade nog kört på stdin/stdout för att kunna köra beräkningsprogrammet oberoende av allt annat - men det har ju kostnaden att skapa en ny process för varje beräkning.
Jag har kollat C++ VS Java och sett att C++ är mycket snabbare vid t.ex Manelbrott algoritmen. 10 gånger snabbare!
https://benchmarksgame-team.pages.debian.net/benchmarksgame/f...
Väljer jag Java + C++ så betyder det att jag måste ha mer kod t.ex. sockets och någon process som skickar data mellan Java och C++. Detta tar ju tid också.
Väljer jag enbart Java så har jag ju enbart Java. Kommunikationen går ju lättare.
Algoritmer jag ska använda mig av är:
* Moore-Penrose pseudoinverse. Detta kan enkelt lösas med Singular Value Decomposition
* Euler-Methodför att simulera ODE via en for-loop. Totalt blir det 72*256 iterationer, vilket är 19456 iterationer.
Med GNU Octave löser jag detta hur enkelt som helst. Frågan om det är värt att använda optimerad GNU Octave kod jämfört med C++.
Jag gjorde ett test med pinv och en for-loop som itererar 72 gånger.
>> E = pinvreg(A, b);
Elapsed time is 0.0118351 seconds.
>>
function E = pinvreg(X, Y)
tic
E = pinv(X,Y);
for n = 1:72
Y = X*E;
E = E + E*0;
end
toc
endfunction
En tiondels sekund för att beräkna detta. Undra hur mycket jag vinner på att porta om allt detta till C++? GNU Octave är ju C++ i grunden också.