1

thrust::device_vector<T>安全に割り当てることができる最大サイズを決定する方法はありますか?

4

2 に答える 2

3

私が知っている簡単な方法はありません。私の通常のアプローチは、次のようなことをすることでした。

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、それを「合理的な」サイズに減らします(GT200の時代に私が知る限り、GPU MMUには2つの異なるページサイズがあり、1Mbが最大です)。ループは、割り当てを取得するか、メモリが断片化または使い果たされて1ページでも失敗するまで続きます。あまりきれいではありませんが、99.999%の確率で動作するようです。

于 2011-07-02T06:39:25.030 に答える
0

を使用しますcudaMemGetInfo

ここのドキュメント

于 2011-07-01T00:59:31.180 に答える