2011-12-28 8 views
0

空きコンピュータメモリがないため、cudaMallocの割り当てが失敗する可能性はありますか?
GPUメモリが使用可能ですが、RAM(コンピュータメモリ)がいっぱいになるとcudaMallocが失敗します。
私のコードは次のコード例ではsumamrizedすることができます。コンピュータのメモリを使用すると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メモリの割り当てに失敗しました!私が手 エラーは、それがいっぱいになることはありませんので、あなたはすべての反復でGPUのメモリを解放している代わりにError Allocating CPU Memory

+0

おそらく、cudaMallocは完了するためにいくつかのホストメモリも必要とします。 – Anycorn

答えて

0

Error Allocating GPU Memoryです。オペレーティングシステムは、RAMがいっぱいになるとハードコードを仮想メモリとして使用し、コードが遅くなりますが、ホスト側でメモリを割り当て続けます。たぶんCUDAは、RAMがいっぱいになると問題を引き起こしているかもしれないホストメモリ上のデバイスメモリへのポインタを保持します。

これを簡単に確認するには、カウンタを配置し、エラーがどの繰り返しで発生するかを確認することです。次に、GPUだけでメモリを割り当てるプログラムを実行し、後でCPU単体でメモリを割り当てます。両方のケースでカウンタが増えたら、私の前提は正しいです。

関連する問題