如何解决OpenCL:帮助解析cl代码以进行JIT编译
我有一些.cl代码,我正在尝试使用OpenCL C ++ API进行编译。对于在网上发现的以下代码(用于随机数生成),我一直收到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 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。我知道在解析期间,生成的源代码行以转义符'\'结尾。
这可能是我遇到以下错误的原因吗?更重要的是,我该如何克服它,在扫描源代码期间应过滤哪种类型的特殊字符?
谢谢, 胺
解决方法
我终于找到了无法编译上述内容的原因:JIT编译器看不到要编译的任何内核函数,并向我抛出了错误-11。
案例已关闭。
谢谢
,将.cl
文件读取为字符串的方式似乎是问题所在。可能是每行结尾处的转义字符。尝试使用以下方法读取文件:
#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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。