OpenCL编译器的空白问题

OpenCL编译器的空白问题,opencl,cloo,Opencl,Cloo,我正试图开始使用OpenCL,但遇到了OpenCL编译器关于空白的奇怪行为,似乎找不到任何关于这方面的文档 C风格的单行注释//foo会立即导致无意义的生成错误:在source:error:expected a}的末尾。多行注释/*bar*/似乎效果不错 换行符似乎在没有添加空格的情况下被删除,这可能会导致错误。此示例将不会编译,因为: __kernel void TestKernel() {} line 1: error: identifier "__kernelvoid" is undef

我正试图开始使用OpenCL,但遇到了OpenCL编译器关于空白的奇怪行为,似乎找不到任何关于这方面的文档

C风格的单行注释//foo会立即导致无意义的生成错误:在source:error:expected a}的末尾。多行注释/*bar*/似乎效果不错

换行符似乎在没有添加空格的情况下被删除,这可能会导致错误。此示例将不会编译,因为:

__kernel
void TestKernel() {}

line 1: error: identifier "__kernelvoid" is undefined
这可能完全取决于我的机器和/或配置,但有人能确认这些事情不应该是这样吗


我正在通过.net/C中的Cloo使用OpenCL。驱动程序来自AMD OpenCL 2.0 AMD-APP 1642.5,我想我已经找到了答案。我是这样做的:

var program = new ComputeProgram(context, File.ReadAllLines(filename));
File.ReadAllLines返回一个字符串数组,其中不包含换行符,这是我收到的错误的根源

改为使用File.ReadAllTest修复了所有问题:

var program = new ComputeProgram(context, File.ReadAllText(filename));

但在我看来,Cloo或OpenCL API接受了字符串数组,但只是将其连接在一起,这在一定程度上是罪魁祸首。

\n有时会治愈,尤其是在defineJavaCL以类似的方式表现时。如果最后一行没有以换行符结尾,编译将中止。