cudaFreeHost() 无效参数错误

cudaFreeHost() invalid arguments error

本文关键字:参数 错误 无效 cudaFreeHost      更新时间:2023-10-16

我在类中使用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 操作更改为正常操作(即新建和删除),程序工作正常。

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

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

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