如果我在一台有 2 个 cpu 的机器上运行一个需要 3 个节点(即 mpiexec-np 3./ Program)的 MPI 程序会发生什么?
当然,这取决于您的 MPI 实现。最有可能的是,它将创建三个进程,并使用共享内存来交换消息。这将很好地工作:操作系统将在三个进程中调度两个 CPU,并始终执行其中一个就绪进程。如果进程等待接收消息,它将阻塞,操作系统将计划运行其他两个进程之一-其中一个将发送消息。
马丁给出了正确的答案,我已经加上了他,但我只想添加一些微妙的东西,这些东西太长了,无法放入评论框中。
当然,拥有比内核更多的进程没有错;在运行任何 MPI 程序之前,您可能已经在计算机上运行了数十个程序。您可以尝试使用 Linux 盒子上的任何命令行可执行文件,例如mpirun -np 24 stname
或mpirun -np 17 ls
,您将获得 24 个主机名副本或 17 个(可能是交错的)目录列表,并且一切运行正常。
在 MPI 中,使用比内核更多的进程通常被称为“超额订阅”。它有一个特殊名称的事实已经表明它是一个特殊情况。当每个进程都有自己的核心时,用 MPI 编写的程序通常表现最好。在某些情况下,不需要这样做,但 (到目前为止) 是常见的。出于这个原因,例如,OpenMPI 已经针对通常的情况进行了优化-它只是使用了一个强大的进程
由于历史原因,我比 MPICH2 更熟悉 OpenMPI,但我的理解是,MPICH2 的默认值更宽容超额认购的情况-但我认为即使在那里,也有可能打开更积极的 busywaiting。
无论如何,这是一个很长的路要走,是的,你在做什么是非常好的,如果你看到任何奇怪的问题,当你切换 MPIs 甚至 MPIs 的版本,做一个快速搜索,看看是否有任何参数需要调整这种情况。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(81条)