如何获得最大数组大小适合gpu内存?

时间:2014-01-28 20:09:54

标签: c++ arrays memory cuda thrust

我正在使用cuda 5.5的推力进行整数向量排序。 排序100 * 1024 * 1024 int应该分配400MB内存,但是nvidia-smi总是显示“内存使用率105MB / 1023MB”。(我的测试GPU是GTX260M)

排序150 * 1024 * 1024给出分配错误:

terminate called after throwing an instance of 'thrust::system::detail::bad_alloc'
  what():  std::bad_alloc: out of memory
Aborted (core dumped)

在数组分配之前我正在使用cudaMemGetInfo检查内存,它返回:

  

GPU内存使用量:已使用= 105.273682,自由= 918.038818 MB,总计=   1023.312500 MB

在开始gpu分析之前,我可以检查可用于整数数组的最大内存吗?

修改

好的,在排序之前我的内存使用情况就是这个。 GPU内存使用情况:已使用= 545.273682,免费= 478.038818 MB,总计= 1023.312500 MB

在我看来,排序算法需要一些额外的内存。

1 个答案:

答案 0 :(得分:1)

推力排序操作require significant extra temporary storage

nvidia-smi有效地在不同时间对内存使用量进行采样,并且采样点使用的内存量可能无法反映应用程序使用(或需要)的最大内存量。正如您所发现的,cudaMemGetInfo可能更有用。

我一般都发现能够将数组排序到GPU上大约40%的内存。但是没有指定的编号,您可能需要通过反复试验来确定。

不要忘记CUDA使用一些开销内存,如果您的GPU托管显示器,那么也会占用额外的内存。