释放 CUDA 内存非常慢

发布于 2024-08-19 08:56:42 字数 260 浏览 2 评论 0原文

我使用 cudaMalloc((void**)&(storage->data), size * sizeof(float)) 在 GPU 上分配一些浮点数组(相当大,即 9,000,000 个元素)。在程序结束时,我使用 cudaFree(storage->data); 释放该内存。

问题是第一次释放非常慢,大约需要 10 秒,而其他释放几乎是瞬时的。

我的问题如下:什么可能导致这种差异? GPU 上的内存释放通常那么慢吗?

I am allocating some float arrays (pretty large, ie 9,000,000 elements) on the GPU using cudaMalloc((void**)&(storage->data), size * sizeof(float)). In the end of my program, I free this memory using cudaFree(storage->data);.

The problem is that the first deallocation is really slow, around 10 seconds, whereas the others are nearly instantaneous.

My question is the following : what could cause this difference ? Is deallocation memory on a GPU usually that slow ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

匿名。 2024-08-26 08:56:42

正如 NVIDIA 论坛所指出的,几乎可以肯定,问题出在您计时的方式上,而不是 cudaFree 上。

As pointed out on the NVIDIA forums, it's almost certainly a problem with the way you are timing things rather than with cudaFree.

风情万种。 2024-08-26 08:56:42

应该不会那么慢,在带有 cuda 2.2 的 Linux 上,只需要不到一秒的时间。
您是否尝试过运行主机和设备分析器来确切了解速度慢的原因?
你执行了多少单独的分配?,这确实有一些惩罚,但不是那么大。

should not be that slow, on Linux with cuda 2.2 it takes fraction of a second.
Have you tried to run host and device profilers to see exactly why a slow?
how many separate allocation do you perfor?, that does have some penalty but not so large.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文