Frage Parallelisierung großer Schleifen

Matthias

Mitglied
Mitglied seit
Jul 24, 2018
Beiträge
10
Bewertungspunkte
0
Punkte
1
Hallo zusammen,

beruflich rechne ich gerade auf einem E5-2683 v4 @ 2.10GHz Knoten (2 Sockel, 64 logische Kerne). Ich nutze alle Kerne zur Approximation einer 3-dimensionalen Funktion (B-Spline). Für eine geringere Menge an Gitterpunkten (10^6) lässt sich die Berechnung gut parallelisieren (Fortran, Openmp), d.h. alle 64 Kerne werden 100% ausgelastet . Erhöhe ich die Anzahl der Gitterpunkte (z.B. auf 6 * 10^6) sinkt die Auslastung (z.B. auf 50%). Ich bin kein Informatiker und verstehe nicht, wo hier das Problem liegt. Die Berechnungen der einzelnen Gitterpunkte sind jedenfalls unabhängig voneinander (threadsicher). Ich vermute, es hat etwas mit der Speicheranbindung (RAM?, Cache?) zu tun. Kann das jemand bestätigen oder hat jemand eine andere Vermutung?

VG,
Matthias
 
Zuletzt bearbeitet :
fuehren. Da kommt es sehr auf die konkrete Implementierung an. Pauschal kann man da recht wenig Aussage treffen. :/ Rede mit dem Programmierer oder Hersteller der Software, ob wan da etwas konfigurieren kann. Ansonsten ist es von aussen grosses raten oder glaskugeln.
 
Gut möglich das deine Daten nicht mehr in den Cache passen, und deine Software dann durch Speicherzugriffe ausgebremst werden. Der Xeon hat 40 MB L3 Cache, was etwa für eine Million Datenpunkte in Single-Precision ausreicht.

Für die maximale Effizienz müßtest du also kleinere Teilbereiche bearbeiten und danach zusammenfügen. Wobei das Zusammenfügen natürlich auch Rechenzeit kostet, vom Entwicklungsaufwand mal abgesehen.

Oder auf die GPU umsteigen, die sehr viel schnelleren Speicherzugriff hat. Das lohnt für Interpolationen aber wahrscheinlich nicht, weil du dann durch den Datentransfer über PCIe ausgebremst wirst.
 
Zuletzt bearbeitet :
Ich schätze mal, hier bremst der Overhead die Parallelisierung aus. Threadverwaltung kostet ebenfalls Zeit und das gesamte Handling bleibt nur in einem gewissen Grade optimal beherrschbar. Zu kurze Threads führen zu einer Unzahl von (unnötigen) Befehlen nur fürs Management und man wird schnell kontraproduktiv. Oft genug kommt man mit optimal gestalteten Warteschlangen bei sehr kurzen Aufgaben besser weg. genau das können Grafikkarten besser als CPUs, weil die Shader viel simpler gestrickt sind.
 
Oben Unten