首页 > 解决方案 > OpenCL:帮助解析 cl 代码以进行 JIT 编译

问题描述

我尝试使用 OpenCL C++ API 编译一些 .cl 代码。对于我在网上找到的以下代码(用于随机数生成),我不断收到 JIT 编译错误。CL语言中函数的定义是:

uint2 MWC_SkipImpl_Mod64(uint2 curr, ulong A, ulong M, ulong distance)
{
    ulong m=MWC_PowMod64(A, distance, M);
    ulong x=curr.x*(ulong)A+curr.y;
    x=MWC_MulMod64(x, m, M);
    return (uint2)((uint)(x/A), (uint)(x%A));
}

LLVM 给我的错误是:

<program source>:128:2: error: conflicting types for 'MWC_SkipImpl_Mod64'
<program source>:54:7: note: previous definition is here
uint2 MWC_SkipImpl_Mod64(uint2 curr, ulong A, ulong M, ulong distance)
      ^
<program source>:133:12: error: returning '__uint2' from a function with incompatible result type 'int'
    return (uint2)((uint)(x/A), (uint)(x%A));

这里的代码也使用了这个函数:

uint2 tmp = MWC_SkipImpl_Mod64((uint2)(s->x,s->c), (ulong)(MWC64X_A), (ulong)(MWC64X_M), distance);

出于某种原因,它不喜欢(uint2)((uint)(x/A), (uint)(x%A))并认为我正在尝试将 int 强制返回到 unsigned int2 中。我知道在解析过程中,生成的源代码行以转义字符“\”结尾。

这可能是我遇到以下错误的原因吗?更重要的是,我该如何克服它,在扫描源代码的过程中我应该过滤什么类型的特殊字符?

谢谢, 胺

标签: parsingopencljit

解决方案


我终于找到了上面没有编译的原因:JIT 编译器没有看到任何要编译的内核函数并且给我一个错误-11。

结案。

谢谢,


推荐阅读