【发布时间】:2012-01-29 02:56:30
【问题描述】:
cudaMalloc 分配失败是否可能是因为没有可用的计算机内存?
虽然 GPU 内存可用,但当 RAM(计算机内存)已满时,cudaMalloc 会失败。
我的代码可以总结为以下示例代码:
int main()
{
size_t N=sizeof(int)*100000000;
while(true)
{
int *d_a,*d_b;
if ( cudaSuccess !=cudaMalloc(&d_a, N)) printf("Error Allocating GPU Memory");
if ( cudaSuccess !=cudaMalloc(&d_b, N)) printf("Error Allocating GPU Memory");
cudaMemset(d_a,1,N);
cudaMemset(d_b,2,N);
int *h_a= (int *)malloc(N);
int *h_b=(int *)malloc(N);
if(!h_a || !h_b) printf("Error Allocating CPU Memory");
cudaMemcpy(d_a,h_a, N, cudaMemcpyHostToDevice);
cudaMemcpy(d_b,h_b, N, cudaMemcpyHostToDevice);
cudaFree(d_a);
cudaFree(d_b);
}
getch();
return 1;
}
以下代码仅在计算机内存已满时无法分配GPU内存!
我得到的错误是Error Allocating GPU Memory 而不是Error Allocating CPU Memory
【问题讨论】:
-
可能 cudaMalloc 也需要一些主机内存才能完成。