問題CUDA的cudaMemcpyToSymbol()拋出「無效的參數」錯誤
我想一個int
陣列拷貝到設備中的常量內存,但我不斷收到以下錯誤:
[ERROR] 'invalid argument' (11) in 'main.cu' at line '386'
該代碼
有很多的代碼開發,所以我要簡化我有什麼。
我聲明瞭一個設備__constant__
變量在我的main.cu文件的頂部,在任何函數之外。
__device__ __constant__ int* dic;
我也有一個主機變量,flatDic
,這是malloc分配方式如下,裏面main()
:
int* flatDic = (int *)malloc(num_codewords*(bSizeY*bSizeX)*sizeof(int));
然後我嘗試這樣做給flatDic
的內容複製到dic
,也在main()
:
cudaMemcpyToSymbol(dic, flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
這cudaMemcpyToSymbol()
調用它的線main.cu的386,它是在哪裏上述錯誤被拋出。
我已經試過
這是我到目前爲止已經試過要解決的問題:
我已經試過所有的以下的,總是返回相同的錯誤:
cudaMemcpyToSymbol(dic, &flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
cudaMemcpyToSymbol(dic, flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
cudaMemcpyToSymbol(dic, &flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int), 0, cudaMemcpyHostToDevice);
cudaMemcpyToSymbol(dic, flatDic, num_codewords*(bSizeY*bSizeX)*sizeof(int), 0, cudaMemcpyHostToDevice);
我也試過cudaMalloc()
的變量之前調用cudaMemcpyToSymbol()
。 cudaMalloc()
沒有錯誤,但cudaMemcpyToSymbol()
錯誤仍然存在。
cudaMalloc((void **) &dic, num_codewords*(bSizeY*bSizeX)*sizeof(int));
我也搜索廣泛深入的網頁,文檔,論壇,實例等,都無濟於事。
有人看到我的代碼有什麼問題嗎?提前致謝。
「我也仔細搜索過網絡,文檔,論壇,例子等,都無濟於事。」 ...對於基本呼叫始終從CUDA C編程指南開始 - 1.按下「Ctrl + S」並鍵入您正在瀏覽您的瀏覽器/ PDF閱讀器的呼叫。 2.閱讀任何適用的內容並查看指南的代碼示例。 3.如果#2失敗,那麼只能去論壇跳水。在這種情況下,信息在指南中是正確的,直接形式NVIDIA - 只是關於如何解決CUDA API調用問題的一些未來建議。 – 2012-03-13 04:09:24
我通常從HTML格式的參考指南開始。 [這裏是CUDA 4.1參考](http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/modules.html)谷歌的通話名稱通常會變成這樣。檢查參考後,檢查編程指南。 – harrism 2012-03-13 11:19:12