0

我将分配主机内存的方法从方法 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));
}
4

1 回答 1

1

他们都工作正常。cudaMallocHost然而,和之间存在差异malloc。原因是cudaMallocHost分配固定内存,因此操作系统在后台执行类似的操作malloc以及一些额外的功能来固定页面。这意味着cudaMallocHost通常需要更长的时间。

话虽如此,如果您反复想cudaMemcpy从单个缓冲区中获取数据,那么cudaMallocHost从长远来看可能会受益,因为从固定内存中传输数据会更快。

此外,您需要使用固定内存将数据传输/计算与streams.

于 2016-02-22T19:39:20.183 回答