cudaFreeHost()无效参数错误

时间:2017-04-12 16:24:27

标签: c++ cuda malloc free

我在课程中使用cudaMallocHost()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();
}

上述代码在调用cudaFreeHost()时返回错误无效参数(值11),cudaFreeHost不会返回错误。

我尝试将指针数组更改为不同的变量,但错误仍然存​​在。我甚至将cudaFreeHost()放在cudaMallocHost()之后,但仍有错误。

我确认每次拨打cudaFreeHost()时都不会发生错误。

添加cudaDeviceSynchronize()以确保完成所有复制操作。

如果我将所有cudaHost操作改为正常操作(即new和delete),程序运行正常。

我尝试将位图中的每个变量更改为b1,b2,b3,b4,b5,如下所示,但同样的错误发生。

cudaMallocHost(&b1, sizeof(int) * 10000);
cudaFreeHost(b1);

1 个答案:

答案 0 :(得分:-2)

通过在分配存储器之前首先将该点初始化为零来解决该问题,即在for循环的开始处添加位图[i] = 0。 不确定这会如何影响结果,但它确实有效。