我有一些正在尝试使用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强制返回到一个无符号的int2中。我知道在解析过程中,生成的源代码行以转义字符'\‘结尾。
这可能是我在下面得到的错误的原因吗?更重要的是,我如何克服它,在扫描源代码的过程中,我应该过滤哪些类型的特殊字符?
谢谢,阿敏
发布于 2020-10-22 00:49:42
我终于找到了上面没有编译的原因: JIT编译器没有看到任何要编译的内核函数,并抛出了一个错误-11。
结案了。
谢谢,
发布于 2020-10-20 21:00:29
您将.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;
}https://stackoverflow.com/questions/64444507
复制相似问题