OpenCL写__global变量

时间:2016-11-22 17:24:20

标签: opencl

我想拥有一个对CL程序中所有内核/函数具有读访问权限的变量。为此,我在File的顶部创建了一个变量,并以__global为前缀。

typedef struct{
    /* whatever */
}  GlobalParameters;

__global GlobalParameters params;

如何从主机代码中设置Struct里面的值?这甚至是可能的,或者我怎么能编辑它呢?或者我每次需要时都必须将它作为参数传递给内核?

1 个答案:

答案 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次,并使用不同的上下文在它们之间切换。