有没有办法确定thrust::device_vector<T>
您可以安全分配的最大大小?
问问题
663 次
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 有几种不同的页面大小,最大的是 1Mb)。循环继续,直到您获得分配,或者内存碎片或耗尽,甚至单个页面都会失败。不是很漂亮,但它似乎在 99.999% 的时间里都有效。
于 2011-07-02T06:39:25.030 回答
0
使用cudaMemGetInfo
.
于 2011-07-01T00:59:31.180 回答