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