简而言之:
我是计算科学家,并且在计算机集群上运行具有昂贵的(CPU时间)仿真。
我程序中最消耗CPU的部分是二进制树结构,用于加速我的代码。该树随着仿真的进行而增长,树越大,性能提升越好。我事先知道我的二叉树在我的RAM已满之前能有多大。
详细信息:
服务器在Red Hat 6.7上使用。
每个节点包含:
我的代码主要部分用Fortran编写,而其余部分用C / C ++编写-一些使用的库没有Fortran接口。该代码是用于湍流反应流的CFD求解器。我将Cantera用作热力学,运输和化学源项,Boost library用作刚性积分器,然后将一些Blas / Lapack用于矩阵运算。
问题:
我应该最大化内存(例如可用内存的99%)还是会影响CPU性能?如果是这样,最佳的内存使用百分比是什么?
答案 0 :(得分:0)
我猜您的集群正在运行Linux,因为大多数HPC集群都在运行。
您的程序(实际上是process)正在其virtual address space中运行,而不是直接在RAM中运行。 RAM是由OS内核管理的资源。阅读Operating Systems: Three Easy Pieces了解更多信息。
您需要避免使用thrashing。
根据经验(仅),因此细节肯定是错误的:
您可能需要询问系统管理员(例如,因为它们可能是在同一节点上运行的其他进程,或者因为他可以为您分配更多的资源)。
如果每个计算节点都有一些“合理的” RAM(例如,2018年为128GB或更小),则您不希望全部使用它,并且如果您的程序是唯一的一个,则可能要消耗少于95%的RAM。在该节点上运行。也许应该将数GB的RAM留给其他事物(以及系统)。
如果您的计算节点具有大量RAM(例如1TB的RAM计算机),则可能会使用几乎所有内存(例如99%),因为为“剩余”保留10GB可能绰绰有余。
如果您使用C或C ++编写代码,可能会对mmap(2)(malloc
或new
使用的系统调用),madvise(2),{{3 }}。
在某些情况下(与过程中的posix_fadvise(2)相关),您可能具有虚拟地址空间(使用locality of reference和proc(5)和pmap(1)进行查询)比使用的RAM稍高(例如5%或10%以上)。请注意ps(1)和RSS。另请参见page cache。
您当然需要进行基准测试和配置。
在进行其他编辑后,我建议对50Gbyte运行和60Gbyte运行进行基准测试,然后看看速度会更快。如果是60GB,请尝试61,然后62G,甚至63G。