[英]Determine max length of thrust::device_vector
有没有办法确定可以安全分配的最大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
返回的总免费 memory 开始,然后将其递减为“合理”大小(据我所知,在 GT200 时代,GPU MMU 有几种不同的页面大小,最大的是 1Mb)。 循环继续,直到您获得分配,或者 memory 如此碎片化或用尽,甚至单个页面都会失败。 不是很漂亮,但它似乎在 99.999% 的时间里都有效。
使用cudaMemGetInfo
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.