2014-11-21 297 views
3

在CUDA C,爲什麼下面的代碼錯誤:表達式必須具有整數或枚舉類型

findMinMax<<sizeof(lum)/1024,1024>>(lum,&min_logLum,&max_logLum); 

給這個錯誤?

error: expression must have integral or enum type 
+0

您的代碼可能在更多級別上出錯。解決這個問題後,很可能會遇到運行時錯誤和崩潰。您可能想要參考SDK附帶的CUDA示例以及本示例,瞭解內核啓動的典型範例:http://docs.nvidia.com/cuda/cuda-c-programming-guide/ index.html#device-memory – 2014-11-21 04:08:48

回答

5

您需要使用三重尖括號作爲內核啓動語法的一部分:

findMinMax<<<sizeof(lum)/1024,1024>>>(lum,&min_logLum,&max_logLum); 

應該可以解決編譯錯誤,只要剩下的就是正確的(例如,集合的參數匹配的內核原型)。

注意一些其他的東西都在可疑你進入內核:

  • 您輪每格,而不是向下向上的塊數。例如,如果sizeof(lum)的計算結果爲1500,則仍然只啓動1個1024線程的數據塊。這可能不是你打算做的。

  • 您通過主機指針&min_logLum&max_logLum內核,這又可能是你不打算在這裏做什麼,但它是很難說沒有看到你的代碼的其餘部分。

+0

OMG OOPS !!!雖然這是一個誤導性的錯誤信息。爲什麼編譯器不能告訴我這些V形圖是混亂的?儘管感謝您的幫助! – 2014-11-21 04:09:20

+1

@RenéG,因爲編譯器在遇到<< and >>時會看到有效的語法。由於缺少斜角括號,您的啓動配置將成爲一系列操作員呼叫(<<, >>,「,」)。編譯器對錶達式的操作數進行語義檢查,然後識別提供的錯誤。編譯器可能會給你一個提示,你可能從錯誤的上下文中得到了什麼(例如,clang就是這樣做的)。 – 2014-11-21 10:34:12

+0

@Michael_Haidl哦,好吧,這是有道理的 – 2014-11-21 21:15:14

相關問題