在CUDA C中,为什么以下代码
findMinMax<<sizeof(lum)/1024,1024>>(lum,&min_logLum,&max_logLum);
发出此错误?
error: expression must have integral or enum type
答案 0 :(得分:6)
您需要使用 triple 角度括号作为内核启动语法的一部分:
findMinMax<<<sizeof(lum)/1024,1024>>>(lum,&min_logLum,&max_logLum);
这应解决编译错误,前提是其余部分正确(例如,参数集与内核原型匹配)。
请注意,启动内核的方式还有一些其他问题:
您将每个网格的块数向下舍入而不是向上。例如,如果sizeof(lum)
的计算结果为1500,则仍然只启动1个1024个线程的块。这可能不是你打算做的。
您将主机指针&min_logLum
和&max_logLum
传递给内核,这可能不是您打算在此处执行的操作,但是如果没有看到剩余的内容,很难说你的代码。