2010-10-08 49 views
0
struct d_struct { 
// stuff 
}; 

__device__ __constant__ d_struct structs[SIZE]; 

當我打電話CUDA不斷內存無效符號

cudaMemcpyToSymbol("structs", &h_struct, sizeof(d_struct), index * sizeof(d_struct), cudaMemcpyHostToDevice) 
d_struct "h_struct"

在主機內存中,我得到一個invalid device symbol CUDA錯誤。

+0

版本/操作系統?請確保總體結構的大小小於常量內存的大小 – fabrizioM 2010-10-11 17:16:24

回答

1

如果您可以提供更多詳細信息,這將有所幫助,例如您在哪個平臺上運行以及哪個主機編譯器版本?哪個CUDA工具包版本?什麼設備?

與此同時,一些建議:

  • 確保您使用的是最新的CUDA工具包。此時3.1是當前版本,3.2版本是發佈候選版本
  • 如果您使用CUDA嚮導在Windows中運行,請嘗試切換到NVIDIA提供的標準規則文件
  • 您是否正在構建正確的計算能力?只是檢查你是不是一種編譯sm_13和sm_12例如
  • 你叫從同一個文件cudaMemcpyToSymbol()其中不斷聲明運行?如果不是,那麼它應該仍然有效,因爲查找是通過名稱而不是符號完成的,但是檢查你是否已經聲明它爲extern "C",並且你是從C++調用的
  • 鑑於你遺漏了大量的代碼最好檢查一下 - d_struct是不是模板化的?
-2

CUDA Programming Guide v4.2 D.2.2.1,它說,

__device____shared____constant__預選賽不允許在:

  • classstructunion數據成員,
  • 形式參數,
  • 在主機上執行的函數中的局部變量。
+2

這不是一個結構數據成員,它是一個結構數組。 – harrism 2012-08-31 07:07:52