错误:表达式必须具有整数或枚举类型

Ell*_*sky 3 c cuda

在CUDA C中,为什么会出现以下代码

findMinMax<<sizeof(lum)/1024,1024>>(lum,&min_logLum,&max_logLum);
Run Code Online (Sandbox Code Playgroud)

给出这个错误?

error: expression must have integral or enum type
Run Code Online (Sandbox Code Playgroud)

voi*_*ptr 6

您需要使用三角形括号作为内核启动语法的一部分:

findMinMax<<<sizeof(lum)/1024,1024>>>(lum,&min_logLum,&max_logLum);
Run Code Online (Sandbox Code Playgroud)

这应该解决编译错误,前提是其余的是正确的(例如,参数集与内核原型匹配).

请注意,启动内核的方式还有一些其他问题:

  • 您将每个网格的块数减少而不是向上.例如,如果sizeof(lum)计算结果为1500,则仍然只启动1个1024个线程的块.这可能不是你打算做的.

  • 你传递主机指针&min_logLum&max_logLum内核,这可能不是你打算在这里做的,但是如果没有看到你的其余代码就很难分辨.