CUDA malloc, mmap/mremap



CUDA设备存储器可以使用cudaMalloc/cudaFree分配。这很好,但原始。

我很想知道,设备内存是否以某种方式虚拟化?是否有与mmap相同的操作,更重要的是,用于设备内存的mremap?如果设备内存已虚拟化,我希望应该存在这些功能。当有多个过程对有限的视频资源争议时,现代GPU驱动程序似乎实施了分页,这表明它以某种方式虚拟化了...

有人知道我可以在哪里阅读有关此的更多信息吗?

编辑:
好的,我的问题有点笼统。我已经阅读了有关为设备访问的映射系统内存的手册的位。但是,我对设备分配的内存更感兴趣。

特定问题:
- 有什么可能的方法可以重新启动设备内存?(即要种植设备分配(
- 可以将分配的内存映射到系统内存吗?
- 使用映射的固定记忆是否有一些性能危险?内存是根据需要在设备上复制的,还是始终 在PCI-E BUS上获取内存?

我有99%的时间使用内存的情况;因此,它应该是设备本地的,但是将设备内存映射到系统内存可能很方便,而无需实现尴尬的深度拷贝。

是的,存在统一的内存,但是我对明确分配感到满意,除了我想要偷偷摸摸的回头的奇数时刻。

我一般发现了手动的详细信息。

cuda带有精美的CUDA C编程指南,因为它的主要手册,该手册在映射内存以及统一的内存编程上都有部分。

回答您的其他发布的问题,并遵循您的提示,将UM排除在外:

  • 是否有可能重新启动设备内存的方法?(即要种植设备分配(

    没有直接方法。您将必须手动创建所需大小的新分配,然后将旧数据复制到它,然后释放旧分配。如果您期望这样做很多,并且不介意与之相关的重要开销,那么您可以看一下推力设备向量,这将隐藏某些手动劳动,并让您在单个矢量中调整分配大小样式.resize()操作。但是,没有魔术,所以推力只是一个模板库构建在CUDA C顶部(用于CUDA设备后端(,因此它将像手动"手动"一样进行cudaMalloccudaFree操作的顺序。

  • 是否可以将设备分配的内存映射到系统内存?

    抛开嗯,不。设备内存无法映射到主机地址空间中。

  • 使用映射的固定记忆是否存在某些性能危险?是否根据需要在设备上复制内存,还是始终在PCI-E总线上获取内存?

    no,主机映射的数据永远不会在设备内存中复制,除了L2缓存,GPU所需的映射数据将始终在PCI-E BUS上获取

最新更新