OpenCL 编译器之间的语法差异 [关闭]

Posted

技术标签:

【中文标题】OpenCL 编译器之间的语法差异 [关闭]【英文标题】:Syntax differences between OpenCL compilers [closed] 【发布时间】:2012-02-25 02:19:33 【问题描述】:

以下代码使用 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;

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

【问题讨论】:

可能是 AMD 编译器,因为 nVidia 编译器通常更宽松。 Intel/nVidia 编译器是否接受具有全局资格的代码? global 的变体被所有人接受。 抱歉,我们真的不再鼓励列出问题了。 【参考方案1】:

OpenCL 规范在转换指针方面提供了几乎无限的灵活性。基本上,规则是你的程序员知道你在为你的特定硬件做什么。它没有解决跨内存空间转换的具体问题,因此这可能应该被视为未定义的行为。供应商之间的差异是意料之中的。

我猜,随着 CL 规范随着时间的推移逐渐成熟,您可以期待明确解决上述问题。

【讨论】:

强制转换(当然)并不意味着跨越内存空间,英特尔/nVidia 编译器正确解释它(即目标指针空间是被强制转换的指针之一)。好吧,我将开始写下这些问题。是否有可能将问题转换为 wiki 类型的问题,以便在此处收集此类问题? 是的 - 我认为您可以将其作为社区 wiki 问题,因为您是 OP。

以上是关于OpenCL 编译器之间的语法差异 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中,JDK,JRE和JVM之间的差异

编译 OpenCL 应用程序和使用可用编译器选项的正确方法

使用 Intel 编译器的 Windows 和 Linux 之间的性能差异:查看程序集

代码指定的双精度和编译器选项双精度之间的差异

Rust闭包和Haskell lambda有什么区别? [关闭]

OpenCL Unrolling Loops优化