什么是cudaMallocHost

时间:2016-06-15 02:52:46

标签: cuda

您好我想分配固定内存但不使用cudaMallocHost,我已阅读this post并试图使用固定的mmap来模拟' cudaMallocHost' :

data_mapped_ = (void *)mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd_, 0);
if(munmap(data_mapped_, sb.st_size) == -1) {
    cerr << "munmap failed" << endl;
    exit(-1);
}

data_mapped_ = (void *)mmap(data_mapped_, sb.st_size, PROT_READ, MAP_SHARED|MAP_FIXED, fd_, 0);

但这仍然没有cudaMallocHost那么快。那么固定内存的正确c实现是什么?

1 个答案:

答案 0 :(得分:0)

CUDA固定内存(例如cudaMallocHostcudaHostAlloccudaHostRegister返回的那些指针)具有多个特征。一个特征是它不可分页,这个特性主要由底层系统/ OS调用提供。

另一个特点是它使用CUDA驱动程序注册。该注册意味着驱动程序跟踪固定分配的起始地址和大小。它使用该信息确切地决定如何处理触及该区域的未来API调用,例如cudaMemcpycudaMemcpyAsync

您可以通过执行自己的系统调用来提供不可分页的方面。执行CUDA驱动程序注册功能的唯一方法是实际调用上述CUDA API调用之一。

因此,没有纯粹的C库或系统库调用的序列可以完全模仿上述CUDA API调用之一的行为,这些调用提供了&#34;固定&#34;存储器中。