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 有几种不同的页面大小,最大的是 1Mb)。循环继续,直到您获得分配,或者内存碎片或耗尽,甚至单个页面都会失败。不是很漂亮,但它似乎在 99.999% 的时间里都有效。

于 2011-07-02T06:39:25.030 回答
0

使用cudaMemGetInfo.

文档在这里

于 2011-07-01T00:59:31.180 回答