在openCL内核代码中使用printf语句
在下面的代码片段中,我试图在代码中使用在openCL内核代码中使用printf语句,c,string,escaping,kernel,opencl,C,String,Escaping,Kernel,Opencl,在下面的代码片段中,我试图在代码中使用printf()来尝试打印出input[I]计算的结果,这样我就可以看到它工作正常 但是,这并不像我希望的那样有效,因为printf()中的引号与内核的字符串格式相混淆,因此整个程序无法编译。我尝试使用转义字符\“,它允许我为内核键入字符串,但编译时会出现预期的表达式和缺少字符的错误 有人知道如何解决这个问题吗?这是检查内核代码结果的最佳方法吗 const char *KernelSource = "\n" "__kernel voi
printf()
来尝试打印出input[I]
计算的结果,这样我就可以看到它工作正常
但是,这并不像我希望的那样有效,因为printf()
中的引号与内核的字符串格式相混淆,因此整个程序无法编译。我尝试使用转义字符\“
,它允许我为内核键入字符串,但编译时会出现预期的表达式和缺少字符的错误
有人知道如何解决这个问题吗?这是检查内核代码结果的最佳方法吗
const char *KernelSource = "\n"
"__kernel void relax( \n"
" __global double* input, \n"
" __global double* output, \n"
" __global int N) \n"
"{ \n"
" int i = get_global_id(0); \n"
" if(i > 0 && i < N-1){ \n"
" input[i] = 0.25*input[i-1]+0.5*input[i]+0.25*input[i+1]; \n"
" printf("input[%d] %f \n", i, input[i] )\n"
" } \n"
"} \n"
"\n";
const char*KernelSource=“\n”
“\u内核无效松弛(\n”
\u全局双*输入\n
\u全局双*输出,\n
“\uuu全局整数\N”
“{\n”
“int i=get_global_id(0);\n”
“如果(i>0&&i
您需要转义引号,并且需要转义格式字符串中\n
的\
" printf(\"input[%d] %f \\n\", i, input[i] )\n"
对于格式字符串中的
\n
,需要转义引号和\
" printf(\"input[%d] %f \\n\", i, input[i] )\n"
不,就像我说过的,我试过了。我收到了上面提到的错误消息。@Chucky如果您从某个地方收到错误消息,请复制/粘贴该错误消息并显示给我们,并告诉我们是哪个工具生成的。我还不确定是否接受您的答案,因为我仍然无法识别printf()在内核代码中。你的建议首先让它得到了认可!@Chucky OpenCL教程展示了如何传达结果。这很重要,你必须将数据传回应用程序并让应用程序打印出来。不过,你最好在单独的文件中指定OpenCL代码,而不是作为字符串您的host C程序中有。不,就像我说过的,我试过了。我收到了上面提到的错误消息。@Chucky如果您从某个地方收到错误消息,请复制/粘贴该错误消息并显示给我们,并告诉我们是哪个工具生成的。我不确定是否接受您的答案,因为我仍然无法识别printf()在内核代码中。你的建议首先让它得到了认可!@Chucky OpenCL教程展示了如何传达结果。这很重要,你必须将数据传回应用程序并让应用程序打印出来。不过,你最好在单独的文件中指定OpenCL代码,而不是作为字符串在你的宿主C程序中。你能提供一些更详细的信息吗?为什么你要将这个函数构建成一个字符串?当你转义字符串时,你会得到什么错误?你是在支持内核printf的OpenCL平台上这样做的吗?它不是标准的一部分,也不是所有的供应商都支持它。是的,我刚才使用了nos的答案来转义\n现在它无法工作,因为它无法识别printf。我不知道现在如何在没有printf的情况下打印输出。您使用的是什么设备?如果您使用的是CPU,这是可能的,但是如果您使用的是GPU,那么这是不可能的。您能提供一些详细信息吗?为什么要将此函数构建为字符串?当您转义字符串时您会遇到什么错误?您是在支持内核printf的OpenCL平台上执行此操作的吗?它不是标准的一部分,也不是所有供应商都支持它。是的,我刚刚使用了nos的答案进行转义,\n但现在它不起作用,因为它无法识别printf。我现在不知道如何在没有printf的情况下打印输出。您使用的是什么设备如果您使用的是CPU,这是可能的,但如果您使用的是GPU,那么这是不可能的。