人们!
我将一个充满数据的结构传递给我的内核,然后使用它遇到了以下困难(非常简化): [编辑: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。我现在已经注册,所以能够提出并接受答案,我很遗憾无法为最后帮助我的人做过(使用相同的用户名注册,但似乎无法对旧帖子投票;抱歉! )。
答案 0 :(得分:1)
不,说不是这样!
我真诚地希望这不是我自己问题的“正确”答案。我发现在另一个论坛上(虽然不是同样的问题!)以下内容,我担心它指的是我正在尝试做的事情:
(报价)
你正在做标准禁止的事情。第6.5节说:
'All program scope variables must be declared in the __constant address space.'
换句话说,程序范围变量不可变。
(结束语)
......好吧,tcha !!!!什么令人震惊的不方便的限制!我确信它背后有推理。
[编辑:不是很不方便!事实上,第二天早上重新开始,这实际上非常容易解决。 (并且没有酒精。)]
你们&娃娃都知道这个,对,并没有心脏告诉我?...