Frage

Gibt es Paradigma, dass Sie eine andere Mentalität geben oder haben eine andere Perspektive Multi-Thread-Anwendungen zu schreiben? Vielleicht etwas, das ganz anders wie prozeduralen Programmierung zu Funktionsprogrammierung fühlt.

War es hilfreich?

Lösung

Concurrency hat viele verschiedene Modelle für unterschiedliche Probleme. Die Wikipedia-Seite für Gleichzeitigkeit ein paar Modelle aufführt und es gibt auch eine Seite für Gleichzeitigkeit Muster , die einigen guten Ausgangspunkt für verschiedene Arten von Möglichkeiten hat Parallelität zu nähern.

Der Ansatz, den Sie nehmen ist sehr abhängig von dem Problem auf der Hand. Verschiedene Modelle lösen verschiedene Probleme, die in gleichzeitigen Anwendungen entstehen können, und einige bauen auf andere.

In der Klasse wurde ich gelehrt, dass die Parallelität verwendet mutual exclusion und Synchronisation zusammen Concurrency Probleme zu lösen. Einige Lösungen erfordern nur eine, sondern mit beiden sollten Sie in die Lage jedes Concurrency Problem zu lösen.

Für ein völlig anderes Konzept, das Sie bei Unveränderlichkeit und Gleichzeitigkeit aussehen könnten. Wenn alle Daten unveränderlich sind dann die herkömmlichen Ansätze zur Gleichzeitigkeit nicht einmal erforderlich. dieser Artikel dieses Thema erforscht.

Andere Tipps

Das verstehe ich nicht wirklich die Frage, aber wenn Sie einige Codierung verwenden tun beginnen CUDA geben Sie einige andere Art des Denkens über Multi-Threading-Anwendungen.

Es unterscheidet sich von allgemeinen Multi-Threading-Technik, wie Semaphore, Monitore, usw., weil Sie Tausende von Threads gleichzeitig haben. So das Problem der Parallelität in CUDA mehr befindet sich in Ihrem Datenpartitionierung und die Datenblöcke Mischen später.

Nur ein kleines Beispiel für ein vollständiges Umdenken eines gemeinsamen seriellen Problems ist die Algorithmus SCAN. Es ist so einfach wie:

  • Bei einem SET {a, b, c, d, e}

Ich mag folgenden Satz:

{a, a + b, a + b + c, a + b + c + d, a + b + c + d + e}

Wenn das Symbol '+' ist in diesem Fall jeder Commutattive Operator (nicht nur plus, können Sie Multiplikation auch tun).

Wie dies parallel zu tun? Es ist ein komplettes Umdenken des Problems, es in diesem beschrieben wird Papier .

Viele weiteren Implementierungen verschiedenen Algorithmen in CUDA können im Website NVIDIA finden

Nun, ein sehr konservativer Paradigmenwechsel von Thread-centric Concurrency (teilt alles) in Richtung prozessorientierte Gleichzeitigkeit (Adressraum-Trennung). Auf diese Weise kann man ungewollte Datenfreigabe vermeiden und es ist einfacher, eine Kommunikationspolitik zwischen den verschiedenen Subsystemen zu erzwingen.

Diese Idee ist alt und wurde propagiert (unter anderem) von der Micro-Kernel OS Community zuverlässige Betriebssysteme zu bauen. Interessanterweise zeigt die Singularity OS Prototyp von Microsoft Research, dass traditionelle Adressräume sind nicht erforderlich, auch wenn mit diesem Modell arbeiten.

Die relativ neue Idee, die ich am besten gefällt, ist Transaktionsspeicher : Concurrency Probleme vermeiden, indem sichergestellt Updates sind immer atomar.

Haben Sie einen looksee unter OpenMP für eine interessante Variante.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top