Articles of mpi

用于由MPI创build的进程的共享内存访问控制机制

我有一个由多个进程使用的共享内存,这些进程是使用MPI创build的。 现在我需要一个机制来控制这个共享内存的访问。 我知道named semaphore和flock机制可以用来做这个,但只是想知道MPI是否提供了共享内存使用的任何特殊的locking机制? 我在Linux下工作。

如何让C程序等待(在Linux上)?

如何让C程序等待(在Linux上)? (我需要用MPI等待 – 我需要C代码)

Rmpi:不能使用MPI_Comm_spawn API

我在我的linux机器上安装了Rmpi,并在R中成功加载。在我的机器上有两个版本的MPICH,我相信已经安装了最新版本的Rmpi。 我也不得不更新我的LD_LIBRARY_PATH 。 我主要按照这里的安装说明。 在R加载Rmpi后,我运行mpi.spawn.Rslaves(nslaves=4)并得到以下错误信息: Error in mpi.spawn.Rslaves(nslaves = 2) : You cannot use MPI_Comm_spawn API 有谁知道我可以如何让Rmpi工作? 谢谢!

MPI_SEND占用了大量的虚拟内存

在大量的内核上debugging我的程序时,我遇到了insufficient virtual memory非常奇怪的错误。 我的调查导致代码的和平,主人向每个奴隶发送小消息。 然后我写了一个小程序,其中1个主站只发送10个整数, MPI_SEND ,所有从站都接收到MPI_RECV 。 比较MPI_SEND之前和之后的文件/proc/self/status ,内存大小之间的差异是巨大的! 最有趣的事情(这使我的程序崩溃),是这个内存不会释放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 […]

增加虚拟内存而不增加VmSize

我在Google和这个网站上search了我的问题,但是我仍然不明白这个解决scheme。 我有一块RECV数据的MPI程序。 程序在虚拟内存不足的情况下在大arrays上崩溃,所以我开始考虑/proc/self/status文件。 在MPI_RECV之前是: Name: model.exe VmPeak: 841640 kB VmSize: 841640 kB VmHWM: 15100 kB VmRSS: 15100 kB VmData: 760692 kB 之后: Name: model.exe VmPeak: 841640 kB VmSize: 841640 kB VmHWM: 719980 kB VmRSS: 719980 kB VmData: 760692 kB 我在Ubuntu上testing它,通过系统监视器,我看到这个内存在增加。 但我很困惑, VmSize (和VmPeak )参数没有改变。 问题是 – 真实内存使用情况的指标是什么? 这是否意味着真正的指标是VmRSS ? (和VmSize只分配但仍然没有使用内存)

MPICH:如何发布名称,使客户端应用程序可以lookup_name呢?

在Windows(1.4.1p1)中使用MPICH学习MPI时,我在这里find了一些示例代码。 最初,当我运行服务器时,我将不得不复制生成的port_name并用它启动客户端。 这样,客户端可以连接到服务器。 我将其修改为在服务器中包含MPI_Publish_name() 。 以aaaa名称启动服务器后,启动失败MPI_Lookup_name()的客户端 Invalid service name (see MPI_Publish_name), error stack: MPID_NS_Lookup(87): Lookup failed for service name aaaa 以下是代码片段: server.c MPI_Comm client; MPI_Status status; char port_name[MPI_MAX_PORT_NAME]; char serv_name[256]; double buf[MAX_DATA]; int size, again; int res = 0; MPI_Init( &argc, &argv ); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Open_port(MPI_INFO_NULL, port_name); sprintf(serv_name, "aaaa"); MPI_Publish_name(serv_name, MPI_INFO_NULL, port_name); while (1) { […]

尝试启动另一个进程,并通过MPIjoin,但访问冲突

我试图启动另一个进程,调用第一个,并通过MPIjoin,但我得到一个访问冲突,我不明白。 我认为代码应该是非常自我解释,访问冲突命中MPI_COMM_ACCEPT行。 我认为一切看起来都是一致的,它应该起作用,但不会。 如果我把这一切都弄错了,还有一个更简单的方法,让我知道。 我没有使用mpiexec,因为我试图在构build整个混乱的testing框架中这样做,但如果这样做更有意义,那么告诉我,我已经做了一个烂摊子。 #include <windows.h> #include <AtlBase.h> #include <atlconv.h> #include <iostream> #include "mpi.h" #include <string> int main(int argc, char** argv) { MPI_Init(&argc, &argv); MPI_Comm intercomm; if (argc == 1) { PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); std::string x = std::string(argv[0]); x += " "; x += std::to_string(1); int […]

在几台Windows机器上从控制台运行MPI程序

我试图在几台Windows机器上执行并行MPI程序(实际上我有一台Win7和一台WinXP机器,但是其他configuration(例如所有机器上的WinXP)都有同样的问题)。 我使用MPICH2(1.4.1p1)。 我可以执行程序,如果我使用wmpiexec(MPIEXEC包装 – graphics用户界面的MPI),但如果我尝试从控制台执行它,我抓住下一个错误: 命令: mpiexec -hosts 2 locahost 2 192.168.0.102 2 <path to the program> 错误: mpiexec running on <name of my machine> is unable to connect to msmpi service on locahost:8677 我已经在Windows防火墙中为程序创build了规则。 那么哪里可以成为一个问题? 提前致谢。