Hallo, ich habe eine Java Anwendung die mir mechanische Schwingungen simuliert. Ich habe 3 Parameter p1,p2,p3 die jeweils von 0..100 laufen. Und mit jeder Kombination muss ich einen Simulationslauf rechnen. Also 1.000.000x die Simulation. Ein Simulationsdurchlauf geht etwa 3 Sekunden. Alles würde also ca. 1 Jahr dauern. Ich könnte die Anwendung aber auch auf 100 Rechnern laufen lassen. p1 und p2 laufen von 0..100, p3 ist auf jedem der 100 Rechner anders. Anstatt jetzt 100 Rechner zu kaufen: Kann man sowas in der Cloud rechnen lassen? Hab sowas noch nie gemacht. Würde mich gerne aufschlauen. Wie nennt man solche Verfahren? Nach was muss ich suchen. Therman
Therman schrieb: > Ein Simulationsdurchlauf geht etwa 3 Sekunden. Alles würde also ca. 1 > Jahr dauern. Könntest du die Berechnung weiter beschleunigen? Ist das dein source code, wie komplex ist der Algorithmus oder ein Fremdprodukt? Z.b.kannst du in der amazon cloud AWS mehrere prozesse an was rechnen lassen
>Könntest du die Berechnung weiter beschleunigen? Ist das dein source >code, wie komplex ist der Algorithmus oder ein Fremdprodukt? Sind Matritzenmultiplikationen. Der eigentlich Kern (der welcher die meiste Rechenzeit benötigt) der Simulation ist nur:
1 | y2 = M0.times(y0).plus(M1.times(y1).plus(MF.times(F))); |
Ich benutze JAMA. Aber es sind halt Matitzen mit 2.000 x 2.000 Einträgen.
Therman schrieb: > Ich benutze JAMA. Keine neuen Releases seit Ende 2012, wirkt jetzt auf mich nicht wie eine Highend Performanzlösung die sich aktiv an den Möglichkeiten aktueller Hardware orientiert Bevor ich mir 100 Rechner miete würde ich noch andere Libries mit deinem Testszenario evaluieren z.B. Intel MKL oder C++ Eigen/SparseMatrix Wie gross ist ein mögliches Optimierungspotential aus deiner Sicht?
cppbert schrieb: > Therman schrieb: >> Ich benutze JAMA. > > Keine neuen Releases seit Ende 2012, wirkt jetzt auf mich nicht wie eine > Highend Performanzlösung die sich aktiv an den Möglichkeiten aktueller > Hardware orientiert > > Bevor ich mir 100 Rechner miete würde ich noch andere Libries mit deinem > Testszenario evaluieren z.B. Intel MKL oder C++ Eigen/SparseMatrix > > Wie gross ist ein mögliches Optimierungspotential aus deiner Sicht? Oder vielleicht auf der GPU rechnen lassen? https://github.com/zpzim/MSplitGEMM Wenn es wirklich ein einfacher Algorithmus ist kannst du den ja leicht portieren und testen
Versuche mal OpenCV: https://stackoverflow.com/questions/10168058/basic-matrix-multiplication-in-opencv-for-android Damit kannst du die Matrix Multiplikation auf der GPU ausführen lassen. Wenn du eine Onboard (OnCPU) Grafikkarte hast, hast du irgendwo zwischen 8 .. 32 GPU Kerne. Ich bin kein Gamer, habe mir wegen 3 Bildschirmen eine alte AMD Karte geholt (~30€), die hat 480 Rechennunits, in 6 Einheiten (oder so ähnlich). Eine Moderne Karte kann noch viel mehr. 2000*2000 / 480 = 8333 Taktzyklen Pro Multiplikation auf der GPU 2000*2000 / 1 = 4000000 Taktzyklen auf der CPU Somit wäre die Grafikkarte ca. 480 mal schneller. (Ja, das Beispiel ist nicht korrekt, aber es gibt dir eine Richtung vor). Kurz überschlagen: Wenn du Theoretisch ein Jahr bräuchtest, das jetzt 480 mal schneller hinkriegst, dann bist in weniger als einem Tag fertig. Überlege dir das mal, und ggf. hast du ja einen Rechner, mit entsprechender Grafikkarte, auf dem du mal testen kann. Es muss auch nicht OpenCV sein, kann auch eine andere Library sein, OpenCV habe ich einfach persönlich verwendet, die funktioniert mit Java auf aktueller Hardware. mfg Andreas
Läßt sich der Algorythmus nicht weiter beschleunigen? Verwendest du darin irgendwelche älteren Collections die noch synchronisiert sind? Oder erzeugst Daten redundant? Iterierst du oft über Listen (z.B. die gute alte ArrayList), wo ein Zugriff über einen Hash (wie z.B. in der HashMap) schneller wäre? Schlecht organisierte Schreibarbeit auf der Festplatte oder Dateizugriffe? Bevor ich bei Amazon einen Server miete, würde ich mal in der Richtung weiterschauen. Man wird das Programm vielleicht nicht auf eine Ausführungsdauer von 10s beschleunigen können, aber für ein paar Tage Rechenzeit würde ich mich mit einer Amazoncloud gar nicht erst beschäftigen. Du darfst auch nicht vergessen: Großcomputer leben von Parallelisierung. Wenn dein Rechner, ich gehe hier von einer halbwegs mordernen Kiste aus, schon ein Jahr braucht, dann wird das der Amazonrechner nicht sehr viel schneller machen, wenn er dein Programm nur auf einem einzelnen Kern und mit dem gleichen Rechenballast laufenlassen kann. Der ist dann vielleicht in drei Monaten statt eines Jahres fertig, aber das ist doch keine Lösung. Therman schrieb: > Der eigentlich Kern Und die Klasse Thread würde ich mir auch mal ansehen.
cppbert schrieb: > https://github.com/tahaemara/multi-threaded-matrix-multiplication Auch wenn die c++ Werte so fuer mich keinen sinn machen sind die Tests allle mit 2000x2000
Die Frage ist, was du mit den Ergebnissen von einer Million Simulationen anstellen willst. Du solltest mal überlegen, ob du wirklich alle Parameterkombis durchrechnen musst oder ob es dir vielleicht um das Finden eines Optimums geht. Letzterer Fall dürfte deutlich weniger Rechnungen erfordern.
Therman schrieb: > 1.000.000x die Simulation. > > Ein Simulationsdurchlauf geht etwa 3 Sekunden. Alles würde also ca. 1 > Jahr dauern. Das einfachste wird sein, Du berechnest Deinen Zeitbedarf neu. 1.000.000 * 3 = 3.000.000, ein Jahr hat aber etwa 31 Mio Sekunden. Du brauchst also etwa einen Monat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.