【发布时间】:2012-10-16 19:52:25
【问题描述】:
在大量内核上调试我的程序时,我遇到了insufficient virtual memory 的非常奇怪的错误。我的调查导致代码和平,其中主人向每个奴隶发送小消息。然后我写了一个小程序,其中 1 个 master 简单地用MPI_SEND 发送 10 个整数,所有 slave 用MPI_RECV 接收它。比较/proc/self/status 之前和之后的文件MPI_SEND 显示,内存大小之间的差异是巨大的!最有趣的事情(使我的程序崩溃)是,在MPI_Send 之后,该内存不会释放,并且仍然占用大量空间。
有什么想法吗?
System memory usage before MPI_Send, rank: 0
Name: test_send_size
State: R (running)
Pid: 7825
Groups: 2840
VmPeak: 251400 kB
VmSize: 186628 kB
VmLck: 72 kB
VmHWM: 4068 kB
VmRSS: 4068 kB
VmData: 71076 kB
VmStk: 92 kB
VmExe: 604 kB
VmLib: 6588 kB
VmPTE: 148 kB
VmSwap: 0 kB
Threads: 3
System memory usage after MPI_Send, rank 0
Name: test_send_size
State: R (running)
Pid: 7825
Groups: 2840
VmPeak: 456880 kB
VmSize: 456872 kB
VmLck: 257884 kB
VmHWM: 274612 kB
VmRSS: 274612 kB
VmData: 341320 kB
VmStk: 92 kB
VmExe: 604 kB
VmLib: 6588 kB
VmPTE: 676 kB
VmSwap: 0 kB
Threads: 3
【问题讨论】:
-
您使用的是哪种 MPI 实现,这是在哪种网络上?
-
今天是星期五,大多数 SO 常客早已耗尽了他们的法力,并且无法猜测您在问题中未提供的内容。从注册内存的数量来看,我猜你是在 InfiniBand 或另一个支持 RDMA 的网络上运行的。从数据段的大小和注册内存的数量来看,我还猜想您并没有为所有发送操作重用相同的缓冲区,而是不断地分配一个新的缓冲区。请告诉我们您使用的 MPI 库并向我们展示您的发件人的源代码,以证明我错了。
-
MPI:impi-4.0.3 编译器:intel-13.0
-
QDR Infiniband 4x/10G 以太网/千兆以太网
标签: linux mpi infiniband intel-mpi