首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL:帮助解析cl代码以进行即时编译

OpenCL:帮助解析cl代码以进行即时编译
EN

Stack Overflow用户
提问于 2020-10-20 19:47:39
回答 2查看 69关注 0票数 0

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

代码语言:javascript
复制
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给我的错误是:

代码语言:javascript
复制
<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));

下面的代码中也使用了这个函数:

代码语言:javascript
复制
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强制返回到一个无符号的int2中。我知道在解析过程中,生成的源代码行以转义字符'\‘结尾。

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

谢谢,阿敏

EN

回答 2

Stack Overflow用户

发布于 2020-10-22 00:49:42

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

结案了。

谢谢,

票数 1
EN

Stack Overflow用户

发布于 2020-10-20 21:00:29

您将.cl文件读取为字符串的方式似乎是问题所在。可能是每行末尾的转义字符。尝试使用以下命令读取文件:

代码语言:javascript
复制
#include <string>
#include <fstream> // read/write files
string read_file(const string path) { // takes filepath as input, returns content of file as string
    ifstream file(path, ios::in);
    const string r((istreambuf_iterator<char>(file)), istreambuf_iterator<char>());
    file.close();
    return r;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64444507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档