MPI 中的变量使用
Variable use in MPI
在 MPI 中,如果我有以下代码,将为两个进程创建变量 'a' 的副本,还是我必须在每个循环内声明 'a'?还是两者相同?
main()
{
int a;
if(rank==0)
{
a+=1;
}
if(rank==1)
{
a+=2;
}
}
MPI 有一个分布式内存编程范例。
简单地说,如果您有一个应用程序二进制文件(例如:hello.out
),并且如果您 运行 它具有 mpi 运行 时间 mpirun -n 4 hello.out
那么发生的事情是:
它启动了应用程序的 4 个实例 hello.out
(我们可以说它类似于在 4 个不同的节点中启动 4 个不同的应用程序)。他们彼此不认识。他们在自己的地址空间中执行自己的代码。这意味着,每个变量、函数等都属于它自己的实例,不与任何其他进程共享。所以所有进程都有自己的变量 a
.
即,下面的代码将在不同的 cores/nodes 中同时调用 4 次(如果我们使用 mpirun -n 4
)。因此,变量 a
将在所有 4 个实例中可用。您可以使用 rank
来识别您的 MPI 进程并操纵它的值。在下面的示例中,a
将存储进程 rank
值。所有进程都将打印 My rank is a
和 a
,取值从 0
到 4
。并且只有 一个 进程将打印 I am rank 0
因为 a==0
对于 rank 0
.
的进程只会是 true
main()
{
int a;
int rank;
MPI_Init(NULL, NULL);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
a=rank;
printf("My rank is %d",a);
if(a==0)
{
printf("I am rank 0");
}
}
因此,为了相互交互,启动的进程(例如:hello.out
)使用 MPI(消息传递接口)库(如 @Hristo Iliev 评论) .
所以基本上,这就像在多个 cores/nodes 上启动相同的常规 C 程序并使用消息传递相互通信(如 Gilles Gouaillardet 在评论中指出)。
在 MPI 中,如果我有以下代码,将为两个进程创建变量 'a' 的副本,还是我必须在每个循环内声明 'a'?还是两者相同?
main()
{
int a;
if(rank==0)
{
a+=1;
}
if(rank==1)
{
a+=2;
}
}
MPI 有一个分布式内存编程范例。
简单地说,如果您有一个应用程序二进制文件(例如:hello.out
),并且如果您 运行 它具有 mpi 运行 时间 mpirun -n 4 hello.out
那么发生的事情是:
它启动了应用程序的 4 个实例 hello.out
(我们可以说它类似于在 4 个不同的节点中启动 4 个不同的应用程序)。他们彼此不认识。他们在自己的地址空间中执行自己的代码。这意味着,每个变量、函数等都属于它自己的实例,不与任何其他进程共享。所以所有进程都有自己的变量 a
.
即,下面的代码将在不同的 cores/nodes 中同时调用 4 次(如果我们使用 mpirun -n 4
)。因此,变量 a
将在所有 4 个实例中可用。您可以使用 rank
来识别您的 MPI 进程并操纵它的值。在下面的示例中,a
将存储进程 rank
值。所有进程都将打印 My rank is a
和 a
,取值从 0
到 4
。并且只有 一个 进程将打印 I am rank 0
因为 a==0
对于 rank 0
.
true
main()
{
int a;
int rank;
MPI_Init(NULL, NULL);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
a=rank;
printf("My rank is %d",a);
if(a==0)
{
printf("I am rank 0");
}
}
因此,为了相互交互,启动的进程(例如:hello.out
)使用 MPI(消息传递接口)库(如 @Hristo Iliev 评论) .
所以基本上,这就像在多个 cores/nodes 上启动相同的常规 C 程序并使用消息传递相互通信(如 Gilles Gouaillardet 在评论中指出)。