OpenCL-Synchronisation zwischen Arbeitsgruppen

8

Ist es möglich, OpenCL-Arbeitsgruppen zu synchronisieren?

Zum Beispiel habe ich 100 Arbeitsgruppen in jeder Arbeitsgruppe - Gruppen haben nur einen Gegenstand (frag mich nicht, warum, das ist ein Beispiel), und ich muss jedem Arbeitsgegenstand eine Schranke geben, die dafür sorgt, dass alles funktioniert -Gruppen werden fortgesetzt, nachdem jedes Arbeitselement in diesen 100 Arbeitsgruppen diesen Barriere-Punkt erreicht hat.

    
pierre tautou 05.05.2011, 08:52
quelle

2 Antworten

6

Nein, das kannst du nicht. Sie können Threads innerhalb einer Gruppe synchronisieren und Kernel-Ausführungen in einer Befehlswarteschlange synchronisieren.

Sie können möglicherweise eine kleine Anzahl von Gruppen synchronisieren, solange sie alle gleichzeitig ausgeführt werden und atomare Zugriffe verwenden. Aber es wird einfrieren, wenn einige Gruppen später geplant werden, und Sie haben keine Kontrolle darüber.

    
Eric Bainville 05.05.2011, 09:08
quelle
4

Mit einem Wort, nein, das kannst du nicht. Das OpenCL-Paradigma ist ein datenparalleles, in dem Arbeitsgruppen unabhängig sein sollen. Der einzige Workgroup Scope Synchronisationsmechanismus befindet sich auf der Ebene der Befehlswarteschlange, d. separater Kernel startet. Wenn Ihr Algorithmus dies nicht berücksichtigen kann, benötigen Sie entweder einen neuen Algorithmus oder ein anderes Programmiermodell.

Sie müssen daran denken, dass es oft weit mehr Arbeitsgruppen als Hardware gibt, um sie gleichzeitig auszuführen. In solchen Fällen ist eine Synchronisation nicht möglich. Es gibt Möglichkeiten, einen Spinlock oder einen kritischen Abschnitt über eine hardwarespezifische Anzahl von Arbeitsgruppen mit primitiven primitiven Speicherzugriffsrezepten zu implementieren, sie sind jedoch in Wirklichkeit ein Missbrauch des Programmiermodells und sind nur dort nützlich, wo es relativ wenig Interaktion zwischen Arbeitsgruppen gibt / p>     

talonmies 05.05.2011 09:27
quelle

Tags und Links