我正在使用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
在我看来,排序算法需要一些额外的内存。
答案 0 :(得分:1)
推力排序操作require significant extra temporary storage。
nvidia-smi
有效地在不同时间对内存使用量进行采样,并且采样点使用的内存量可能无法反映应用程序使用(或需要)的最大内存量。正如您所发现的,cudaMemGetInfo可能更有用。
我一般都发现能够将数组排序到GPU上大约40%的内存。但是没有指定的编号,您可能需要通过反复试验来确定。
不要忘记CUDA使用一些开销内存,如果您的GPU托管显示器,那么也会占用额外的内存。