传入参数触及的全局变量变得不可用

时间:2011-06-28 20:30:40

标签: opencl

人们!

我将一个充满数据的结构传递给我的内核,然后使用它遇到了以下困难(非常简化): [编辑:mac osx / xcode 3.2 on mac book pro;这个编译很明显是为了cpu]

typedef struct
    {
    float xoom;
    int   sizex;
    } varholder;

float zX,  xd;

__kernel void Harlan( __global varholder * vh )
    {
    int X = get_global_id(0), Y = get_global_id(1);

    zX = ( ( X - vh->sizex/2 ) / vh->xoom + vh->sizex/2 );  // (a)

    xd = zX;                                                // (b)  BOOM!!
    }
执行第(a)行后,标记为(b)的行(简单赋值)给出“LLVM编译器无法编译函数”。

但是,如果我们不执行第(a)行,则第(b)行就可以了。

所以,通过我用这个摆弄LOT,好像它是使用传入参数的赋值语句(a),它会混淆变量zX的未来访问。但是,当然我需要能够进一步使用计算结果。

我在文件级别声明了zX和xd,因为我的帮助函数需要它们。

有什么想法? 谢谢! 大卫

P.S。我现在已经注册,所以能够提出并接受答案,我很遗憾无法为最后帮助我的人做过(使用相同的用户名注册,但似乎无法对旧帖子投票;抱歉! )。

1 个答案:

答案 0 :(得分:1)

不,说不是这样!

我真诚地希望这不是我自己问题的“正确”答案。我发现在另一个论坛上(虽然不是同样的问题!)以下内容,我担心它指的是我正在尝试做的事情:

(报价)

你正在做标准禁止的事情。第6.5节说:

'All program scope variables must be declared in the __constant address space.'

换句话说,程序范围变量不可变。

(结束语)

......好吧,tcha !!!!什么令人震惊的不方便的限制!我确信它背后有推理。

[编辑:不是很不方便!事实上,第二天早上重新开始,这实际上非常容易解决。 (并且没有酒精。)]

你们&娃娃都知道这个,对,并没有心脏告诉我?...