我正在使用MPICH(MPI)版本的集群。基本上,代码在每个节点上以1 MPI进程运行,并且每个进程都具有可用的所有核心。这样,每个节点有一个MPI进程处理接收数据,然后python的本机多处理有一些工作。
从每个节点,数据都保存到目录,这就像/myfolder
一样,它们都保存在同一位置的光泽文件系统中。
现在在本地开发时,我正在进行的多处理使用对内存的读/写,而在Linux中,它基本上使用tmp目录。
fd = os.open(filename, os.O_CREAT | os.O_TRUNC | os.O_RDWR)
#Make sure the memory is allocated
assert os.write(fd, '\x00' * memsize) == memsize
#Map the file to memory
buf = mmap.mmap(fd, memsize, mmap.MAP_SHARED,access=mmap.ACCESS_WRITE)
#Put the data
buf.seek(0)
buf.write(data)
buf.seek(0)
buf.close()
os.close(fd)
如何确定存储tmp的位置?例如,我想确保它在本地内存中,而不是在根节点或光泽系统上。
问题的动机是因为代码适用于10个节点,但当扩展到50时,它会挂起,其中一些节点已经开始计算而其他节点没有启动。我想知道那些开始时是否填满了一些普通机器的内存,导致崩溃。
答案 0 :(得分:0)
您可能希望了解mpi4py及其非常好的MPI-IO支持。您将能够完全避免使用mmap,当您(总体而言,如果它符合您的应用程序的需要)与您的光泽文件系统并行写入时,MPI库很可能会为您优化请求。