【问题标题】:Is Large contiguous allocation on GPU global memory possible using smaller chunks?是否可以使用较小的块在 GPU 全局内存上进行大型连续分配?
【发布时间】:2015-10-14 00:52:13
【问题描述】:

我需要动态分配大部分 GPU 全局内存,比如说 64 MB,这会花费很多时间;分配完成后,将开始复制到/从分配的空间。我想知道是否可以将 64 MB 分配为较小的块(例如 1 MB)并在每个分配的块上启动异步复制?请注意,我希望最终分配的空间是连续的。

另一个问题,不存在异步 cudaMalloc 或与之等效的任何东西,对吧?

【问题讨论】:

  • 谢谢 Greogr,我的意思是另外一回事,我的意思是关于在 GPU 上运行的其他指令。但是,这是一个很好的观点“内存分配通常在页数中是 O(n)”。这也适用于 cudaMalloc 吗?你能在这里提供一个参考吗?

标签: cuda malloc gpu


【解决方案1】:

我想知道是否可以将 64 MB 分配为较小的块(例如 1 MB)并在每个分配的块上启动异步复制?请注意,我希望最终分配的空间是连续的。

不,这是不可能的。您无法控制分配在地址空间中的位置。无法请求位于特定地址或与另一个分配相邻的分配。在这方面,其行为和能力与主机malloc 非常相似,后者也没有这些能力。

另一个问题,不存在异步 cudaMalloc 或与之等效的任何东西,对吧?

cudaMalloc 没有“异步”版本。它通常具有阻塞行为,因为它正在修改 GPU 的地址映射。这种地址映射的修改必须在 GPU 上没有发生其他活动时发生(即没有执行内核,没有正在进行的复制操作)。

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 2011-08-16
    • 2010-10-12
    • 2016-07-19
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多