Forum: PC-Programmierung Simulationsprogramm Java in Cloud rechnen lassen.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Therman (Gast)


Lesenswert?

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

von cppbert (Gast)


Lesenswert?

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

von Therman (Gast)


Lesenswert?

>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.

von cppbert (Gast)


Lesenswert?

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?

von cppbert (Gast)


Lesenswert?

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

von Andreas B. (andreasb)


Lesenswert?

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

von Wühlhase (Gast)


Lesenswert?

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.

von cppbert (Gast)


Lesenswert?


von cppbert (Gast)


Lesenswert?

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

von MikeH (Gast)


Lesenswert?

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.

von Markus K. (markus-)


Lesenswert?

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.