在CUDA C,为什么下面的代码错误:表达式必须具有整数或枚举类型
findMinMax<<sizeof(lum)/1024,1024>>(lum,&min_logLum,&max_logLum);
给这个错误?
error: expression must have integral or enum type
在CUDA C,为什么下面的代码错误:表达式必须具有整数或枚举类型
findMinMax<<sizeof(lum)/1024,1024>>(lum,&min_logLum,&max_logLum);
给这个错误?
error: expression must have integral or enum type
您需要使用三重尖括号作为内核启动语法的一部分:
findMinMax<<<sizeof(lum)/1024,1024>>>(lum,&min_logLum,&max_logLum);
应该可以解决编译错误,只要剩下的就是正确的(例如,集合的参数匹配的内核原型)。
注意一些其他的东西都在可疑你进入内核:
您轮每格,而不是向下向上的块数。例如,如果sizeof(lum)
的计算结果为1500,则仍然只启动1个1024线程的数据块。这可能不是你打算做的。
您通过主机指针&min_logLum
和&max_logLum
内核,这又可能是你不打算在这里做什么,但它是很难说没有看到你的代码的其余部分。
OMG OOPS !!!虽然这是一个误导性的错误信息。为什么编译器不能告诉我这些V形图是混乱的?尽管感谢您的帮助! – 2014-11-21 04:09:20
@RenéG,因为编译器在遇到<< and >>时会看到有效的语法。由于缺少斜角括号,您的启动配置将成为一系列操作员呼叫(<<, >>,“,”)。编译器对表达式的操作数进行语义检查,然后识别提供的错误。编译器可能会给你一个提示,你可能从错误的上下文中得到了什么(例如,clang就是这样做的)。 – 2014-11-21 10:34:12
@Michael_Haidl哦,好吧,这是有道理的 – 2014-11-21 21:15:14
您的代码可能在更多级别上出错。解决这个问题后,很可能会遇到运行时错误和崩溃。您可能想要参考SDK附带的CUDA示例以及本示例,了解内核启动的典型范例:http://docs.nvidia.com/cuda/cuda-c-programming-guide/ index.html#device-memory – 2014-11-21 04:08:48