Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在openCL内核代码中使用printf语句_C_String_Escaping_Kernel_Opencl - Fatal编程技术网

在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,那么这是不可能的。