CUDA中的固定内存

8

我在某处读到,CUDA中的固定内存是稀缺资源。 固定内存的上限是多少? 在Windows、Linux中有什么不同?


4
固定内存是保证在主内存上分配的内存,除非空间不足。您的主机机器上有更多RAM,则可以分配更多固定内存。无法精确确定可分配的数量。 - sj755
我认为这是不正确的...假设我有4GB的RAM,如果我使用cudaHostAllloc()分配3.5GB的内存,那么我们只剩下大约500MB,操作系统可能无法在500MB内进行管理,对吗?这种分配肯定有一定的上限。 - username_4567
我在考虑这个问题,是的。操作系统不可能通过单一请求成功地分配如此巨大的固定内存块。然而,这个限制可能会随着你拥有的内存量而改变,尽管我无法确认这一点。但是,我知道可以一次性分配的最大全局内存量会随着你拥有的全局内存量而扩展。我认为分配主机内存的方式也是相同的。 - sj755
1个回答

9
固定内存指的是系统中被保留不允许操作系统分页的物理内存。因此,一旦固定,该内存量将不可用于其他进程(有效地减少了操作系统中其余内存池的可用内存)。
因此,最大可固定内存量取决于其他进程(其他应用程序、操作系统本身)所竞争的系统内存。在Windows或Linux中同时运行的进程(例如它们自己是否正在固定内存)将决定您可以在特定时间固定多少内存。

3
+1,欢迎来到 StackOverflow,Michael!补充你的答案:过度订阅固定内存可能会降低交互式操作系统的性能,因为它限制了可分页的可用物理内存空间(即会导致操作系统更频繁地进行虚拟内存“抖动”)。 - harrism
2
@harrism:确实,这是一个很好的观点。再用另一种方式来表达你的意思,假设你成功将总系统内存的80%固定为CUDA应用程序,则意味着只有20%的内存留给操作系统运行其他所有内容,直到CUDA应用程序释放内存或取消固定。 这很容易导致(我已经做过多次!)无法使用的PC,因为这就像在几GB的RAM上尝试运行Windows 7 +浏览器+电子邮件等! - mikepcw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接