2017-05-10 4 views
0

Ich habe zwei Fragen zu den Argumenten eines OpenCL-Kernels. Bitte korrigiere mich, wenn ich mich in dem Kontext irreführe, in dem ich meine Fragen beschreibe.Skalare Argumente eines OpenCL-Kerns

Die Skalarargumente (z. B. Kernel foo (int a)) werden im privaten Adressraum platziert (wie alle Kernelargumente, unabhängig davon, ob sie skalar sind oder nicht). Es ist kein __private-Schlüsselwort erforderlich; Standardmäßig werden Argumente im privaten Adressraum platziert. F1: Wer kümmert sich darum, den Skalar in den privaten Adressraum der GPU zu platzieren? Für einen Skalar ist keine explizite Übertragungsoperation (vom Adressraum der CPU zum GPU) erforderlich. Warum das? Q2: Kann ich einen Skalar als Argument ausgeben lassen? Ich möchte, neben anderen Arrays, einen Wert aus einer Kernel-Berechnung erhalten.

Antwort

1

Q1: Die OpenCL-Laufzeit kümmert sich um Ihre Kernargumente.

Q2: Nein. Sie müssten in einen Puffer oder ein Bild schreiben. Wenn Sie einen einzelnen Wert von der gesamten Ausführung des Kernels wollen, betrachten Sie ihn als Reduktion. Ihr Kernel wird möglicherweise gleichzeitig auf einer bestimmten Anzahl von Verarbeitungseinheiten ausgeführt, und diese Instanzen werden möglicherweise nicht in einer bestimmten Reihenfolge ausgeführt. Wenn Ihr Kernel einen einzelnen Wert speichert, wird jede Instanz Ihres Kernels jeweils einen Wert speichern. Jede Instanz sollte ihre eigene Stelle haben, um den Wert zu speichern, so dass eine andere nicht überschrieben wird.

+0

Danke für die Hilfe. –