CUDA:使用cudaMallocHost(...)指向指针的内存分配;

时间:2016-02-22 09:47:26

标签: cuda malloc pointer-to-pointer

我改变了方法,将方法1中的主机内存分配给方法2,如下面的代码所示。代码可以编译和运行,没有任何错误。 我只是想知道使用方法2为指针指针分配内存是一种正确的方法还是任何副作用。

#define TESTSIZE  10
#define DIGITSIZE 5

//Method 1  
int **ra;
ra = (int**)malloc(TESTSIZE * sizeof(int));
for(int i = 0; i < TESTSIZE; i++){
    ra[i] = (int *)malloc(DIGITSIZE * sizeof(int));
}

//Method 2  
int **ra;
cudaMallocHost((void**)&ra, TESTSIZE * sizeof(int));

for(int i = 0; i < TESTSIZE; i++){
    cudaMallocHost((void**)&ra[i], DIGITSIZE * sizeof(int));
}

1 个答案:

答案 0 :(得分:1)

他们两个都很好。但是,cudaMallocHostmalloc之间存在差异。原因是cudaMallocHost分配固定内存,因此操作系统执行与malloc类似的操作以及一些额外的功能来固定页面。这意味着cudaMallocHost通常需要更长时间。

话虽这么说,如果您反复想要cudaMemcpy来自单个缓冲区,那么cudaMallocHost可能会从长远来看受益,因为它可以更快地从固定内存传输数据。

此外,您必需使用固定内存与streams重叠数据传输/计算。