5 Stimmen

Welche Hinweise gibt es, dass ein Algorithmus parallelisiert werden sollte?

Meine bisherige Erfahrung hat mir gezeigt, dass die Parallelisierung eines Algorithmus selbst bei Mehrkernprozessoren nicht immer zu einer spürbaren Beschleunigung führt. Manchmal kann es sogar zu einer Verlangsamung führen. Was sind gute Anhaltspunkte dafür, dass ein Algorithmus durch Parallelisierung erheblich beschleunigt werden kann?

(Natürlich in Anbetracht der Vorbehalte gegen eine vorzeitige Optimierung und deren Zusammenhang mit dem Bösen)

5voto

Mitch Wheat Punkte 287474

Um den größtmöglichen Nutzen aus der Parallelisierung zu ziehen, sollte eine Aufgabe in ähnlich große, unabhängige (oder weitgehend unabhängige) Teile zerlegt werden können, die nur wenig Datenkommunikation oder Synchronisierung zwischen den Teilen erfordern.

Die feinkörnige Parallelisierung leidet fast immer unter einem erhöhten Overhead und hat unabhängig von der Anzahl der verfügbaren physischen Kerne einen endlichen Geschwindigkeitszuwachs.

[Eine Einschränkung gilt für Architekturen mit einer sehr großen Anzahl von "Kernen" (wie z. B. die 64.000 Kerne der Verbindungsrechner). Diese eignen sich gut für Berechnungen, die in relativ einfache Aktionen unterteilt werden können, die einer bestimmten Topologie zugeordnet sind (z. B. ein rechteckiges Netz).

3voto

Assaf Lavie Punkte 67504

Wenn Sie die Arbeit in unabhängige Teile aufteilen können, kann sie gut parallelisiert werden.

Denken Sie auch daran Amdahlsches Gesetz was eine ernüchternde Erinnerung daran ist, wie wenig wir in Bezug auf Leistungssteigerungen erwarten können, wenn wir mehr Kerne zu den meisten Programmen hinzufügen.

2voto

BobbyShaftoe Punkte 27949

Schauen Sie sich zunächst diesen Aufsatz des verstorbenen Jim Gray an:

Wirtschaft des verteilten Rechnens

Dies wird einige Missverständnisse ausräumen, die auf dem basieren, was Sie in Ihrer Frage geschrieben haben. Es liegt auf der Hand, dass Ihre Problemstellung umso schwieriger ist, je weniger sie diskretisiert werden kann.

2voto

rlbond Punkte 62333

Jedes Mal, wenn Sie Berechnungen haben, die von früheren Berechnungen abhängen, handelt es sich nicht um ein paralleles Problem. Dinge wie lineare Bildverarbeitung, Brute-Force-Methoden und genetische Algorithmen lassen sich alle leicht parallelisieren.

Eine gute Analogie wäre: Woran könntest du arbeiten, wenn du mehrere Freunde dazu bringen könntest, verschiedene Teile auf einmal zu übernehmen? Das Zusammenstellen von Ikea-Möbeln könnte zum Beispiel gut parallelisiert werden, wenn verschiedene Leute an verschiedenen Abschnitten arbeiten können, aber das Rollen von Tapeten vielleicht nicht, weil man die Wände nacheinander machen muss.

1voto

gnovice Punkte 124264

Wenn Sie große Matrixberechnungen durchführen, z. B. Simulationen mit Finite-Elemente-Modellen, können diese oft auf einfache Weise in kleinere Teile zerlegt werden. Matrix-Vektor-Multiplikationen können gut von der Parallelisierung profitieren, vorausgesetzt, Sie haben es mit sehr großen Matrizen zu tun. Solange es keinen echten Leistungsengpass gibt, der die Ausführung des Codes verlangsamt, ist es wahrscheinlich nicht notwendig, sich mit der Parallelverarbeitung herumzuschlagen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X