有没有一种方法可以确定可以安全分配的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/