我有一些通用参数声明为全局(__constant)结构,如下所示:
typedef struct
{
int a;
int b;
float c;
/// blah blah
} SomeParams;
__constant SomeParams Parameters;
Run Code Online (Sandbox Code Playgroud)
在内核中,我需要像这样使用它:
__kernel void Foo()
{
int a = Parameters.a;
/// do something useful...
}
Run Code Online (Sandbox Code Playgroud)
在执行内核之前,我不确定如何从主机初始化参数值.
我为内核参数创建缓冲区等没有问题,但由于这不是内核参数,我需要做什么?
我正在使用Cloo C#/ OpenCL绑定,但即使是原始的CL API也会有所帮助.
据我所知(但我不会发誓),你不能从以这种方式声明的主机代码初始化变量(有一个例外,见下文).您可以声明一个变量并将其初始化为:
__constant float pi = 3.14f;
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
核心: __constant float width = WIDTH
主机:使用-D定义值的构建参数构建内核WIDTH.
我过去所做的是将常量变量作为内核参数.
__kernel void Foo(__constant SomeParams Parameters)
{
int a = Parameters.a;
/// do something useful...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像任何其他内核参数一样分配和设置值.