我正在使用cuda 5.5的推力来制作整数矢量排序。排序100*1024*1024 INT应该分配400MB内存,但是NVIDIA-SMI始终显示"内存 - 使用105MB/1023MB"。(我的测试GPU是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,free = 918.038818 mb,总计= 1023.312500 MB
在开始GPU分析之前,我可以检查整数阵列可用的最大内存吗?
编辑:
好的,在对我的内存使用情况下进行排序之前。GPU内存使用率:二手= 545.273682,免费= 478.038818 MB,总计= 1023.312500 MB
在我看来,排序算法需要一些其他内存。
推力排序操作需要大量的额外临时存储。
nvidia-smi
在不同时间有效地采样内存使用量,并且在采样点使用的内存量可能无法反映您的应用程序所使用的最大内存(或必需)。正如您发现CudameMgetInfo可能更有用的那样。
我通常发现推力能够对GPU上的内存的大约40%进行排序。但是,没有指定的数字,您可能需要通过反复试验确定它。
不要忘记CUDA使用一些高架内存,如果您的GPU托管了显示器,也会消耗其他内存。