OpenCL 写入 __global 变量

OpenCL Write __global variable

我想要一个对 CL 程序中的所有 kernels/functions 具有读取权限的变量。为此,我在文件顶部创建了一个变量,并在其前面加上 __global.

typedef struct{
    /* whatever */
}  GlobalParameters;

__global GlobalParameters params;

我现在如何从主机代码中设置该结构中的值?这甚至可能吗,或者我该如何编辑它?或者我每次需要它时都必须将它作为参数传递给内核吗?

程序范围变量是常量,需要初始化。

所以,这就像:

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