我需要动态分配很大一部分GPU全局内存,比如64 MB,这将花费很多时间;分配完成后,将开始对分配的空间进行拷贝。我想知道是否有可能将64 MB分配到较小的块中(例如1 MB),并在每个分配的块上启动异步副本?请注意,我希望最终分配的空间是连续的。
另一个问题,不存在异步cudaMalloc或类似的东西,对吗?
我想知道是否有可能在较小的块中分配64 MB(例如1 MB)并在每个分配的块上启动异步副本?请注意,我希望最终分配的空间是连续的。
不,不可能。您无法控制地址空间中的分配位置。没有办法请求位于特定地址或与另一个分配相邻的分配。在这方面,行为和功能与主机malloc
非常相似,后者也没有这些功能。
另一个问题,不存在异步cudaMalloc或类似的东西,对吗?
没有"异步"版本的cudaMalloc
。它通常会有阻塞行为,因为它正在修改GPU的地址映射。这种地址映射的修改必须在GPU上没有其他活动发生时发生(即没有内核执行,没有复制操作正在进行)。