c++ - 如何获得适合 gpu 内存的最大数组大小?

标签 c++ arrays memory cuda thrust

我在 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/

相关文章:

c++ - 为什么动态内存允许在运行时操作数组?

C++ 获取数组的大小

c++ - 为什么普通的类方法可以用作Qt中的槽?

c++ - 二维数组重新分配

java - 如何在android中的文件中包含字符串数组中的路径

C++:是否绝对有必要手动分配内存?

java - 如何处理回收者 View 中的大量项目? (例如 1000 条评论)

c++ - 防止 QDockWidget 自动调整大小行为

C++:什么是 Curiously-Recurring-Template-Pattern? Curiously-Recurring-Template-Pattern 可以替代虚函数吗?

javascript - 在 JavaScript 中检查嵌套数组是否包含另一个嵌套数组的任何元素