2016-11-22 113 views
0

我希望有一個變量可讀訪問CL程序中的所有內核/函數。爲此,我在文件頂部創建了一個變量,並用__global作爲前綴。OpenCL寫__全局變量

typedef struct{ 
    /* whatever */ 
} GlobalParameters; 

__global GlobalParameters params; 

我該如何設置主體代碼中的結構內的值?這甚至是可能的,或者我怎麼編輯它呢?或者我必須每次需要時將它作爲參數傳遞給內核?

回答

0

程序範圍變量意味着是常量,需要初始化。

所以,這就像:

typedef struct{ 
    float whatever; 
} GlobalParameters; 

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

,那麼你可以在任何地方使用它。但是,如果OpenCL的編譯時間是確定的,你可以用字符串替換preaparing主機端常數緩衝後改變它:

typedef struct{ 
    float whatever; 
} GlobalParameters; 

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

如果用於每變化分鐘,你可以重新編譯在設備內核編譯之前使用新的字符串替換。如果存在不變集合,則可以針對不同的內核程序編譯N次,並使用不同的上下文在它們之間切換。