PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wofür Barriers?


Gast
2007-10-25, 15:27:25
Hallo

ich beschäftige mich gerade mit thread Synchronisation und Kommunikation - dabei lese ich etwas über Barriers. Während ich den Nutzen von mutexes, guards, semaphores verstehe, bin ich unsicher wo man Barrieren wirklich brauchen kann.

An eine Barriere laufen alle Threads (bzw. alle gewollten) auf und warten bis alle die Barriere erreicht haben. Nur zur Synchronisation hat man damit doch auch keine gesicherte Aussage, denn ab dem weiterlaufen kann es ja wieder beliebig weitergehen.

An welcher Stelle kann es Sinn machen Threads auf eine Barriere auflaufen zu lassen und sich nicht einfach weitermachen zu lassen und sie erst bei einer geteilten Ressource möglicherweise zu bremsen? Mir will kein Szenario einfallen, wo dies von Vorteil sein kann.

few
2007-10-26, 10:02:20
Was mir spontan einfallen würde wäre folgendes:

Deine Rechnung besteht aus zwei Teilschritten. Beide Schritte sind parallelisierbar. Aber du kannst den zweiten erst anfangen wenn der erste vollständig abgeschlossen ist. Du hältst also alle Threads, die mit Schritt 1 fertig sind, auf bis alle damit fertig sind und beginnst dann Schritt 2.

Gast
2007-10-26, 13:23:39
Was mir spontan einfallen würde wäre folgendes:

Deine Rechnung besteht aus zwei Teilschritten. Beide Schritte sind parallelisierbar. Aber du kannst den zweiten erst anfangen wenn der erste vollständig abgeschlossen ist. Du hältst also alle Threads, die mit Schritt 1 fertig sind, auf bis alle damit fertig sind und beginnst dann Schritt 2.
kleiner Widerspruch, äh? ;)
Das Szenario an sich paßt schon -warten, falls Berechnungen aus beiden Threads zum weitermachen benötigt werden.

few
2007-10-26, 14:30:07
jeder Rechenschritt in sich ist parallelisierbar, nur die gesamte Rechnung nicht.

Trap
2007-10-26, 14:53:16
z.B. array parallel sortieren und dann mit einem anderen array parallel elementweise verechnen

An Stelle des "und dann" braucht man eine Barrier.

ScottManDeath
2007-10-26, 17:16:19
Barriers sind z.B. auch bei CUDA wichtig, wenn man z.b. parallel mit mehreren hundert Threads Daten aus dem Videospeicher in den lokalen Speicher kopieren will, um danach mit diesen parallel Rechnen will.