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

最佳答案

我知道没有一种直接的方法。我通常的方法是做这样的事情:

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%的时间内工作。

关于c++ - 确定最大推力长度:: device_vector,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6542342/

10-13 01:15