NVIDIA CUDA 4.0,使用运行时API对内存进行页面锁定

时间:2011-04-27 12:30:49

标签: gpu nvidia cuda

NVIDIA CUDA 4.0(此处假设为RC2)提供了一个很好的功能,即通过“普通”malloc函数锁定之前分配的内存范围。这可以使用驱动程序API函数来完成:

CUresult cuMemHostRegister (void * p, size_t bytesize, unsigned int Flags);

现在,使用运行时API完成了项目的开发。不幸的是,运行时API似乎不提供像cuMemHostRegister这样的函数。我真的想避免混合驱动程序和运行时API调用。

有没有人知道如何使用标准malloc分配先前分配的内存?不应使用标准的libc函数,因为页面锁定是为了快速传输到GPU而暂存内存,所以我真的想坚持“CUDA”。

1 个答案:

答案 0 :(得分:3)

4.0运行时API提供cudaHostRegister(),它正是您所要求的。请注意,锁定的内存分配必须与主机页面对齐,因此您可能应该使用mmap()posix_memalign()(或其中一个亲属)来分配内存。从标准cudaHostRegister()传递malloc()任意大小的分配可能会因参数无效而失败。