2016-11-22 2 views
0

Ich hätte gerne eine Variable mit Lesezugriff auf alle Kernel/Funktionen in einem CL-Programm. Dafür habe ich eine Variable am Anfang der Datei erstellt und sie mit __global vorangestellt.OpenCL Write __global Variable

typedef struct{ 
    /* whatever */ 
} GlobalParameters; 

__global GlobalParameters params; 

Wie kann ich jetzt die Werte in diesem Struct aus dem Host-Code setzen? Ist das überhaupt möglich, oder wie kann ich es sonst bearbeiten? Oder muss ich es als Parameter an den Kernel jedes Mal weitergeben, wenn ich es brauche?

Antwort

0

Programmbereichsvariablen sind Konstanten und müssen initialisiert werden.

Also, das funktioniert wie:

typedef struct{ 
    float whatever; 
} GlobalParameters; 

__constant GlobalParameters params=(GlobalParameters){3.14f}; 

dann können Sie es überall verwenden können. Aber wenn OpenCL-Compile-Zeit für sie in Ordnung ist, können Sie es ändern, mit String Ersatz nach Preaparing der Host-Seite konstant Puffer:

typedef struct{ 
    float whatever; 
} GlobalParameters; 

__constant GlobalParameters params=(GlobalParameters){##replace_0##}; 

, wenn dies für Minuten pro Wechsel verwendet wird, können Sie erneut kompilieren Verwenden eines neuen Zeichenfolgenaustauschs vor dem Kompilieren des Einheitenkerns. Wenn sich Sätze nicht ändern, können Sie N-mal für verschiedene Kernel-Programme kompilieren und zwischen ihnen wechseln, indem Sie verschiedene Kontexte verwenden.

Verwandte Themen