由于OpenCL/CUDA语法,如何关闭Eclipse中的错误/警告? 我使用Eclipse作为OpenCL的编辑器,我打开了代码代码> *.Cl< /Cl>文件的语法高亮显示,就像C++代码一样。它工作得很好,但我所有的代码都被划为语法错误。有没有一种方法可以让我的语法突出和关闭错误/警告,只是为了我的代码> *.Cl< /Cl>文件> < P>,Eclipse语法HyLoad被编程为C和C++的语法,而不是OpenCL,所以它不知道OpenCL的语法扩展,例如 新关键字 新数据类型

由于OpenCL/CUDA语法,如何关闭Eclipse中的错误/警告? 我使用Eclipse作为OpenCL的编辑器,我打开了代码代码> *.Cl< /Cl>文件的语法高亮显示,就像C++代码一样。它工作得很好,但我所有的代码都被划为语法错误。有没有一种方法可以让我的语法突出和关闭错误/警告,只是为了我的代码> *.Cl< /Cl>文件> < P>,Eclipse语法HyLoad被编程为C和C++的语法,而不是OpenCL,所以它不知道OpenCL的语法扩展,例如 新关键字 新数据类型,eclipse,syntax-highlighting,cuda,opencl,nvidia,Eclipse,Syntax Highlighting,Cuda,Opencl,Nvidia,我建议新的关键字可以有条件地定义为零,例如 #define __kernel #define __global 另外,额外的类型名称也可以用类似的方法处理,例如 #define float2 float #定义了只在Eclipse编辑器中应用于OpenCL代码编译的而不是。定义可以在Eclipse首选项中设置,也可以在内核代码本身中保护 #ifndef __OPENCL_VERSION__ /* Define out keywords causing errors */ #endif

我建议新的关键字可以有条件地定义为零,例如

#define __kernel 
#define __global
另外,额外的类型名称也可以用类似的方法处理,例如

#define float2 float
#定义了只在Eclipse编辑器中应用于OpenCL代码编译的而不是。定义可以在Eclipse首选项中设置,也可以在内核代码本身中保护

#ifndef __OPENCL_VERSION__
/* Define out keywords causing errors */ 
#endif
这将有一个小问题,因为它消除了Eclipse中导航视图中函数重载之间的区别


理想的答案是重新编程CDT编辑器(Eclipse中解析您键入的文本并对其执行分析的部分),以了解OpenCL,但是这将是一项巨大的努力。

除了ggrussel的答案之外,我还做了以下步骤,这些步骤为我提供了一个可接受的语法高亮显示,同时避免了eclipse(为开普勒测试)的其他问题

  • 创建包含在所有CL文件中的头文件。头文件应该定义关键字和内置数据类型的伪结构

    #ifndef __OPENCL_VERSION__
    
    #define kernel
    #define global
    #define constant
    #define local
    
    typedef struct float2 {
      float x, y;
    } float2;
    typedef struct float3 {
      float x, y, z;
      float2 xy, xz, yx, yz, zx, zy;
    } float3;
    typedef struct float4 {
      float x, y, z, w;
      float2 xy, yx;
      float3 xyz, xzy, yxz, yzx, zxy, zyx;
    } float4;
    ... etc
    
    #endif
    
    请注意,您需要定义对基本数据类型的所有可能的访问组合,就像它们在自己的字段中一样。由于对于较大的原语(如vec8),这可能会变得相当长,因此如果使用此类原语,可能需要使用一些脚本自动预生成这些字段

  • 在工作区设置(窗口>首选项)中,在C/C++>文件类型下添加新的文件类型。使用*.CL作为模式,C++ >强>源<强>文件为类型。
  • 从实际生成中排除所有*.cl文件,右键单击文件>属性>C/C++生成>设置>从生成中排除 请注意,完成这些更改后,在编辑器正确高亮显示CL文件之前,可能需要关闭并重新打开它们

    在OpenCL下编译的CL文件示例,正确高亮显示并显示swizzling:

    #include "eclipseFakeOpenCL.h"
    
    kernel void nextIntersect() {
      float4 a,b;
    
      a.xzy = (float3)(1.0, 1.0, 0.0);
      b.xy = a.yx;
    }
    

    不过,OpenCL文件中的include指令仍然没有得到普遍支持。我没有意识到这一点,如果OpenCL中的include指令有问题,我认为最简单的解决方案是将#ifndef移到.CL文件中。哪些平台不支持它们?