- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这篇文章与之前的一篇文章相关binding threads to certain MPI processes .在这里,有人询问如何为 MPI 等级分配不同的等级OpenMP 线程数。一种可能如下
$ mpiexec <global parameters>
-n n1 <local parameters> executable_1 <args1> :
-n n2 <local parameters> executable_2 <args2> :
...
-n nk <local parameters> executable_k <argsk>
我不知道独立实例 executable_1、executable_2、...、executable_k 是如何相互通信的。我是说如果在执行期间的某个时刻他们需要交换数据,他们是否使用内部通信器(实例之间)和内部通信器(在同一个实例中,例如 executable_1)?
谢谢。
最佳答案
作为该命令的结果启动的所有进程形成单个 MIMD/MPMD MPI 作业,即它们共享同一个世界通信器。前 n1
行运行 executable_1
,后面的 n2
行运行 executable_2
,等等。
rank | executable
----------------------------------------+---------------
0 .. n1-1 | executable_1
n1 .. n1+n2-1 | executable_2
n1+n2 .. n1+n2+n3-1 | executable_3
.... | ....
n1+n2+n3+..+n(k-1) .. n1+n2+n3+..+nk-1 | executable_k
通过在 MPI_COMM_WORLD
中发送消息来进行通信。单独的可执行文件不会自动形成它们自己的通信器组。这就是 MPMD 与使用 MPI_Comm_spawn
启动子作业的区别 - 子作业有自己的世界通信器,一个人使用内部通信器与它们交谈,而 MIMD/MPMD 作业中的单独子作业则没有。
等级仍然可以通过查询MPI_COMM_WORLD
的MPI_APPNUM
属性来找出它属于哪个应用上下文。通过简单地使用 appnum 值作为颜色执行拆分,可以为每个上下文创建单独的子通信器(不同的上下文是由 :
分隔的命令):
int *appnum, present;
MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_APPNUM, &appnum, &present);
if (!present)
{
printf("MPI_APPNUM is not provided!\n");
MPI_Abort(MPI_COMM_WORLD, 0);
}
MPI_Comm appcomm;
MPI_Comm_split(MPI_COMM_WORLD, *appnum, 0, &appcomm);
关于multithreading - MPMD MPI 执行中的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41358038/
这篇文章与之前的一篇文章相关binding threads to certain MPI processes .在这里,有人询问如何为 MPI 等级分配不同的等级OpenMP 线程数。一种可能如下 $
我有两个 openmpi 程序,我是这样启动的 mpirun -n 4 ./prog1 : -n 2 ./prog2 现在我如何使用 MPI_Comm_size(MPI_COMM_WORLD, &si
我是一名优秀的程序员,十分优秀!