确定thrust :: device_vector的最大长度

时间:2011-07-01 00:00:20

标签: c++ cuda thrust

有没有办法确定可以安全分配的thrust::device_vector<T>的最大大小?

2 个答案:

答案 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

docs here