【发布时间】:2017-07-06 23:37:39
【问题描述】:
在当今许多服务器级机器上,在新创建的进程中初始化 CUDA 可能需要相当长的时间as long as a half-second 或更多时间。正如@RobertCrovella explains,CUDA 初始化通常包括建立统一内存模型,这涉及设备和主机内存映射的协调。对于具有大量内存的机器,这可能需要相当长的时间;并且可能还有其他因素导致了这种长时间的延迟。
当您想要运行一系列使用 CUDA 的进程时,这种效果会变得非常烦人,这些进程不使用复杂的虚拟内存映射:它们每个都必须等待漫长的等待 - 尽管“基本上”,它们可以只需重新使用 CUDA 是否上次进行的初始化(可能需要一些清理代码)。
现在,显然,如果您以某种方式重写所有这些进程的代码以在单个进程中执行 - 这将为您节省那些漫长的初始化成本。但是没有更简单的方法吗?怎么样:
- 在进程之间传递相同的状态信息/CUDA 上下文?
- 告诉 CUDA 完全忽略大部分主机内存?
- 让统一内存协调比现在更懒惰,只在实际需要时才发生?
- 在禁用统一内存的情况下启动 CUDA?
- 保留一些守护进程并锁定它已经初始化的 CUDA 状态?
【问题讨论】:
标签: optimization cuda initialization delay unified-memory