有没有办法确定可以安全分配的thrust::device_vector<T>
的最大大小?
答案 0 :(得分: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有几个不同的页面大小, 1Mb是最大的)。循环继续,直到你得到一个分配,或者内存如此分散或耗尽,即使单个页面也会失败。不是很漂亮,但它似乎有99.999%的时间工作。
答案 1 :(得分:0)
使用cudaMemGetInfo
。