我想拥有一个对CL程序中所有内核/函数具有读访问权限的变量。为此,我在File的顶部创建了一个变量,并以__global为前缀。
typedef struct{
/* whatever */
} GlobalParameters;
__global GlobalParameters params;
如何从主机代码中设置Struct里面的值?这甚至是可能的,或者我怎么能编辑它呢?或者我每次需要时都必须将它作为参数传递给内核?
答案 0 :(得分:0)
程序范围变量是常量,需要初始化。
所以,这就像:
typedef struct{
float whatever;
} GlobalParameters;
__constant GlobalParameters params=(GlobalParameters){3.14f};
然后你可以在任何地方使用它。但是如果opencl-compile-time没问题,你可以在预备主机端常量缓冲区后用字符串替换来改变它:
typedef struct{
float whatever;
} GlobalParameters;
__constant GlobalParameters params=(GlobalParameters){##replace_0##};
如果每次更改使用这几分钟,您可以在设备内核编译之前使用新的字符串替换重新编译它。如果存在非更改集,则可以针对不同的内核程序编译N次,并使用不同的上下文在它们之间切换。