繁体   English   中英

确定最大推力长度::device_vector

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM