2011-07-01 6 views

答えて

3

私が知っ簡単な方法はありません。 、それ私の「合理的な」大きさは(最高のように私は、GT200の時代に言うことができるようデクリメント、

const size_t MB = 1<<20; 

size_t reserved, total; 
cudaMemGetInfo(&reserved, &total); 
char fail = 0; 
while(cudaMalloc((void**)&pool, reserved) != cudaSuccess) 
{ 
    reserved -= MB; 
    if(reserved < MB) 
    { 
     fail = 1; 
     break; 
    } 
} 

cudaMemGetInfoから返された合計空きメモリで始まる:私のいつものアプローチは、このような何かをしてきましたGPU MMUには、1Mbが最大の2つの異なるページサイズがあります)。ループは、割り当てを取得するか、メモリが断片化したり使い果たされて1ページでも失敗したりするまで続きます。それほどきれいではありませんが、99.999%の時間で動作するようです。

0

cudaMemGetInfoを使用してください。

docs here

+0

メモリ断片化のため、 'cudaMemGetInfo'によって報告される空きメモリの量は、通常、連続ブロックにはありません。ゼロと完全空きメモリの間のバイナリ検索に頼ることなく、最大連続ブロックを求める方法はありますか? – Craz

+0

@Crazまあ、わからない。ドライバapiをチェックしてください。そこにあるかもしれないかもしれない – Anycorn

+0

@Craz:本当にではありません。私は通常、 'cudaMemGetInfo'の結果で始まり、それが成功するまで合理的な単位(私は通常Mbを使います)で減分します。興味のある場合は、この[code snippet](https://github.com/avidday/hpl-cuda/blob/master/src/auxil/HPL_gpusupport.c#L96-107)の例を参照してください。 – talonmies

関連する問題