OpenCL编译器之间的语法差异

时间:2012-02-02 12:14:58

标签: opencl intel nvidia amd-processor

以下代码与intel / nVidia OpenCL编译器(均基于LLVM)编译:

struct Foo{ float2 bar; };
void baz(){
   global struct Foo* foo;
   ((float*)(&foo->bar))[1]=1;
}

AMD编译器说invalid type conversion,并且仅接受global限定的代码:

((global float*))(&foo->bar))[1]=1;

根据规范,哪一个是正确的? (并且:我应该在某处报告不合格的编译器吗?)

1 个答案:

答案 0 :(得分:1)

OpenCL规范允许在转换指针时具有几乎无限的灵活性。基本上,规则是程序员知道您为特定硬件做了什么。它没有解决跨内存空间进行转换的特定问题,因此这应该被视为未定义的行为。供应商之间的差异是可以预期的。

随着CL规范的逐渐成熟,你可以预期上述问题会被明确解决,我猜。