我在 cuda 5.5 中使用推力来进行整数 vector 排序。 排序 100*1024*1024 int 应该分配 400MB 内存,但是 nvidia-smi 总是显示“Memory-Usage 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 memory usage: used = 105.273682, free = 918.038818 MB, total = 1023.312500 MB
我可以在开始 gpu 分析之前检查我的整数数组可用的最大内存吗?
编辑:
好的,在排序之前我的内存使用是关于这个的。 GPU 内存使用:已用 = 545.273682,可用 = 478.038818 MB,总计 = 1023.312500 MB
在我看来,排序算法需要一些额外的内存。
最佳答案
推力排序操作require significant extra temporary storage .
nvidia-smi
在不同时间对内存使用情况进行有效采样,采样点使用的内存量可能无法反射(reflect)您的应用程序使用(或要求)的最大内存。正如你所发现的 cudaMemGetInfo可能更有用。
我通常发现 thrust 能够对数组进行排序,最多占 GPU 内存的 40%。但是没有具体的数字,您可能需要通过反复试验来确定。
不要忘记 CUDA 使用一些开销内存,如果您的 GPU 正在托管显示器,那也会消耗额外的内存。
关于c++ - 如何获得适合 gpu 内存的最大数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21415769/