【问题标题】:OpenCL Write __global variableOpenCL 写入 __global 变量
【发布时间】:2016-11-23 05:07:19
【问题描述】:

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

typedef struct{
    /* whatever */
}  GlobalParameters;

__global GlobalParameters params;

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

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

    所以,这就像:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2021-09-14
      • 2018-05-28
      相关资源
      最近更新 更多