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