Homegrown Workqueue vs Intel TBB

8

Wir überlegen, welches parallele Framework für C/C++ verwendet werden soll. Wir haben einige sehr spezielle Bedingungen und sind nicht 100% sicher, dass z.B. TBB kann etwas "more" hinzufügen.

  • Es gibt N laufende Threads und eine synchronisierte Arbeitswarteschlange (mit pthread mutex).
  • Unsere Jobs sind priorisiert ( int ).
  • Jobs werden in die Warteschlange eingereiht, und inaktive Threads nehmen einen Job mit der höchsten Priorität an.

Dies wird wiederholt, bis die Warteschlange leer ist.

Nun, und jetzt würde ich gerne wissen, ob ein Framework wie TBB (Thread Building Blocks) mehr für dieses spezielle Szenario von algorithmic anbieten kann Standpunkt?? (Also, Interna ...)

    
Cartesius00 05.12.2011, 14:17
quelle

5 Antworten

3

Meiner Meinung nach könntest du gewinnen, indem du den schweren Mutex durch etwas robusteres ersetzt, wie den spin_rw_mutex: Ссылка . Da die Einfüge- / Entfernungsoperationen höchstwahrscheinlich schnell sind, könnten Sie mehr von einer nicht blockierenden Sperre profitieren.

    
Tudor 13.12.2011, 17:59
quelle
5

TBB 4 bietet eine concurrent_priority_queue (Suche 'Priorität' im Referenzhandbuch ). Darüber hinaus ist die Verwendung von TBB nett, wenn Sie Ihr Programm mit Aufgaben statt mit Threads entwerfen können. Tatsächlich bietet es eine Menge Zeug, um Abhängigkeiten zwischen Aufgaben zu beschreiben. Außerdem scheint TBB ziemlich portabel zu sein, wenn es für Sie wichtig ist.

    
Alexandre Hamez 13.12.2011 13:00
quelle
1

Ich würde vorschlagen, dass Sie sich die TBB-Modul-Übersichtsseiten ansehen und nachsehen, ob da etwas ist ist nützlich für dich.

Im Abschnitt Container zum Beispiel gibt es kein concurrent_queue< T, A > , "Eine Hochleistung Thread-sichere nicht blockierende gleichzeitige Warteschlange. " Es handelt sich nicht um eine Prioritätswarteschlange, daher müssten Sie diese auch selbst erstellen.

Auf der anderen Seite gibt es unter Synchronisation einige Mutex-Varianten, die Ihnen das Leben erleichtern könnten.

Bottom line: TBB ist nicht wirklich diese Magie, aber es kann hilfreich sein.

    
wjl 05.12.2011 17:04
quelle
0

TBB kann Ihnen Folgendes bieten:

  • Sperrenfreie gleichzeitige Warteschlange. Ich erinnere mich an nichts über Prioritätswarteschlange, aber wie James in Kommentaren vorgeschlagen hat, können Sie es selbst über cocurrent_queue aufbauen.
  • Speicherzuordner, die auf die Leistung in Multithread-Umgebungen abgestimmt sind.
  • Synchronisierungsgrundelemente wie atomare Variablen
  • nur gute Ideen, wie Multithreading-Zeug effektiv umgesetzt werden kann

Bitte beachten Sie, dass Sie selbst dann, wenn Sie alles richtig und intensiv mit TBB tun, keinen Leistungsgewinn im Vergleich zu Ihrer eigenen Leistung bemerken. Es hängt stark von Ihrem System ab, insbesondere wenn die Kommunikation zwischen den Threads und insbesondere die Synchronisation ein Engpass ist. Es ist normalerweise, wenn Ihre Aufgaben klein sind und es viele von ihnen gibt.

    
Andriy Tylychko 13.12.2011 11:53
quelle
0

Ich habe mit einem Parallelisierungsframework einschließlich OpenMP, Cilk gearbeitet. Das ergibt eine schöne Abstraktion und macht das Parallelisieren vergleichsweise einfach. Ich bezweifle jedoch, ob diese Prioritätswarteschlangen direkt unterstützen oder sogar, wenn Sie ihre Task Queue ändern können.

Sie können prioritätsbasierte Warteschlangen verwenden, indem Sie dies angepasste TaskQueue.

Wenn Sie TBB verwenden wollen, habe ich es mit OpenMP verwendet und es scheint sich sehr gut zu integrieren. Außerdem müssen Sie sich keine Gedanken über gleichzeitige Container machen. Und es ist sehr zuverlässig im Vergleich zu anderen Implementierungen von Menschen.

Hoffe, das hilft.

    
Ankit 17.12.2011 16:37
quelle

Tags und Links