Multicore-Programmieren, aber wie?
Hallo,
ich hab ein Programm geschrieben, das eine Flugbahn eines Teilchens (physikalische Simulation) berechnet. Dies macht es zur statistischen Auswertbarkeit, mehrer 10 000mal hintereinander. Es funktioniert wie folgt:
1) Flugbahn ausrechnen
2) Flugbahn wird kurz gezeichnet (optional und nur zur besseren Darstellung)
3) Zähler wird um eins erhöht
diese Schleife wird so lange wiederholt bis der Benutzer eben abbricht.
Lass ich das Programm jetzt laufen, so belastet es nur einen Kern(bei Mehrkern-CPUs) bzw. die Auslastung der Kerne beträgt nur 50 %.
Jetzt meine Frage:
Wie kann ich das Programm oben multicorefähig machen?
Kann mir das jetzt nicht wirklich vorstellen wie das klappen soll, weil es ja nicht zB. zwei Teile gibt die ich gesondert behandeln kann.
Danke schon mal für die Antwort.
Antwort schreiben
Antwort 1 von Jaja vom 09.05.2020, 15:44 Options
da es sich und schleifen handelt und die zu bearbeiteten daten innherhalb dieser schleife scheinbar nicht voneinander (also von ergebnissen vorhergehender iterationen) abhängen, lässt sich das perfekt multithreaded lösen.
wenn es sich so darstellt wie du es beschreibst und ich es verstanden habe sollte sich ein nahezu linearer leistungszuwachs pro recheneinheit einstellen.
schau dir folgende pakete mal an:
POSIX thread lib (pthreads) - wenn du linux nutzt am besten
diese (NTPL) implementierung nutzen,
openMP (sollte die simpelste lösung bieten - halbautomatisch sozusagen)
das sind C bibliotheken / erweiterungen um multithread anwendungen zu basteln.
es kostet ein wenig zeit das verständnis/handhabung dafür zu erlernen, aber es lohnt sicher.
nutzt du eine andere sprache als c/c++ so gibts dafür auch lösungen..
Antwort 2 von Jaja vom 09.05.2020, 16:10 Options
aso:
hier ein schöner vergleich zwischen pthreads und openMP.
der vergleich geht kurz gesagt zugunsten von openMP in den allermeisten anwendungsfällen aus.
openMP ist auch viel einfacher anzuwenden..
Antwort 3 von MasterOfDisaster vom 09.05.2020, 16:28 Options
Vielen Dank genau was ich gesucht habe