我正在使用cudaMallocHost()
和cudaFreeHost()
。調用cudaFreeHost()
,cudaFreeHost
不返回錯誤時cudaFreeHost()無效參數錯誤
#include "cuda.h"
#include "cuda_runtime.h"
class myClass{
public:
int* bitmap[5];
void Malloc(){
for (int i = 0 ; i < 5 ; i++){
cudaMallocHost(&bitmap[i], sizeof(int)*10000);
memset(bitmap[i], 0, sizeof(int)*10000);
}
}
void Delete(){
for (int i = 0 ; i < 5; i++){
cudaFreeHost(bitmap[i]);
}
}
};
int main(){
myClass mc;
mc.Malloc();
//copy 'bitmap[]' to gpu and call some kernel function
cudaDeviceSynchronize();
mc.Delete();
}
上面的代碼返回錯誤的參數無效(價值11):我的代碼示例。
我試圖將指針數組更改爲不同的變量,但錯誤仍然存在。我甚至在cudaMallocHost()
後面加上cudaFreeHost()
,但仍然有錯誤。
我確認每次我撥打cudaFreeHost()
時都不會發生錯誤。
添加cudaDeviceSynchronize()
以確保完成所有複製操作。
如果我將所有cudaHost操作更改爲正常操作(即新建和刪除),則該程序正常工作。
我試圖將位圖中的每個變量更改爲b1,b2,b3,b4,b5,如下所示,但會發生相同的錯誤。
cudaMallocHost(&b1, sizeof(int) * 10000);
cudaFreeHost(b1);
你能提供你的原始代碼嗎?您提供的示例不是合法的C++ – willkill07
嘗試'int * bitmap [5];'而不是'int bitmap [5];' –
@ willkill07對於草率代碼感到抱歉。我編輯它,它現在應該是合法的C++ – Edward