我有一个程序,可以使用cholesky 分解反复求解大型线性方程组。特点是我有时需要存储可能超过约 20 GB 内存的完整因式分解。分解发生在我称之为的库中。此外,这个矩阵和由此产生的因式分解非常频繁地变化,因此内存需求也是如此。
我不是唯一使用此计算节点的人。因此,有没有办法在 Linux 下启动程序并为进程预分配空闲内存?
就像是:$: prealloc -m 25G ./program
我有一个程序,可以使用cholesky 分解反复求解大型线性方程组。特点是我有时需要存储可能超过约 20 GB 内存的完整因式分解。分解发生在我称之为的库中。此外,这个矩阵和由此产生的因式分解非常频繁地变化,因此内存需求也是如此。
我不是唯一使用此计算节点的人。因此,有没有办法在 Linux 下启动程序并为进程预分配空闲内存?
就像是:$: prealloc -m 25G ./program
我就伸个懒腰说我不认为Linux下有这种方式。我认为 Linux(以及我使用或听说过的所有其他多任务操作系统)的理念是为程序员(和程序)提供一种错觉,即他们拥有整个计算机的内存可以玩并且使程序员确实很难干扰操作系统。
相反,我认为您应该计划修改您的程序以获取它在启动时将(或可能)需要的内存,也就是说,无论您选择哪种语言,都可以自己进行内存管理。考虑到对图书馆的调用,这对您来说有多容易,我不知道。
我从来没有听说过这样的方式。如果一个程序继续运行并占用所有可用内存,通常对节点上的其他用户不利。这不是一个好习惯。
但抛开意见不谈,我可能会以这样的方式编写我的程序,它就像一个小型环境,能够多次运行相关例程而不会结束。它会在启动时分配大量内存,然后等待用户命令(通过最小的 shell)并使用分配的内存池请求运行。它将保留池,直到用户请求终止。
当然,这需要您在节点上有一个交互式会话,而您可能没有。